在Windows中绑定是将操作界面和数据源的数据保持一致,即实现操作界面的增删改查与数据库的增删改查一致,这里所说的数据源指数据集或数据表,而窗体可以是Windows窗体或Web窗体,在这里,我们研究关于Windows窗体的数据绑定,一般分为两种类型:简单绑定和复杂绑定。简单绑定是指将一个控件的某个属性绑定到某个数据元素(如数据集表中列的值)的能力,这是用于TextBox或Label等控件的典型绑定类型。复杂绑定指将一个控件绑定到多个数据元素的能力,通常绑定到数据库的多条记录,如DataGridView就可以绑定到一个DataTable,一次显示多条记录和多个字段的值。
重点:
Ø 掌握 DataGridView 控件的使用
Ø DataGridView常用属性和方法
Ø 简单绑定
Ø 利用绑定控件从数据源读取数据
预习功课:
Ø 如何使用DataGridView
Ø DataGridView常用属性和方法
Ø 简单绑定
5.1 DataGridView控件
在项目开发中,怎么样将数据库的中数据显示到界面上呢?在.Net中提供了DataGridView控件使我们可以显示表格数据,DataGridView控件除了可以直接显示数据表数据外,还支持排序、数据绑定以及创建自己的单元格类型、自定义控件外观等高级功能。
DataGridView控件里面的数据通常是使用绑定的方式提供的,比如你可以把DataGridView控件绑定到数据集中的数据表,那么DataGridView控件就会自动显示这个数据表中的数据,如上图,我们就是这样操作的。另外,DataGridView控件的绑定功能是非常强大的,它不仅可以绑定数据表,还可以绑定数据集、数据视图、集合、数组等。
5.1.1 DataGridView的属性和方法
DataGridView控件常用的重要属性和事件
属性 |
说明 |
Columns |
包含的列的集合 |
DataSource |
DataGridView 的数据源 |
ReadOnly |
是否可以编辑单元格 |
DataPropertyName |
绑定的数据列的名称 |
HeaderText |
列标题文本 |
Visible |
指定列是否可见 |
Frozen |
指定水平滚动DataGridView时列是否移动 |
ReadOnly |
指定单元格是否为只读 |
ColumnCount |
DataGridView中显示的列数 |
RowCount |
DataGridView中显示的行数 |
Rows |
所有控件的行 |
CurrentCell |
当前单元格 |
CurrentRow |
当前单元格的行 |
SelectedRows |
用户选定的行 |
DataMember |
数据源绑定的数据集,这里是数据表的名称 |
DefaultCellStyle |
单元格的默认外观样式 |
事件 |
说明 |
CurrentCellChanged |
单击单元格时发生 |
CellContentClick |
单击某个单元格时发生 |
从窗体设计工具箱窗口的“数据”卡片中拖一个DataGridView控件进窗体设计区域即可创建一个DataGrid控件对象。然后可以在DataGridView控件属性窗口设置控件相关的属性,除了上面表格提到的属性外,在DataGridView控件的属性窗口中我们还可以看到很多其他常用的属性,比如:
l Dock属性:可以设置控件填充父容器的方式
l ReadOnly属性:设置控件是否可编辑,设置false后,控件将不可编辑
l RowHeaderVisible属性:列标题是否显示,默认情况下显示列标题
l MultiSelect属性:是否允许选择多行
5.1.2 将DataGridView绑定到数据集
将DataGridView属性绑定到数据源,通过设置其DataSource属性,可将DataGridView控件直接绑定到数据源,数据源可以是数组、集合或数据集。通过DataSource属性将DataGridView控件绑定到数据集通常有三种形式:
一. 直接绑定数据表 dataGridView1.DataSource=ds.Tables[0]; 二. 绑定数据表的数据视图 dataGridView.DataSource=ds.Tables[0].DefaultView; 三. 绑定到数据集 dataGridView.DataSource=ds; dataGridView.DataMember=ds.Tables[0].TableName;
在第三种方式中,我们知道DataGridView控件每次只能显示一个数据表,所以你一旦绑定了一个数据集,那么你必须使用DataMember属性指定DataGridView控件显示到底是数据集里面的哪个表,因此要给DataMember属性设置一个数据集中数据表的名称。
5.1.3 定制DataGridView控件
DataGridView控件默认情况下允许进行编辑、支持自动排序、支持选择模式、调整列间距等操作,用户可以在列标题上单击该列进行排序,排序时会根据列的不同类型进行排序,如果该列是数字那么就按大小排序,如果是字符那么就按字符顺序排序。用户可以自己设置单选、多行选择等选择模式,以便方便地选中列表中的数据。用户还可以在标题之间的列分隔符上双击,使左边的列自动按照单元格的内容展开或收缩。
下面是DataGridView控件的组成图(图15.9),我们将依据这幅组成图来详细讨论DataGridView单元格值的获取以及单元格、行、列等外观的设置。
DataGridViewColumn
DataGridView控件的构成类似于表格的构成,简单地讲分成行和列。DataGridView控件每一行都是一个DataGridViewRow对象,每一行中按照列划分为很多单元格,每一个单元格就是一个DataGridViewCell对象。除了行和列外,DataGridView控件还有列标题和行标题,列标题和行标题没有对应的类,但DataGridView控件中有很多属性可以设置这两个组成部分的外观。
你可以像获取数据表数据那样获取DataGridView控件中任意一个单元格的数据,因为DataGridView控件中表示行的集合也是Rows,在每一行对象(DataGridViewRow对象)中又有一个Cell属性可以获取该行的某一列。可以使用如下代码遍历DataGridView控件中的全部数据:
foreach(DataGridViewRow r in this.dataGridView.Rows) { //打印每一个单元格值 for(int i=0;i<r.Cells.Count;i++) { Console.WriteLine(r.Cells[i].Value); } }
要想获得你选中的某一行或某一列单元格的值,就需要用到前面提到的CurrentRow和CurrentCell两个属性,分别返回选中的行对象和返回选中的单元格对象。通过这两个属性可以找到需要的单元格的值。例如:
privatev oid dataGridView_CurrentCellChanged(object sender,EventArgs e) { //获取当前选中单元格的列标 intN=this.dataGridView.CurrentCellAddress.X; //获取当前行列标为N的那个单元格的值 stringval=this.dataGridView.CurrentRow.Cells[N].Value.ToString(); //直接使用CurrentCell来获得选中单元格的值 //stringval=this.dataGridView.CurrentCell.Value.ToString(); } DataGridView控件提供了CurrentCellAddress属性来获得选中单元格的列表和行标,如下代码修改DataGridView中选中的单元格中对应表中项的值: private void dataGridView_CellContentClick(object sender,DataGridViewCellEventArgs e) { //获得绑定的数据表 DataTabledt=(DataTable)this.dataGridView.DataSource; int x=dataGridView.CurrentCellAddress.X; //获得行标 int y=dataGridView.CurrentCellAddress.Y; //获得列标 //显示当前单元格的值 MessageBox.Show(this.dataGridView.Rows[x].Cells[y].Value.ToString());// //修改此单元格对应的数据表中项的值 dt.Rows[x][y]=”修改值”; //更新到数据库 adapter.Update(dt); dt.AcceptChanges(); }
DataGridView除了提供灵活的数据访问和编辑功能外,还提供强大的外观设置功能,设置DataGridView控件的外观也是按照上图提示的DataGridView控件的组成而来的。算起来我们总共可以从五个方面设置DataGridView的外观,分别是行外观、列外观、行标题外观、列标题外观和总外观。下面分别从如下五个方面进行讨论:
n 总外观设置
BackgroundColor:设置其背景颜色
BorderStyle:设置边框样式
CellBorderStyle:设置其单元格边框样式
DefaultCellStyle:设置单元格具体样式(字体颜色、字体种类、对齐方式和数据格式等)
GridColor:设置网格线颜色
n 列标题外观
ColumnHeadersBorderStyle:设置列标题的边框样式
ColumnHeadersDefaultCellStyle:设置列标题样式
ColumnHeadersHeight:设置列标题的高度
ColumnHeadersVisible:设置列标题是否显示
n 行标题外观
RowHeadersBorderStyle:设置行标题的边框样式
RowHeadersDefaultCellStyle:设置默认行标题样式
RowHeadersWidth:设置行标题列的宽度
RowHeadersVisible:设置行标题是否显示
n 行外观
RowTemplate:设置一个行模板,从而达到设置行外观的目的
RowsDefaultCellStyle:设置该行的字体颜色、字体种类、对其方式和数据格式等
n 列外观
DataGridView控件的列外观在其Columns属性设置。在Columns属性里面你可以对每一列进行外观的设置。每一列都含有Width、ColumnType、DefaultCellStyle等属性。其中每一列的Width属性可以设置列宽。
DefaultCellStyle:设置该列单元格的属性(字体颜色、字体种类、对齐方式和数据格式等)
ColumnType:设置单元格的类型,包含六种类型:DataGridViewButtonColumn、DataGridViewCheckBoxColumn、DataGridViewComboBoxColumn、DataGridViewImageColumn、DataGridViewTextBoxColumn、DataGridViewLinkColumn