向 DataGridView 添加行太慢

Xav*_*eña 5 c# datagridview winforms

我有一个DataGridView,我这样填写:

private void FillDataGridView(string stringTable)
{
    var lines = stringTable.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

    var columns = lines.First().Split('\t');
    foreach (var columnName in columns)
        this.dataGridView.Columns.Add(columnName, columnName);

    foreach (var line in lines.Skip(1))
    {
        var cells = line.Split('\t');
        // This operation is too slow when applied to a huge amount of rows:
        this.dataGridView.Rows.Add(cells);                
    }            
}
Run Code Online (Sandbox Code Playgroud)

我的问题是速度Rows.Add(cells)太慢(我有大量数据)。

这是以下内容的示例stringTable

TIME    Temperature
30.03.1992 10:00:00 7.500
30.03.1992 11:00:00 9.300
30.03.1992 12:00:00 10.000
30.03.1992 13:00:00 10.400
30.03.1992 14:00:00 11.400
30.03.1992 15:00:00 11.800
...
Run Code Online (Sandbox Code Playgroud)

我想使用 aBindingList并将其设置为DataSource,这会使速度更快。问题是我不知道先验的列数(在本例中只是“时间,温度”,但也可能是“时间,温度,降雨量,...,其他”)。

jmc*_*ney 6

不要在循环中一次将行添加到网格中。首先在循环中创建所有行,然后通过一次调用将它们全部添加到网格中AddRange

或者,填充一个DataTable或一些其他合适的列表,然后将其绑定到网格。

如果您有如此多的数据,但速度仍然太慢,那么您可能需要考虑虚拟化网格。