DataGridView 更新数千个单元格速度极慢

问题描述 投票:0回答:1

我有一个

DataGridView
,其中填充了大约 30,000 行。只有两列。

用户只能编辑每行的第一列单元格。当他们完成编辑此单元格时,具有匹配的第一列单元格值的所有其他行都必须更新为新单元格,并且样式必须仅应用于该单元格。

我在 CellValueChanged 事件中这样做:

private void SamplesTable_CellValueChanged(object sender, DataGridViewCellEventArgs e)private void SamplesTable_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    foreach (DataGridViewRow row in SensorsTable.Rows)
    {
        // only change cells whose value matched the old cell's value that caused this event
        if (!row.Cells[0].Value.ToString().Trim().Equals(_oldValue, StringComparison.OrdinalIgnoreCase))
        {
            continue;
        }

        row.Cells[0].Value = newValue;
        row.Cells[0].Style = cellStyle; // cellStyle is just DataGridViewCellStyle() { BackColor = Color.Yellow };
    }
}

当影响数千行时,这大约需要 10 分钟。我尝试在循环之前暂停布局,然后在循环之后恢复布局,但没有注意到差异。

需要注意的一件事是我手动添加列表中的所有行,不涉及绑定。

c# winforms datagridview
1个回答
0
投票

您需要先更改数据,然后触发一次图形更改,而不是更改要影响的每个单元格的样式。

因此,在

SamplesTable_CellValueChanged
中,请确保覆盖
DataSource
SensorsTable
(请参阅此处的示例:https://www.codeproject.com/Questions/192278/Changing-the-datasource-in-a -DataGridView-after-ce)。

© www.soinside.com 2019 - 2024. All rights reserved.