Проблема решена - Опубликовано для справки.
Привет, у меня возникла странная ошибка.У меня есть DataGridView, который я использую для хранения списка записей, эти записи обновляются из источника с помощью BackgroundWorker.Существует столбец CheckBox, который позволяет пользователю выбирать записи из DataGridView для обработки.
Когда я проверяю CheckBox в первом ряду (и только в первом ряду), флажок, кажется, не обновляется правильно и отображается как непроверенный.Флажок все еще обрабатывается как проверенный, и связанная с ним логика работает правильно.Это косметическая проблема, которая может запутать пользователей.любой другой CheckBox в DataGridView всегда рисует правильно.
Щелчок в любом месте DataGridView приводит к корректному перерисовыванию состояния CheckBox.
Кажется, это проблема перерисовки, но у меня возникают проблемы с отслеживанием, почему он рисует так.
Некоторые детали, имеющие отношение к делу.
Мне необходимоперезагрузите набор данных при каждом обновлении.
Я установил цвета подсветки ячеек такими же, как и невыделенные.
У меня есть подпрограмма, которая проверяет состояние Checked CheckBoxes,записывает выбранные записи и перепроверяет флажки при замене набора данных.-Это работает правильно
См. Следующий код.
private void BgwDocketList_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
var checkedRows = from DataGridViewRow r in Dgv_Batch.Rows
where Convert.ToBoolean(r.Cells[0].Value) == true
select r;
List<int> L = new List<int>();
foreach (DataGridViewRow x in checkedRows)
{
L.Add((int)x.Cells[1].Value);
}
Dgv_Batch.DataSource =e.Result;
foreach (DataGridViewRow v in Dgv_Batch.Rows)
{
if (L.Count(x=>x==(int)v.Cells[1].Value)>0)
{
v.Cells[0].Value = true;
}
}
}
Попытка изменить выбранную ячейку программно Я попытался установить фокус на DataGridView в попытке программно воссоздать эффект нажатияна контроле.Это не перерисовывает флажок.кажется, что только щелчок мыши делает это.
... Хорошо ...
Во время написания этой статьи мне удалось решить проблему.Я думаю, это помогает записать шаги, чтобы убедиться, что они извлечены.
Проблема заключалась в том, что после обновления флажков мне нужно было использовать
DataGridView.EndEdit()
Я ожидал, что эта подпрограммаработали над последней записью последней, в отличие от первой.Я предполагаю, что это относится к DataGridView.DataGridViewSelectedRowCollection, содержащему перевернутый индекс.
В любом случае я разместил этот Вопрос в надежде, что он может помочь кому-то с такой же проблемой.