我正在尝试创建一个窗口表单应用程序,我需要在其中隐藏并频繁显示datagridView的行。目前并使用循环
for (int i=0;i<grid.Rows.Count;i++){
grid.Rows[i].Visible = false;
}
但这会让我的UI太慢,有没有更快的方法来做到这一点? 提前谢谢。
答案 0 :(得分:3)
您可以在将所有行存储到列表中后将其删除,并根据需要将其添加回来:
List<DataGridViewRow> rows = null;
// prepare list
rows = new List<DataGridViewRow>();
// copy rows to list
rows.AddRange(dataGridView1.Rows.Cast<DataGridViewRow>());
// remove them all
dataGridView1.Rows.Clear();
// add them back:
dataGridView1.Rows.AddRange(rows.ToArray());
// clean up
rows.Clear();
答案 1 :(得分:1)
如果您使用DataSource作为输入,您可以做的是:
正常运作:
grid.DataSource = yourList;
如果您想要隐藏某些元素:
grid.DataSource = yourList.Where(x => x.SomeBool).ToArray();
注意:
有时数据源没有像这样完全更新,因此您可以尝试先将其设置为null,从而产生:
grid.DataSource = null;
grid.DataSource = yourList.Where(x => x.SomeBool).ToArray();
答案 2 :(得分:0)
VB.net而不是C#:
打开DoubleBuffering将改善您的性能:
dgvMain.[GetType].GetProperty("DoubleBuffered", BindingFlags.Instance Or BindingFlags.NonPublic).SetValue(dgvMain, True, Nothing)
dgvMain.SuspendLayout()
和dgvMain.ResumeLayout()
也可能有帮助。
通过运行行隐藏功能之前隐藏所有DataGridView列(和DataGridView Row 标头),然后使列/标头在以后再次可见,我发现了性能的进一步提高。
-OO-