Удаление строк в DataGridView c#

baimkin

Client
Регистрация
04.08.2015
Сообщения
283
Благодарностей
111
Баллы
43
Добрый день!
Есть код получения данных и базы и привязки их к DataGridView через DataSet.
Привязывается и отображается все замечательно, но вот когда возникает необходимость по удалять строки ненужные все зависает.
Вот код привязки и удаления:
Код:
DataSet ds = new DataSet();
da.Fill(ds);       
dataGridView1.DataSource = ds.Tables[0].DefaultView;   

//Удаляем строки где zak равно 0
for (int i = 0; i < dataGridView1.RowCount; i++){
    int zak = int.TryParse(dataGridView1["Column8", i].Value.ToString(), out zak) ? zak : 0;
    if (zak == 0){
        dataGridView1.Rows.RemoveAt(i);
        i--;
        continue;
    }
}
Я так понимаю проблема возникает из за того что данные удаляются с грида, но не удаляются с датасета и он после удаления производит повторную привязку к гриду, пробовал задавать удаления через датасет, все равно виснет.
И еще зависает не на всех таблицах запрошенных из базы, а только на части, таблицы совсем не большие макс 3000 строк. Количество столбцов и их названия одинаковы во всех таблицах. Если строки не пытаться удалять, любые таблицы моментально отображаются в DataGridView .
Уже 3 часа думаю что к чему, но решить проблему не удалось.
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Если на первый взгляд, то есть логическая ошибка.
Делается цикл, проход по строчкам, и в этом же цикле удаляются строчки. Странно что нет ошибки Out Of Range Exception.
Хотя она возможно и есть, но где то в недрах зенки глушится(скорее всего из за этого и зависает). Это же я так понимаю в зенке делается?
Порекомендовал бы в студии написать код, отладить, а потом перенести в зенку. Так будет быстрее и нервов меньше потратится.:-)
 
  • Спасибо
Реакции: baimkin

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
ошибка в том что цикл надо делать снизу вверх.
for (int i = dgw.RowCount - 1; i >= 0; i--)
{
........
}
 
  • Спасибо
Реакции: baimkin
Регистрация
08.06.2017
Сообщения
1
Благодарностей
1
Баллы
3
а может просто 10-ю строку закоментить, ну 11-я для чего ??
 
  • Спасибо
Реакции: Radzhab

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113

baimkin

Client
Регистрация
04.08.2015
Сообщения
283
Благодарностей
111
Баллы
43
а может просто 10-ю строку закоментить, ну 11-я для чего ??
10 я строка в моем варианте нужна т.к после того как удаляется строка, то на ее место смещается следующая и если не уменьшать i на 1 единицу назад, то он перескочит сместившуюся строку.
11 строка нужна для того чтобы цикл сразу продолжился т.к у меня в коде после if {} если строку не пришлось удалять идет обработка строки, изменение цвета, размера и т.д, прост я ее убрал с примера т.к она не связана с зависанием.
 

baimkin

Client
Регистрация
04.08.2015
Сообщения
283
Благодарностей
111
Баллы
43
Если на первый взгляд, то есть логическая ошибка.
Делается цикл, проход по строчкам, и в этом же цикле удаляются строчки. Странно что нет ошибки Out Of Range Exception.
Хотя она возможно и есть, но где то в недрах зенки глушится(скорее всего из за этого и зависает). Это же я так понимаю в зенке делается?
Порекомендовал бы в студии написать код, отладить, а потом перенести в зенку. Так будет быстрее и нервов меньше потратится.:-)
Да пока еще делаю для зенки, но она так ускоряет обучение c# что скоро буду переводить программу в отдельное приложение, да и работать с большим количеством WinForm и переключатся между ними в зенке не удобно, а у меня вся программа на них, все таки зенка больше для других целей сделана.
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Да пока еще делаю для зенки, но она так ускоряет обучение c# что скоро буду переводить программу в отдельное приложение, да и работать с большим количеством WinForm и переключатся между ними в зенке не удобно, а у меня вся программа на них, все таки зенка больше для других целей сделана.
Насчет ускорения обучению C# можно поспорить.:-)
Т.к. как ты заметил, она не под то заточена.
Да, может какие то азы можно и в зенке изучить, но имхо, их же проще будет изучить и в студии, тупо потому что там удобнее.
А если ты активно юзаешь WinForms, то делать это все в зенке, это вообще маньячество.:D
В зенке надо каждый элемент ручками прописывать, а в студии ты бы кинул его на форму через drag&drop и в свойствах с комфортом установил нужные значения.
От зенки ты сможешь уйти в том случае, если делаешь для себя. Если на продажу, то потом придется пихать обратно в зенку.
Собственно у меня так и получилось. Сначала делал все в студии под WPF, а потом переносил в зенку, для защиты.
 
  • Спасибо
Реакции: Dimionix

baimkin

Client
Регистрация
04.08.2015
Сообщения
283
Благодарностей
111
Баллы
43
Я все формы делаю в студии, потом уже оттуда перекидываю в зенку, но да это конечно еще то извращение, особенно когда между формами переключатся приходится.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)