快速隐藏datagridview winforms中的行的方法

时间:2018-05-08 08:50:42

标签: c# winforms

我正在尝试创建一个窗口表单应用程序,我需要在其中隐藏并频繁显示datagridView的行。目前并使用循环

for (int i=0;i<grid.Rows.Count;i++){
    grid.Rows[i].Visible = false;
}

但这会让我的UI太慢,有没有更快的方法来做到这一点? 提前谢谢。

3 个答案:

答案 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-