gpt4 book ai didi

c# - 创建虚拟模式以从字符串数组或 C# 中的 List 填充 DataGridView

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:17 24 4
gpt4 key购买 nike

当我用存储在 string[] myData 中的行填充 DataGridView(在 for 循环中)时,系统启动使用过多 RAM,GUI 卡住,有时我会收到 OutOfMemoryException 错误。

我读过虚拟模式 按需填充 DataGridView 并使用较少的 RAM。

但是,我发现的每个示例都使用数据库(或其他一些数据源)。我的值是从文件中读取并存储在数组变量中的字符串值:

string[] myData = obj.GetFileContent(file);

到目前为止我尝试了什么:

dataGridView1.VirtualMode = true;

创建了DataGridViewCellValueEventHandler:

private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) {
//...
}

我的 DataGridView 有 6 列,读取的文件大小约为 1GB。我试图跟随 this thread ,但无法弄清楚如何使用我的 string[] myData 来填充 DataGridView。

编辑:

文件行被读取并作为元素存储在数组中。所以数组中的第一个元素是文件中的第一行,等等。稍后我将使用某种排序 (Regex) 将行的部分排序到列中。

数组元素像这样放置在列中:

for(int i = 0; i < myData.Count(); i++)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[i].Cells[0].Value = (i + 1); //first column
dataGridView1.Rows[i].Cells[5].Value = myData[i]; //sixth column
}

我只想填充可以在 DataGridView 中显示的尽可能多的数据。仅当用户向下(和向上)滚动时,才应填充更多数据。

最佳答案

您没有得到 VirtualMode 的概念:您不必填充 DataGridView 的行和单元格。

DataGridView 初始化时,只需设置行数:DataGridView.RowCount = myData.Length;

然后,执行 CellValueNeeded事件处理程序或您的 DataGridView :

private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
if (e.ColumnIndex == 0)
e.Value = e.RowIndex + 1;
else if (e.ColumnIndex == 5)
e.Value = myData[e.RowIndex];
}

关于c# - 创建虚拟模式以从字符串数组或 C# 中的 List<string> 填充 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34809688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com