У меня есть простой DataGridView, который использует таблицу Orders (OrderID, CustomerID, ShipName) из базы данных northwind . После начальной загрузки я добавляю новый столбец в каждую строку с флажок на нем. Теперь мой интерфейс выглядит как это .
Код для добавления дополнительного столбца с флажком.
DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
checkColumn.Name = "Delete";
checkColumn.HeaderText = "Delete";
checkColumn.Width = 50;
checkColumn.ReadOnly = false;
dataGridView1.Columns.Add(checkColumn);
Кроме того, у меня есть кнопка удаления, которая при нажатии должна удалять все строки с установленным флажком.
for (int i = dataGridView1.Rows.Count-1; i >=0 ; i--)
{
DataGridViewRow row = dataGridView1.Rows[i];
bool isChecked = dataGridView1[3, i].Value != null && (bool)dataGridView1[3, i].Value != false;
if (isChecked)
{
dataGridView1.Rows.RemoveAt(i);
}
}
Однако каждый раз, когда я нажимаю на некоторые флажки, а затем на кнопку «Удалить», последний нажатый всегда не удаляется.
После некоторой отладки я обнаружил, что если я нажимаю на некоторые флажки, затем нажимаю в любом месте пользовательского интерфейса, а затем на кнопку удаления, он работает как задумано.
Итак, это известная ошибка? Я делаю что-то не так?
UPDATE
Добавлен счетчик в метод удаления, чтобы я мог подсчитать, сколько флажков помечено и перейти к другому тесту:
1: Я нажал на первые два флажка, а затем на кнопку Удалить. Первая строка была удалена, счетчик был 1.
2: Я нажал на первые два флажка и затем снаружи в пустом месте пользовательского интерфейса, а затем на кнопку delete. Оба отмеченных ряда были удалены. Счетчик был 2.
Итак, проблема в том, что визуально флажки отмечены галочкой, но в коде последний - нет, если я не изменил фокус.