DataGridView控件小结

在网上查了查很多有关DataGridView的资料,看的晕乎乎的,现在总结一下。

通过DataGridView控件,可以显示和编辑表格式的数据,而这些数据可以取自多种不同类型的数据源。

一. 结构

位于system.Windows.Forms命名空间,它们的名称也都有共同的前缀"DataGridView"。

1. 结构元素(Architecture Elements)

主要的DataGridView相关类继承自DataGridViewElement类。

DataGridViewElement类有两个属性,一是DataGridView,该属性提供了对其所属的DataGridView的引用;二是State,该属性表示当前的状态,其值为DataGridViewElementStates枚举,该枚举支持位运算,这意味着可以设置组合状态。

2. 单元格和组(Cells and Bands)

DataGridView由两种基本的对象组成:单元格(cell)和组(band)。所有的单元格都继承自DataGridViewCell基类。 两种类型的组(或称集合)DataGridViewColumn和DataGridViewRow都继承自DataGridViewBand 基类,表示一组结合在一起的单元格。

DataGridView会与一些类进行互操作,但最常打交道的则是如下三个:DataGridViewCell, DataGridViewColumn,DataGridViewRow

3. DataGridView的单元格 (DataGridViewCell)

单元格(cell)是操作DataGridView的基本单位。Display is centered on cells, and data entry is often performed through cells。可以通过DataGridViewRow 类的Cells 集合属性访问一行包含的单元格,通过DataGridView的SelectedCells集合属性访问当前选中的单元格,通过DataGridView的CurrentCell属性访问当前的单元格。


二.  datagridview可以静态绑定数据源,因此,就可以动态添加相应的行。

1.静态添加

2.动态添加

1)添加新的行,返回新行的索引号,从而根据行号,添加其行的各个单元格内容。

dataGridView1.Columns.Add("column1", "名称");
dataGridView1.Columns.Add("column2", "值");
int index = m_ref_form.dgv.Rows.Add();
dataGridView1.Rows[index].Cells[0].Value = "总价格";
dataGridView1.Rows[index].Cells[1].Value = "100";

2)在新行中的某些单元格添加下拉框、按钮之类的控件
 DataGridViewRow row = new DataGridViewRow();
DataGridViewTextBoxCell textboxcell = new DataGridViewTextBoxCell();
textboxcell.Value = "aaa";
row.Cells.Add(textboxcell);
DataGridViewComboBoxCell comboxcell = new DataGridViewComboBoxCell();
row.Cells.Add(comboxcell);
dataGridView1.Rows.Add(row);
解释:
DataGridViewRow row = new DataGridViewRow();
创建DataGridView的行对象,DataGridViewTextBoxCell是单元格的内容是个TextBox,DataGridViewComboBoxCell是单元格的内容是下拉列表框,同理可知,DataGridViewButtonCell是单元格的内容是个按钮。

textboxcell是新创建的单元格的对象,可以为该对象添加其属性。然后通过row.Cells.Add(textboxcell)为row对象添加textboxcell单元格。要添加其他的单元格,用同样的方法即可。
最后通过dataGridView1.Rows.Add(row)为dataGridView1控件添加新的行row。

DataGridView的编辑控件(Editing Controls)

支持高级编辑功能的单元格一般都使用一个继承自Windows Forms控件的宿主控件,这些控件同时也实现了IDataGridViewEditingControl接口。

DataGridView Editing Control Class diagram

Classes that implement Editing Controls

下表说明了单元格类型、列类型、编辑控件间的关系:

单元格类型

宿主控件

列类型

DataGridViewButtonCell

n/a

DataGridViewButtonColumn

DataGridViewCheckBoxCell

n/a

DataGridViewCheckBoxColumn

DataGridViewComboBoxCell

DataGridViewComboBoxEditingControl

DataGridViewComboBoxColumn

DataGridViewImageCell

n/a

DataGridViewImageColumn

DataGridViewLinkCell

n/a

DataGridViewLinkColumn

DataGridViewTextBoxCell

DataGridViewTextBoxEditingControl

DataGridViewTextBoxColumn

3. 绑定模式(Bound Mode)

如果你在程序中管理一些数据,并希望能与数据源自动进行交互,就应该使用绑定模式。此时你可以设置DataSource属性,将数据源绑定到DataGridView控件。如果控件使用了绑定模式,就不需要你去显式地对数据进行读写了。如果AutoGenerateColumns 属性为true,数据源中的每一列都会在DataGridView中生成一个相应的列(根据列的数据类型),如果你希望创建自己的列,可以将该属性设置为false,使用DataPropertyName属性将一列绑定到数据源的一列,这在你不想用自动生成的列类型时很有用。 

 有效的数据源:

将数据绑定到DataGridView非常简单、直观,很多情况下,你只需要设置它的DataSource属性。如果使用的数据源包含多个列表(list)或数据表(table),你还需要设置控件的DataMember属性,该属性为字符串类型,用于指定要绑定的列表或数据表。

DataGridView控件支持标准的WinForm数据绑定模型,因此它可以绑定到下面列表中的类的实例:

  • 任意实现了IList接口的类,包括一维数组;
  • 任意实现了IListSource接口的类,比如DataTable和DataSet;
  • 任意实现了IBindingList 接口的类,比如BindingList ;
  • 任意实现了IBindingListView接口的类,比如BindingSource 。

 

三.  其他

1. 让DataGridView铺满方框

dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;//行副填充时自动调整宽度 ,从而铺满控件,不会有灰色部分

dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

2. 只读

dataGridView1.ReadOnly = true;

3. 填满窗口,自适应于控件放在的窗口Form中,随着窗口大小变化而变化。

dataGridView1.Width =Form1.Width;
dataGridView1.Height = Form1.Height;
dataGridView1.Top = 0;
dataGridView1.Left= 0;

Form1.Dock=Fill;

4. 清空dataGridView1

dataGridView1.Rows.Clear();只能清除行

而且 注意:用数据源绑定的DataGridView不能用Rows.Clear()清除,手动添加的是能够用clear()的

想要满足保持原有的列,就是重新绑定之前的DataTable,然后清除DataTable中的数据,如下:
DataTable  dt  =  (DataTable)dataGridView1.DataSource;
dt.Rows.Clear();
dataGridView1.DataSource  =  dt;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值