Снятие отметки / проверка 500+ DataGridViewRows с CheckBoxes быстрее - PullRequest
0 голосов
/ 25 июня 2018

В настоящее время у меня есть проблема с установкой и снятием флажков для множества флажков в представлении данных. Я уже запускаю их параллельно, но это все еще очень медленно, даже загрузка строк быстрее ...

РЕДАКТИРОВАТЬ: проблема исправлена. AutoSizeColumnsMode и AutoSizeRowsMode вызвали его замедление!

if (checkBox_all.Checked)
{
    Parallel.ForEach(dataGrid_searchEntryList.Rows.Cast<DataGridViewRow>(), row =>
    {
        row.Cells[0].Value = true;
    });
}
else
{
    Parallel.ForEach(dataGrid_searchEntryList.Rows.Cast<DataGridViewRow>(), row =>
    {
        row.Cells[0].Value = false;
    });
}

Любая помощь очень ценится!

Изображение вида сетки

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Проблема исправлена. AutoSizeColumnsMode и AutoSizeRowsMode замедлили это!

0 голосов
/ 25 июня 2018

Во-первых, вы не можете получить доступ к элементам управления WinForms вне потока GUI. Так что вам нужно исключить Parallel звонки.

Как ни странно, DataGridView не имеет BeginUpdate/EndUpdate. Но вы можете приостановить рисунок:

dataGrid_searchEntryList.SuspendDrawing();
//Update multiple cells here
dataGrid_searchEntryList.ResumeDrawing();

Это, по крайней мере, устраняет чрезмерное рисование.

Стоит отметить, что если это связано с данными, есть гораздо лучший способ сделать это. Но я предполагаю, что это не так, как вы получаете доступ к данным через DataGridView.

Наконец, ваш код может быть упрощен до следующего:

foreach(var row in dataGrid_searchEntryList.Rows.Cast<DataGridViewRow>())
{
    row.Cells[0].Value = checkBox_all.Checked;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...