我在数据网格视图中添加了大量行,并且该过程相当慢,因为它似乎在每次添加后都会重新绘制。
我无法在线查找如何创建行(或数组,无论哪个有效)行的示例,并在创建列表后立即添加所有行。我需要这样做,以阻止它在每次添加后重新绘制。
任何人都可以提供一个简短的例子或指向一个好的文档吗?
答案 0 :(得分:1)
以下是一些想法:
1)将列表绑定到DataGridView。设置DataGridView.DataSource = MyList
时,它会立即更新整个网格而不进行所有逐行操作。您可以将项添加到MyList,然后重新绑定到DataGridView。 (我更喜欢使用BindingList来动态更新DataGridView网格。)
2)如果数据绑定不是一个选项,那么我在过去所做的就是在更新之前为每一列设置AutoSizeMode = NotSet
,然后将其设置回以前的状态。 AutoSizeMode
真的会减慢绘图速度。
答案 1 :(得分:1)
您可能正在寻找DataGridView.DataSource属性。见http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.datasource(v=vs.90).aspx
例如:
//Set up the DataGridView either via code behind or the designer
DataGridView dgView = new DataGridView();
//You should turn off auto generation of columns unless you want all columns of
//your bound objects to generate columns in the grid
dgView.AutoGenerateColumns = false;
//Either in the code behind or via the designer you will need to set up the data
//binding for the columns using the DataGridViewColumn.DataPropertyName property.
DataGridViewColumn column = new DataGridViewColumn();
column.DataPropertyName = "PropertyName"; //Where you are binding Foo.PropertyName
dgView.Columns.Add(column);
//You can bind a List<Foo> as well, but if you later add new Foos to the list
//reference they won't be updated in the grid. If you use a binding list, they
//will be.
BindingList<Foo> listOfFoos = Repository.GetFoos();
dgView.DataSource = listOfFoos;
此时要绑定的一个方便的事件是DataGridView.DataBindingComplete,它在数据源绑定后触发。