前言
什么是DataGridView
DataGridView是windows系统控件名称,其具有极高的可配置性和可扩展性,提供有大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。若要以小型网格显示只读值,或者若要使用户能够编辑具有数百万条记录的表,DataGridView 控件将提供可以方便地进行编程以及有效地利用内存的解决方案。
DataGridView的结构
DataGridView及其相关类被设计为用于显示和编辑表格数据式数据的灵活的、可扩展的体系。这些类都位于system.Windows.Forms命名空间,它们的名称也都有共同前缀"DataGridView"。
结构元素
DataGridViewElement类有两个属性,一是DataGridView,该属性提供了对其所属的DataGridView的引用;二是State,该属性表示当前的状态,其值为DataGridViewElementStates枚举,该枚举支持位运算,这意味着可以设置组合状态。
单元格和组(Cells and Bands)
DataGridView由两种基本的对象组成:单元格(cell)和组(band)。所有的单元格都继承自DataGridViewCell基类。 两种类型的组(或称集合)DataGridViewColumn和DataGridViewRow都继承自DataGridViewBand 基类,表示一组结合在一起的单元格。
DataGridView会与一些类进行互操作,但最常打交道的则是如下三个:DataGridViewCell, DataGridViewColumn,DataGridViewRow。
单元格(DataGridViewCell)
单元格(cell)是操作DataGridView的基本单位。可以通过DataGridViewRow 类的Cells 集合属性访问一行包含的单元格,通过DataGridView的SelectedCells集合属性访问当前选中的单元格,通过DataGridView的CurrentCell属性访问当前的单元格。
列(DataGridViewColumn)
DataGridView所附带的数据(这些数据可以通过绑定或非绑定方式附加到控件)的结构表现为DataGridView的列。你可以使用DataGridView的Columns集合属性访问DataGridView所包含的列,使用SelectedColumns 集合属性访问当前选中的列。
行(DataGridViewRow)
DataGridViewRow类用于显示数据源的一行数据。可以通过DataGridView控件的Rows集合属性来访问其包含的行,通过SelectedRows集合属性访问当前选中的行。
添加行列
/*------ Add Line ------*/
for (int i = 0; i < 6; i++)
{
DataGridView.Columns.Add(new DataGridViewTextBoxColumn());
}
/*------ Add Rows ------*/
for (int i = 0; i < 1; i++)
{
int j = 0;
int index = DataGridView.Rows.Add();
DataGridView.Rows[index].Cells[j++].Value = i;
DataGridView.Rows[index].Cells[j++].Value = 1;
DataGridView.Rows[index].Cells[j++].Value = 2;
DataGridView.Rows[index].Cells[j++].Value = 3;
DataGridView.Rows[index].Cells[j++].Value = 4;
DataGridView.Rows[index].Cells[j++].Value = 5;
}
添加表头
DataGridView.Columns[0].HeaderText = " NAME";
DataGridView.Columns[1].HeaderText = " DATA";
DataGridView.Columns[2].HeaderText = " DATA";
DataGridView.Columns[3].HeaderText = " DATA";
DataGridView.Columns[4].HeaderText = " DATA";
DataGridView.Columns[5].HeaderText = " DATA";
属性设置
// 设置 DataGridView 为只读
DataGridView.ReadOnly = true;
// 设置 DataGridView 的第2列整列单元格为只读
DataGridView.Columns[1].ReadOnly = true;
// 设置 DataGridView 的第3行整行单元格为只读
DataGridView.Rows[2].ReadOnly = true;
// 设置 DataGridView 的[0,0]单元格为只读
DataGridView[0, 0].ReadOnly = true; ```
// 禁止用户手动添加新行
DataGridView.AllowUserToAddRows = false;
注意事项
请谨慎设置WinForm控件DataGridView列的AutoSizeMode属性。
在WinForm控件DataGridView中编辑列时,当该属性值不为None时,比如DataGridView显示的数据达到上万级别时,将导致严重的性能问题。
我在尝试展开上万条数据时,上了个厕所的时间数据都还没加载完成,刚开始还以为是该控件解析高量级的数据较费时,花了很长时间测试后才确认问题出在DataGridView列的AutoSizeMode属性上,因为我在编辑列时将列的AutoSizeMode属性设置为AllCells,每一条单元格在加载时,自动适用大小属性,将适用关闭,1W条数据大概不到一秒就全部展开了。