Mar*_*mer 2 c# performance datagridview
我用 C# 制作了一个 DataGradView,它允许我折叠和展开行。看起来像这样:

在启动时,我想折叠具有多个条目的所有客户。就像图中所示的那样。customers is < 10.000
如果总数需要customer is > 10.000几分钟才能完成,效果很好。
折叠所有客户的代码:
int number = 0;
int oldnumber = 0;
int parent = 0;
foreach (CustomDataGridViewRow row in dataGridView1.Rows)
{
try
{
number = int.Parse(row.Cells[1].Value.ToString());
if (number != oldnumber && int.Parse(dataGridView1.Rows[row.Index + 1].Cells[1].Value.ToString()) == number)
{
row.Is_expander = true;
parent = row.Index;
}
if (number == oldnumber)
{
row.hide(parent);
}
oldnumber = number;
}
catch { }
}
Run Code Online (Sandbox Code Playgroud)
我调用了必须折叠的 foreach 行row.hide(parent),它将可见性设置为 false 并保存父索引。
对于每个父行将绘制一个图标
您能猜出为什么隐藏所有这些行需要这么长时间吗?也许在每个隐藏行屏幕再次绘制之后?也许我在循环中做了不必要的或高性能的事情?我不知道
我猜,在 datagridview 上隐藏和显示行非常慢,原因只有微软知道。然而,将行复制到数组、在数组中操作它们并将它们复制回网格的速度非常快。这是一些代码:
DataGridViewRow[] theRows = new DataGridViewRow[Adgv.Rows.Count];
Adgv.Rows.CopyTo(theRows, 0);
Adgv.Rows.Clear();
for (int loop = 0; loop < theRows.Length; loop++) theRows[loop].Visible = false;
Adgv.Rows.AddRange(theRows);
Run Code Online (Sandbox Code Playgroud)
对于 35000 行,此操作只需不到一秒即可完成。在我的代码中,我通常有一个表达式来定义该行是隐藏还是显示,并且它与该表达式一起在不到一秒的时间内执行。如果我尝试在不复制的情况下执行该操作,则需要几分钟的时间。去搞清楚!
| 归档时间: |
|
| 查看次数: |
6264 次 |
| 最近记录: |