Ed *_*ehm 4 .net c# datagridview winforms
我在Winforms应用程序中有一个DataGridView,它有大约1000行(未绑定)和50列.隐藏一列需要整整2秒钟.当我想隐藏大约一半的行时,这就成了问题.
private void ShowRows(string match)
{
this.SuspendLayout();
foreach (DataGridViewRow row in uxMainList.Rows)
{
if (match == row.Cells["thisColumn"].Value.ToString()))
{ row.Visible = false; }
else
{ row.Visible = true; }
}
this.ResumeLayout();
}
Run Code Online (Sandbox Code Playgroud)
我做了一些测试,通过添加Console.WriteLine(DateTime.Now)动作添加,row.Visible = false绝对是慢点.我错过了一些明显的东西,比如设置IsReallySlow = false?或者我是否必须继续启用虚拟模式并编写必要的事件代码?
gal*_*13x 10
在我看来,你应该使用行过滤器.
尝试使用DataView作为绑定源,并使用DataView.RowFilter隐藏行或显示您选择的行.
DataGridView myGridView = new DataGridView();
DataView myDataView = myTable.DefaultView;
myGridView.DataSource = myDataView; // DataView that allows row filtering
myDataView.RowFilter = string.Format("thisColumn <> '{0}'",match); // this will hide all rows where "thisColumn" = match
Run Code Online (Sandbox Code Playgroud)
小智 5
在大多数情况下,属性 DataGridViewAutoSizeColumnMode 会使 DGV 变慢。当您将所有列更改为 DataGridViewAutoSizeColumnMode.None 模式时,您的性能将显着提高。之后您可以按照相同的方式将其重置为之前的状态。
For Each col As DataGridViewColumn In myDGV.Columns
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.None
Next
Run Code Online (Sandbox Code Playgroud)
您将看到隐藏 1000 列中的一些现在只需要 1-2 秒。对于其他属性(SuspendLayout、隐藏整个表单等),我找不到任何效果。
| 归档时间: |
|
| 查看次数: |
8973 次 |
| 最近记录: |