1、 数据绑定概述数据绑定概述10.1数据绑定的实现方法数据绑定的实现方法10.2记记 录录 导导 航航10.3 对于各种类型的数据库应用系统,通对于各种类型的数据库应用系统,通过过Windows界面或界面或Web网页浏览数据源中网页浏览数据源中的数据时,一般先将后台数据表中的数据的数据时,一般先将后台数据表中的数据填充到内存的数据集中,然后展现在填充到内存的数据集中,然后展现在Windows界面或者界面或者Web网页中。网页中。本章主要学习本章主要学习ADO.NET的数据绑定技的数据绑定技术和记录导航。术和记录导航。【知知 识识 技技 能能 目目 标标】(1)掌握数据绑定的方式、对象与清除)掌握
2、数据绑定的方式、对象与清除方法。方法。(2)掌握使用属性窗口实现数据绑定的)掌握使用属性窗口实现数据绑定的方法。方法。(3)掌握编写程序代码实现数据绑定的)掌握编写程序代码实现数据绑定的方法。方法。(4)掌握)掌握ADO.NET中记录导航的方法。中记录导航的方法。(5)了解数据绑定与记录导航涉及的类。)了解数据绑定与记录导航涉及的类。【本本 章章 学学 习习 导导 航航】本章主要探讨数据绑定和记录导航两本章主要探讨数据绑定和记录导航两个问题,这两个问题都会涉及到几个相同个问题,这两个问题都会涉及到几个相同的类,的类,ADO.NET访问数据库时记录位置的访问数据库时记录位置的移动机制与移动机制与
3、ADO不同,主要通过几个对象不同,主要通过几个对象进行控制。进行控制。10.1.1数据绑定的方式数据绑定的方式 窗体控件的数据绑定一般可以分为两窗体控件的数据绑定一般可以分为两种方式:单一绑定和复合绑定。种方式:单一绑定和复合绑定。1单一绑定单一绑定 所谓所谓“单一绑定单一绑定”是指将单一的数据是指将单一的数据元素绑定到控件的某个属性。例如,将元素绑定到控件的某个属性。例如,将TextBox控件的控件的Text属性与属性与“学生信息学生信息”数数据表中的据表中的“姓名姓名”字段进行绑定。字段进行绑定。单一绑定是利用控件的单一绑定是利用控件的DataBindings集合属性实现的,其一般形式如下
4、。集合属性实现的,其一般形式如下。控件名称控件名称.DataBindings.Add(控件的控件的属性名称属性名称,数据源数据源,数据成员数据成员)括号中的三个参数说明如下。括号中的三个参数说明如下。(1)控件的属性名称)控件的属性名称 该参数为字符串形式,指定绑定到控该参数为字符串形式,指定绑定到控件的哪一个属性。件的哪一个属性。DataBindings的集合属的集合属性允许让控件的多个属性与数据源进行绑性允许让控件的多个属性与数据源进行绑定,经常使用的绑定属性如表定,经常使用的绑定属性如表10-1所示。所示。图图10-110-1单一绑定的错误提示信息单一绑定的错误提示信息(2)数据源)数据
5、源 该参数为变量形式,可以是该参数为变量形式,可以是DataSet、DataTable、DataView或者数组等多种形或者数组等多种形式。式。(3)数据成员)数据成员 该参数为字符串形式,是数据源的子该参数为字符串形式,是数据源的子集合。如果数据源是集合。如果数据源是DataSet,那么数据成,那么数据成员就是员就是“DataTable.字段名称字段名称”;如果数;如果数据源是据源是DataTable,那么数据成员就是,那么数据成员就是“字字段名称段名称”。2复合绑定复合绑定 所谓所谓“复合绑定复合绑定”是指控件和一个以是指控件和一个以上的数据元素进行绑定,通常是指把控件上的数据元素进行绑定
6、,通常是指把控件和数据集中的多条数据记录或者多个字段和数据集中的多条数据记录或者多个字段值、数组中的多个数组元素进行绑定。值、数组中的多个数组元素进行绑定。DataGrid、ComboBox、ListBox和和CheckedListBox等控件都支持复合数据绑等控件都支持复合数据绑定,例如,将定,例如,将DataGrid控件与数据集控件与数据集DataSet绑定,以便同时显示数据表中的所绑定,以便同时显示数据表中的所有数据记录。有数据记录。10.1.2数据绑定的对象数据绑定的对象 ADO.NET提供了许多能够被绑定的数提供了许多能够被绑定的数据对象,既包括一般的数据集及其成员对据对象,既包括一
7、般的数据集及其成员对象,也包括数组或集合,以及窗体或其他象,也包括数组或集合,以及窗体或其他控件的属性。控件的属性。(1)DataSet 可以使用单一绑定或者复合绑定来绑可以使用单一绑定或者复合绑定来绑定定DataSet内的数据。内的数据。(2)DataTable 可以使用单一绑定或复合绑定来绑定可以使用单一绑定或复合绑定来绑定DataTable内的数据。内的数据。(3)DataView 可以使用单一绑定或复合绑定来绑定可以使用单一绑定或复合绑定来绑定DataView内的数据。内的数据。(4)DataColumn DataColumn对象是对象是DataTable对象的对象的基本组成元素,可以
8、使用单一绑定或复合基本组成元素,可以使用单一绑定或复合绑定来绑定数据表中的某个字段的数据。绑定来绑定数据表中的某个字段的数据。(5)数组或集合)数组或集合 数组或集合也可以作为数据绑定的对数组或集合也可以作为数据绑定的对象。象。(6)窗体或控件属性)窗体或控件属性 Windows窗体中控件的绑定对象也可窗体中控件的绑定对象也可以是窗体或控件的属性。以是窗体或控件的属性。10.1.3数据绑定的清除数据绑定的清除 程序运行时,对于单一绑定,同一个程序运行时,对于单一绑定,同一个控件属性不能重复进行绑定,否则会出现控件属性不能重复进行绑定,否则会出现如图如图10-1所示的绑定错误。所示的绑定错误。正
9、确的方法是:先清除现有的绑定,正确的方法是:先清除现有的绑定,然后再重新与数据源进行绑定。然后再重新与数据源进行绑定。清除数据绑定的实例代码如下所示。清除数据绑定的实例代码如下所示。清除窗体中所有控件的绑定的实例代清除窗体中所有控件的绑定的实例代码如下所示。码如下所示。ADO.NET的数据绑定的实现方法主要的数据绑定的实现方法主要有两种:第一种方法是在设计阶段使用属有两种:第一种方法是在设计阶段使用属性窗口设置属性值实现数据绑定;第二种性窗口设置属性值实现数据绑定;第二种方法是在设计阶段编写程序代码实现数据方法是在设计阶段编写程序代码实现数据绑定。绑定。10.2.1使用属性窗口实现数使用属性窗
10、口实现数据绑定据绑定 在设计阶段事先建立数据集的实例对在设计阶段事先建立数据集的实例对象,并把数据填入该数据集中,然后利用象,并把数据填入该数据集中,然后利用Visual Studio.NET集成开发环境的属性窗集成开发环境的属性窗口进行数据绑定。口进行数据绑定。【实例实例10-1】1设计任务设计任务 设计一个窗体,该窗体利用属性窗口设计一个窗体,该窗体利用属性窗口实现数据绑定。其运行效果如图实现数据绑定。其运行效果如图10-2所示。所示。图图10-210-2使用属性窗口绑定数据的运行效果使用属性窗口绑定数据的运行效果 2设计过程设计过程(1)新建一个项目)新建一个项目Chapter10_1。
11、(2)在窗体中添加)在窗体中添加4个个Button控件、控件、4个个Label控件、控件、1个个TextBox控件、控件、3个个ComboBox控件和控件和1个个DataGrid控控件,窗体及控件的设计外观如图件,窗体及控件的设计外观如图10-3所示。所示。图图10-310-3数据绑定窗体的设计状态数据绑定窗体的设计状态 利用利用“工具箱工具箱”中的中的“数据数据”控件创控件创建建SqlConnection对象和对象和SqlDataAdapter对对象,分别更改名称为象,分别更改名称为“conn”和和“SqlDa”。生成数据集,且将数据集名。生成数据集,且将数据集名称更改为称更改为“SqlDs
12、1”。(3)利用属性窗口设置数据绑定。)利用属性窗口设置数据绑定。先选中窗体中的先选中窗体中的ComboBox1控件,然控件,然后在后在“属性属性”窗口展开窗口展开DataBindings节点,节点,单击单击Text属性设置框右侧的向下箭头按钮,属性设置框右侧的向下箭头按钮,将下拉列表框中的将下拉列表框中的SqlDs1逐级展开,接着逐级展开,接着单击选择单击选择“学生信息学生信息”数据表中的第一个数据表中的第一个字段字段“学号学号”,如图,如图10-4所示。所示。图图10-410-4在属性窗口中设置单一绑定在属性窗口中设置单一绑定 这样这样ComboBox1控件的控件的Text属性和属性和“S
13、qlDs1”数据集中的数据集中的“学生信息学生信息”数据数据表中的表中的“学号学号”字段相绑定。字段相绑定。窗体中的窗体中的TextBox控件与数据表控件与数据表SqlDs1中的数据表中的中的数据表中的“学生信息学生信息”的字段的字段“姓姓名名”进行绑定的方法与上述相同。进行绑定的方法与上述相同。选中窗体中的选中窗体中的ComboBox3控件,在属控件,在属性窗口中设置性窗口中设置DataSource属性的值为属性的值为“SqlDs1.学生信息学生信息”,设置,设置DisplayMember属性的值为属性的值为“班级编号班级编号”,如图如图10-5所示。所示。图图10-510-5在属性窗口设置
14、复合绑定在属性窗口设置复合绑定 (4)切换到代码窗口,编写程序代)切换到代码窗口,编写程序代码,实现其功能。码,实现其功能。窗体窗体Load事件过程的程序代码如代码事件过程的程序代码如代码10-2-1所示。所示。ComboBox1控件的控件的SelectedIndexChanged事件过程的程序代事件过程的程序代码如代码码如代码10-2-2所示。所示。3代码分析代码分析 代码分析如表代码分析如表10-4所示。所示。代码序号代码序号行行 号号代代 码码 分分 析析代码代码10-2-210-2-20101行行当当ComboBox1ComboBox1控件中的选取项发生控件中的选取项发生改变时,窗体中
15、的其他控件所显示改变时,窗体中的其他控件所显示的记录数据也同步发生改变的记录数据也同步发生改变0202行行取消取消DataGrid1DataGrid1控件中原先选中行控件中原先选中行的选中状态的选中状态0303行行重新设置重新设置DataGrid1DataGrid1控件选定行的控件选定行的索引索引0404行行重新选择新行重新选择新行表表10-410-4程序代码分析程序代码分析 4知识要点说明知识要点说明 在设计阶段利用属性窗口进行数据绑在设计阶段利用属性窗口进行数据绑定,必须先建立数据集对象,否则无法完定,必须先建立数据集对象,否则无法完成属性设置。如果在设计时已经绑定了某成属性设置。如果在设
16、计时已经绑定了某个控件,则在程序代码中不可以对该属性个控件,则在程序代码中不可以对该属性再进行绑定,否则会出错。再进行绑定,否则会出错。10.2.2编写程序代码实现数编写程序代码实现数据绑定据绑定 【实例实例10-2】1设计任务设计任务 设计一个窗体,该窗体使用编写程序设计一个窗体,该窗体使用编写程序代码的方法实现数据绑定,窗体的运行效代码的方法实现数据绑定,窗体的运行效果如图果如图10-6所示。所示。ComboBox3控件显示的控件显示的是是“班级名称班级名称”列表项,而不是列表项,而不是“班级编班级编号号”,其他的显示内容与实例,其他的显示内容与实例10-1相同。相同。图图10-610-6
17、编写程序代码实现数据绑定编写程序代码实现数据绑定 2设计过程设计过程(1)新建一个项目)新建一个项目Chapter10_2。(2)窗体及控件的设计外观如图)窗体及控件的设计外观如图10-3所示,只是将所示,只是将“班级编号班级编号”标签的标签的Text属性值修改为属性值修改为“班级名称班级名称”。(3)切换到代码窗口,编写程序代)切换到代码窗口,编写程序代码,实现其功能。码,实现其功能。窗体级对象变量的定义如代码窗体级对象变量的定义如代码10-2-3所示。所示。窗体窗体Load事件过程的程序代码如代码事件过程的程序代码如代码10-2-4所示。所示。ComboBox1控件的控件的Selected
18、IndexChanged事件过程的程序代事件过程的程序代码如代码码如代码10-2-5所示。所示。3代码分析代码分析 代码分析如表代码分析如表10-5所示。所示。代代 码码 序序 号号行行 号号代代 码码 分分 析析代码代码10-2-410-2-40404行和行和0505行行重新设置提取数据源记录的重新设置提取数据源记录的SelectSelect语句语句0909行和行和1010行行设置设置ComboBox1ComboBox1控件的数据源以及绑定的字段控件的数据源以及绑定的字段1313行行将将TextBox1TextBox1控件的控件的TextText属性与数据集属性与数据集SqlDsSqlDs中
19、的中的“学生信息学生信息”表表的的“姓名姓名”字段进行绑定字段进行绑定1515行和行和1616行行先建立一个字符串数组,然后将先建立一个字符串数组,然后将ComboBox2ComboBox2控件的控件的DataSourceDataSource属性设置为该数组,让数组所包含的元素成为该控件的选项属性设置为该数组,让数组所包含的元素成为该控件的选项1919行至行至2121行行设置设置ComboBox3ComboBox3的数据源对象,同时将的数据源对象,同时将DisplayMemberDisplayMember属性和属性和ValueMemberValueMember属性设置为数据源中的不同字段属性设
20、置为数据源中的不同字段2222行行将将SelectedValueSelectedValue属性与所要写入的字段属性与所要写入的字段“班级编号班级编号”进行绑定进行绑定2424行行将将DataGrid1DataGrid1控件和数据集控件和数据集SqlDsSqlDs中的中的“学生信息学生信息”数据表绑定数据表绑定2525行行设置设置DataGrid1DataGrid1控件的标题文本控件的标题文本表表10-510-5程序代码分析程序代码分析 【实例实例10-310-3】1设计任务设计任务 设计一个窗体,该窗体具有记录导航设计一个窗体,该窗体具有记录导航功能,窗体的运行效果如图功能,窗体的运行效果如图
21、10-710-7所示。该所示。该窗体通过改变记录位置浏览不同的记录数窗体通过改变记录位置浏览不同的记录数据。据。图图10-710-7记录导航窗体的运行结果记录导航窗体的运行结果 单击单击【首记录首记录】按钮按钮 ,显示数据,显示数据表中的第一条记录;单击表中的第一条记录;单击【上一条上一条】按按钮钮 ,显示数据表中的上一条记录;单,显示数据表中的上一条记录;单击击【下一条下一条】按钮按钮 ,显示下一条记录;,显示下一条记录;单击单击【尾记录尾记录】按钮按钮 ,显示最后一条,显示最后一条记录。记录。该窗体还能显示目前位于第几条记录该窗体还能显示目前位于第几条记录以及总共有多少条记录。以及总共有多
22、少条记录。2设计过程设计过程(1)新建一个项目)新建一个项目Chapter10_3。(2)在窗体中添加)在窗体中添加5个个TextBox控件、控件、4个个Button控件和控件和4个个Label控件,窗控件,窗体及控件的设计外观如图体及控件的设计外观如图10-8所示。所示。(3)切换到代码窗口,编写程序代)切换到代码窗口,编写程序代码,实现其功能。码,实现其功能。图图10-810-8记录导航窗体的设计状态记录导航窗体的设计状态 3代码分析代码分析 代码分析如表代码分析如表10-6所示。所示。代码序号代码序号行行 号号代代 码码 分分 析析代码代码10-3-110-3-10707行至行至1010
23、行行将将TextBoxTextBox控件和数据集中表的各个字段进行控件和数据集中表的各个字段进行绑定绑定1212行行为前面声明的为前面声明的BindingManagerBaseBindingManagerBase类的变量类的变量bmDatabmData赋值,使用该变量代表赋值,使用该变量代表“学生信息学生信息”表表的的CurrencyManagerCurrencyManager对象,在其后需要使用代对象,在其后需要使用代表表“学生信息学生信息”表的表的CurrencyManagerCurrencyManager对象时,对象时,就可以直接使用就可以直接使用bmDatabmData变量而不需要使用
24、变量而不需要使用BindingContextBindingContext类来获取,使得程序代码容类来获取,使得程序代码容易维护,也可以缩短程序代码的长度易维护,也可以缩短程序代码的长度1414行行设定当触发设定当触发PositionChangedPositionChanged事件时便执行事事件时便执行事件处理程序件处理程序PositionChangedPositionChanged1616行和行和1717行行设定数据记录当前位置的初始值设定数据记录当前位置的初始值表表10-610-6程序代码分析程序代码分析代码代码10-3-210-3-20303行和行和0404行行利用利用CurrencyMa
25、nagerCurrencyManager对象的对象的PositionPosition属性更新记录当前位置的属性更新记录当前位置的信息,利用信息,利用CurrencyManagerCurrencyManager对象对象的的CountCount属性取得数据源中的记录属性取得数据源中的记录的总数的总数代码代码10-3-310-3-30303行行将将CurrencyManagerCurrencyManager对象的对象的PositionPosition属性值设置为属性值设置为0 0,以便移,以便移到第一条记录到第一条记录代码代码10-3-410-3-40404行行把把CurrencyManagerCu
26、rrencyManager对象的对象的PositionPosition属性属性值减值减1 1移到上一条记录。移到上一条记录。ifif语句用于检查语句用于检查是否已移动到第一条记录之前,由于是否已移动到第一条记录之前,由于PositionPosition属性值是从属性值是从0 0开始计算,只有当开始计算,只有当PositionPosition属性值大于属性值大于0 0时才能递减时才能递减代码代码10-3-510-3-50404行行把把CurrencyManagerCurrencyManager对象的对象的PositionPosition属性属性值加值加1 1移到下一条记录。移到下一条记录。ifi
27、f语句用于检查语句用于检查是否已移到最后一条记录之后,只有当是否已移到最后一条记录之后,只有当PositionPosition属性值小于属性值小于CountCount属性值减属性值减1 1才才能递增能递增代码代码10-3-610-3-60303行行把把CurrencyManagerCurrencyManager对象的对象的PositionPosition属性属性值设置为值设置为CountCount属性值减属性值减1 1移动到最后一移动到最后一条数据记录条数据记录【课堂实践课堂实践】打开光盘中文件夹打开光盘中文件夹【ClassroomPractise10_1】中的解决方案中的解决方案文件文件【C
28、lassroomPractise10_ 1.sln】,打,打开该解决方案中的窗体开该解决方案中的窗体【frmUsers.vb】,切换到代码窗体,在窗体的切换到代码窗体,在窗体的Load事件过程事件过程中补写程序代码实现数据绑定,包括设置中补写程序代码实现数据绑定,包括设置DataGrid、TextBox和和ComboBox等多种类等多种类型控件的绑定。该窗体的运行结果如图型控件的绑定。该窗体的运行结果如图10-9所示。所示。图图10-910-9数据绑定记录导航数据绑定记录导航【课外拓展实践课外拓展实践】参考如图参考如图10-12所示的窗体,设计所示的窗体,设计【读读者数据管理者数据管理】窗体,注意不同类型控件的窗体,注意不同类型控件的数据绑定方法。数据绑定方法。图图10-1210-12读者数据管理窗体读者数据管理窗体【本章小结本章小结】本章主要介绍了数据绑定的方式、对本章主要介绍了数据绑定的方式、对象与清除方法,也介绍了实现数据绑定的象与清除方法,也介绍了实现数据绑定的多种方法和记录导航的方法。多种方法和记录导航的方法。