Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 30.11.2015
Сообщений: 103

DataGridView удаление строк и позиционирование

01.07.2018, 19:01. Показов 1730. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток уважаемые. Столкнулся с такой проблемой, что мне нужно удалять записи из базы данных, но и нужно, чтобы они пропадали из таблицы. Не могу найти решение проблемы. Есть код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
try
            {
            Form1.NonQuery query = new Form1.NonQuery();
            int rowindex = dataGridView1.CurrentCell.RowIndex; 
            string currentId = dataGridView1.Rows[rowindex].Cells[0].Value.ToString(); 
            query.NQuery("DELETE FROM nomenclature where id="+Convert.ToInt32(currentId));// выполняем удаление
            query.QueryReaderDataLog("SELECT (Nomenclature.id) AS Номер, (Nomenclature.Name) AS Наименование, (Nomenclature.Сharacteristic) AS Штрих_код," +
                "(Nomenclature.Motivation) AS Мотивация, (Nomenclature.Note) AS Заметка FROM Nomenclature", dataGridView1);
//выполнился запрос на выборку
          
                if ((dataGridView1.Rows.Count - 1) != 0)//не могу разобраться какое условие ставить, если я удаляю последнюю строку таблицы
                {
                    dataGridView1.FirstDisplayedCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];
                    dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];
                    
                }
                else
                {
                    dataGridView1.FirstDisplayedCell = dataGridView1.Rows[0].Cells[0];
                    dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0];
                }
            }
            catch { }
Собственно не могу понять как это реализовать, чтобы было не криво. Если удаляю последнюю строку, то по сути выходит ошибка, но ее я сожрал с помощью Try, не знаю правильно ли это. Если удаляю строки с конца таблицы, то вроде идет все хорошо, если начинаю удалять в начале или в середине, либо в другом месте, то меня бросает только в конец таблицы. Что то с условием нужно изменить. По сути нужно, чтобы при удалении строки и обновления таблицы строка прыгала либо на предыдущую удаленной запись, либо на следующую, зависит от того, где удаляется текущая строка.

На скирншоте выделена 91 строка, нужно, чтобы после ее удаления выделилась 90 строка. А если допустим я удаляю 87 строку, то должна подсветиться 88. Когда строк совсем не станет просто button.Enabled=false и дело с концами.

Подскажите пожалуйста у кого есть опыт. Нашел этот код в интернете, это исходный, до этого пробовал перебирать по разному, но безуспешно.
Миниатюры
DataGridView удаление строк и позиционирование  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.07.2018, 19:01
Ответы с готовыми решениями:

Удаление строк из datagridview. Access C#
Здравствуйте! Можно ли как нибудь удалить строку из таблицы, которая выводится через датагривью на форму? база данных в аксесе. Наверное...

Удаление и добавление строк в DataGridView
Здравствуйте! Я только что начал изучать базы данных и сделал небольшую базу. У меня возникла проблема с DataGridView. Когда я добавляю...

Удаление нескольких строк из DataGridView
Добрый день! Имеется простенькая форма - на ней грид, подключенный к данным из базы MS SQL 2008, и кнопка удаления записи из таблицы....

3
1 / 1 / 0
Регистрация: 30.11.2015
Сообщений: 103
01.07.2018, 19:13  [ТС]
Немного подшаманил, вроде работает, НО, если использовать catch, то выдает что индекс за пределами диапазона и бла бла бла, потому что моя строка выходит в -1, чего нет в дата грид, если конечно не использовать catch и оставить его пустым, то с виду все неплохо таки работает, но я все равно чувствую себя без трусов посреди Гонконга, когда такое пишу, может есть другое решение или я в шары долблюсь? Сижу давно, мозг лежит уже в урне рядом.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
try
            {
            Form1.NonQuery query = new Form1.NonQuery();
            int rowindex = dataGridView1.CurrentCell.RowIndex;
            string currentId = dataGridView1.Rows[rowindex].Cells[0].Value.ToString();
            query.NQuery("DELETE FROM nomenclature where id="+Convert.ToInt32(currentId));
            query.QueryReaderDataLog("SELECT (Nomenclature.id) AS Номер, (Nomenclature.Name) AS Наименование, (Nomenclature.Сharacteristic) AS Штрих_код," +
                "(Nomenclature.Motivation) AS Мотивация, (Nomenclature.Note) AS Заметка FROM Nomenclature", dataGridView1);
 
          
                if ((dataGridView1.Rows.Count - 1) != 0)
                {
                    dataGridView1.FirstDisplayedCell = dataGridView1.Rows[rowindex - 1].Cells[0];
                    dataGridView1.CurrentCell = dataGridView1.Rows[rowindex - 1].Cells[0];
                    
                }
                else
                {
                    dataGridView1.FirstDisplayedCell = dataGridView1.Rows[0].Cells[0];
                    dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0];
                }
            }
            catch(Exception ex) { MessageBox.Show(ex.ToString()); }
Миниатюры
DataGridView удаление строк и позиционирование  
0
1 / 1 / 0
Регистрация: 30.11.2015
Сообщений: 103
01.07.2018, 19:25  [ТС]
Доработал код. Но все же, при удалении последней строки пишет, что индекс за пределами диапазона коллекции, что он не должен быть меньше, либо больше самой коллекции.....
Как с этим можно побороться?


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 try
            {
            Form1.NonQuery query = new Form1.NonQuery();
            int rowindex = dataGridView1.CurrentCell.RowIndex;
            string currentId = dataGridView1.Rows[rowindex].Cells[0].Value.ToString();
            query.NQuery("DELETE FROM nomenclature where id="+Convert.ToInt32(currentId));
            query.QueryReaderDataLog("SELECT (Nomenclature.id) AS Номер, (Nomenclature.Name) AS Наименование, (Nomenclature.Сharacteristic) AS Штрих_код," +
                "(Nomenclature.Motivation) AS Мотивация, (Nomenclature.Note) AS Заметка FROM Nomenclature", dataGridView1);
 
 
                if ((rowindex - 1) <0) //тут проверил
                {
                    MessageBox.Show("Я здесб");
                    dataGridView1.FirstDisplayedCell = dataGridView1.Rows[rowindex].Cells[0];
                    dataGridView1.CurrentCell = dataGridView1.Rows[rowindex].Cells[0];
                }
                else if ((dataGridView1.Rows.Count - 1) != 0)
                {
                    dataGridView1.FirstDisplayedCell = dataGridView1.Rows[rowindex - 1].Cells[0];
                    dataGridView1.CurrentCell = dataGridView1.Rows[rowindex - 1].Cells[0];
                    
                }
                else
                {
                    dataGridView1.FirstDisplayedCell = dataGridView1.Rows[0].Cells[0];
                    dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0];
                }
            }
            catch(Exception ex) { MessageBox.Show(ex.ToString()); }
Если допустим я удаляю последний элемент коллекции, то мне нужно что то типа взять Count коллекции и проверить его и если там осталось одно значение, то просто удалить его без последующих действий и выполнить запрос на выборку конечно. Пока не сообразил как это сделать.
Миниатюры
DataGridView удаление строк и позиционирование  
0
1 / 1 / 0
Регистрация: 30.11.2015
Сообщений: 103
01.07.2018, 21:03  [ТС]
Решил сам. Спасибо за внимание. Нужно было просто немного отдохнуть)))

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
try
            {
                Form1.NonQuery query = new Form1.NonQuery();
                int rowindex = dataGridView1.CurrentCell.RowIndex;
                string currentId = dataGridView1.Rows[rowindex].Cells[0].Value.ToString();
                query.NQuery("DELETE FROM nomenclature where id=" + Convert.ToInt32(currentId));
                query.QueryReaderDataLog("SELECT (Nomenclature.id) AS Номер, (Nomenclature.Name) AS Наименование, (Nomenclature.Сharacteristic) AS Штрих_код," +
                    "(Nomenclature.Motivation) AS Мотивация, (Nomenclature.Note) AS Заметка FROM Nomenclature", dataGridView1);
                int countRows = dataGridView1.Rows.Count;
                if ((rowindex - 1) < 0)
                {
                    if (countRows == 0)
                    {
                        MessageBox.Show("Я тут");
                        // Тут осталось только кнопку заблокировать
                    }
                    else if (countRows > 0)
                    {
                        dataGridView1.FirstDisplayedCell = dataGridView1.Rows[rowindex].Cells[0];
                        dataGridView1.CurrentCell = dataGridView1.Rows[rowindex].Cells[0];
                    }
                    else if ((dataGridView1.Rows.Count - 1) != 0)
                    {
                        dataGridView1.FirstDisplayedCell = dataGridView1.Rows[rowindex - 1].Cells[0];
                        dataGridView1.CurrentCell = dataGridView1.Rows[rowindex - 1].Cells[0];
 
                    }
                    else
                    {
                        dataGridView1.FirstDisplayedCell = dataGridView1.Rows[0].Cells[0];
                        dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0];
                    }
                }
            }
            catch(Exception ex) { MessageBox.Show(ex.ToString()); }
Добавлено через 48 минут
были ошибки, вот доработано, может когда то пригодится кому нибудь

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
try
            {
                Form1.NonQuery query = new Form1.NonQuery();
                int rowindex = dataGridView1.CurrentCell.RowIndex;
                string currentId = dataGridView1.Rows[rowindex].Cells[0].Value.ToString();
                query.NQuery("DELETE FROM nomenclature where id=" + Convert.ToInt32(currentId));
                query.QueryReaderDataLog("SELECT (Nomenclature.id) AS Номер, (Nomenclature.Name) AS Наименование, (Nomenclature.Сharacteristic) AS Штрих_код," +
                    "(Nomenclature.Motivation) AS Мотивация, (Nomenclature.Note) AS Заметка FROM Nomenclature", dataGridView1);
                int countRows = dataGridView1.Rows.Count;
                if ((rowindex - 1) < 0)
                {
                    if (countRows == 0)
                    {
                        MessageBox.Show("Я тут");
                        buttonDelete.Enabled = false;
                    }
                }
                else if ((dataGridView1.Rows.Count - 1) != 0)
                {
                    dataGridView1.FirstDisplayedCell = dataGridView1.Rows[rowindex - 1].Cells[0];
                    dataGridView1.CurrentCell = dataGridView1.Rows[rowindex - 1].Cells[0];
 
                }
                else
                {
                    dataGridView1.FirstDisplayedCell = dataGridView1.Rows[0].Cells[0];
                    dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0];
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.ToString()); }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.07.2018, 21:03
Помогаю со студенческими работами здесь

Удаление строк в БД через DataGridView
Здравствуйте, во время удаления рядка все проходит нормально, но когда я хочу добавить новый рядок то ID показывает не верно (1 рядок может...

Добавление, изменение и удаление строк dataGridView
Добрый вечер, форумчане. Помогите пожалуйста, кто сможет. Ситуация такая: есть форма с объектом dataGridView, которая отображает содержимое...

Удаление строк по определенным параметрам из datagridview
Всем привет есть datagridview в нем отображается таблица с данными. Нужно удалить все строки в которых определенный столбец будет равен ...

Datagridview и удаление строк через BindingSource
Здравствуйте, столкнулся с такой проблемой. Имеется БД SQL SERVER, в базе таблицы с identity столбцами (ID). Тут столкнулся с такой...

Удаление и редактирование строк в БД через DataGridView
пересмотрел уже кучу всего , но так и не нашёл нормального способа удалить(обновить) строку в dataset Пробовал удалять так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru