c# - 向 DataGridView 添加行太慢

标签 c# winforms datagridview

我有一个 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);                
    }            
}

我的问题是 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
...

我想使用 BindingList 并将其设置为 DataSource,这样会更快。问题是我不知道先验的列数(在这个例子中只是“TIME,Temperature”,但它可能是“TIME,Temperature,Rainfall,...,Other”)。

最佳答案

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

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

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

关于c# - 向 DataGridView 添加行太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36770703/

相关文章:

c# - 如何从 C#/WPF 中的嵌套属性获取通知?

c# - 简单的 Windows 窗体数据绑定(bind)

c# - 根据两个数据表中的差异更改 datagridview 中的颜色?

c# - 为模型类c#创建元数据类和分部类有什么用

c# - 按钮 PlayerPrefs

c# - mongoDB 重命名嵌入字段

.net - 为 .NET 的 MaskedTextBox 隐藏 PromptChar

c# - 将 WCF 服务添加到现有应用程序?

c# - 从 DataGridView 单元格中删除填充/边距

c# - 更改显示在DataGridView中的字段的名称?