9.6.2简单数据绑定对于简单型的数据绑定,数据绑定的方法比较简单,在得到数据集以后,一般通过把数据集中的某个字段绑定到组件的显示属性上面,如绑定到TextBox组件或Label组件的Text属性。【例9-24】单击窗体中的“Button1”按钮,在textBox1控件中显示Northwind数据库的Products表中Products.ProductName列的数据(简单绑定)。具体实现方法是:(1)设置连接Northwind数据库的连接字符串,并保存到connectionstring变量中。(2)创建SqlConnection类的实例con,它将用于连接Northwind数据库。(3)设置con实例的ConnectionString属性的赋值为connectionstring变量的值,即设置该连接的连接字符串。(4)设置查询Products表中的数据的SQL语句“select*fromProducts”,并保存到cmdText变量中。(5)创建执行SQL语句的数据适配器da,它使用了cmdText和con变量。(6)创建DataSet对象ds。(7)在try语句中,调用con实例的Open()方法打开数据库的连接,并调用da实例的Fill()方法填充ds对象。如果失败,则在catch块中显示失败的信息。(8)在finally块中,调用con实例的Close()方法,关闭已经打开的数据库连接。(9)绑定textBox:textBox1.DataBindings.Clear();textBox1.DataBindings.Add(text,ds,Products.ProductName);privatevoidbutton1_Click(objectsender,EventArgse){stringconnectionstring=@DataSource=20101117-0700;InitialCatalog=Northwind;IntegratedSecurity=True;SqlConnectioncon=newSqlConnection();con.ConnectionString=connectionstring;stringcmdText=select*fromProducts;SqlDataAdapterda=newSqlDataAdapter(cmdText,con);DataSetds=newDataSet();try{con.Open();da.Fill(ds,Products);}catch(Exceptionex){MessageBox.Show(ex.Message);}finally{con.Close();}textBox1.DataBindings.Clear();textBox1.DataBindings.Add(text,ds,Products.ProductName);}9.6.3复杂数据绑定复杂型的数据绑定一般是通过设定其某些属性值来实现绑定的。复杂数据绑定是把一个基于列表的用户界面控件绑定到一个数据实例列表。或者说允许将多个数据元素绑定到一个控件。复杂数据绑定可以绑定数据源中的多行或多列。支持复杂数据绑定的控件有数据网格控件、列表框、组合框。和简单数据绑定一样,复杂数据绑定通常也是用户界面控件绑定的值发生改变时传达到数据列表,数据列表发生改变时传达到用户界面元素。【例9-25】单击窗体中的“Button2”按钮,在comboBox1控件中显示Northwind数据库的Products表中Products.ProductName列的数据。使用comboBox1的DataSource、DisplayMember、ValueMember属性。界面如图9.17所示,代码如下:privatevoidbutton2_Click(objectsender,EventArgse){stringconnectionstring=@DataSource=20101117-0700;InitialCatalog=Northwind;IntegratedSecurity=True;SqlConnectioncon=newSqlConnection();con.ConnectionString=connectionstring;stringcmdText=select*fromProducts;SqlDataAdapterda=newSqlDataAdapter(cmdText,con);DataSetds=newDataSet();try{con.Open();da.Fill(ds,Products);}catch(Exceptionex){MessageBox.Show(ex.Message);}finally{con.Close();}comboBox1.DataSource=ds;comboBox1.DisplayMember=Products.ProductName;comboBox1.ValueMember=Products.ProductName;}图9.17例9-25运行界面【例9-26】数据绑定实例。具体步骤如下。(1)创建一个Windows程序,为窗体添加控件,界面如图9.18所示。图9.19资源管理器中显示新创建的数据集(2)在数据菜单下打开“显示数据源”,选中“添加新数据源”(或者直接选择“数据”→“添加新数据源”菜单项),根据向导选择本地服务器中的Northwind数据库中的Customers表,创建数据集northwindDS及数据连接northwindCS。此时在资源管理器中就可以看到新创建的数据集(如图9.19所示)。(3)设计时绑定设计。选中“客户ID”所对应的文本框textBox1,从属性窗口中打开DataBindings属性,单击text右侧下拉列表,选择Customers表中的CustomerID字段,这样就建立了绑定,其他控件的绑定类似。在窗体的Load事件中添加填充数据集的代码:this.customersTableAdapter.Fill(this.NorthwindDS.Customers);图9.18例9-25运行界面图9.19资源管理器中显示新创建的数据集(4)除了用属性设定绑定外,还可以用代码设定绑定。在Form1_Load事件过程中,可以把this.customersTableAdapter.Fill(this.NorthwindDS.Customers);替换为this.sqlDataAdapter1.Fill(this.northwindDS);,同时将一些控件绑定到同一数据源的不同字段。publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privateBindingManagerBasemybmb;//添加一个BindingManagerBase成员privatevoidForm1_Load(objectsender,EventArgse){//TODO:这行代码将数据加载到表northwindDS.Customers中//可以根据需要移动或移除它this.customersTableAdapter.Fill(this.northwindDS.Customers);textBox1.DataBindings.Add(text,northwindDS,Customers.CustomerID);textBox2.DataBindings.Add(text,northwindDS,Customers.ContactName);textBox3.DataBindings.Add(text,northwindDS,Customers.CompanyName);textBox4.DataBindings.Add(text,northwindDS,Customers.Address);textBox5.DataBindings.Add(text,northwindDS,Customers.Phone);comboBox1.DataBindings.Add(text,northwindDS,Customers.Address);mybmb=groupBox1.BindingContext[northwindDS,Customers];}通常绑定控件的数据导航,一般使用BindingManagerBase类,该类是CurrentManager类的基类,是一个抽象类,无法实例化,可以使用该类的CurrentManager对象来获得CurrentManager对象的引用(基类指针指向派生类的对象),达到跟踪并改变数据源的当前位置的目的。CurrentManager负责对某一数据源绑定的跟踪管理(如同步、记录当前位置),使用BindingManagerBase类来对Windows窗体上绑定到相同数据源的数据绑定控件进行同步,实质上是引用CurrentManager对象来实现的。要在程序中获得BindingManagerBase类引用,可以使用BindingContext属性获得,如mybmb=groupBox1.BindingContext[northwindDS,Customers];设定groupBox1对象内所有绑定到相同数据源的数据绑定控件进行同步。获取CurrentManager对象的引用:mybmb=groupBox1.BindingContext[northwindDS,Customers];(5)使用BindingManagerBase的Position循环访问BindingManagerBase所维护的基础列表的所有记录。Count是获取BindingManagerBase所管理的绑定的行数,见如下代码:privatevoidbutton1_Click(objectsender,EventArgse)//首行{mybmb.Position=0;}privatevoidbutton2_Click(objectsender,EventArgse)//前一行{if(mybmb.Position0)mybmb.Position-=1;}privatevoidbutton3_Click(objectsender,EventArgse)//后一行{if(mybmb.Positionmybmb.Count-1)mybmb.Position+=1;}privatevoidbutton4_Click(objectsender,EventArgse)//末行{mybmb.Position=mybmb.Count-1;}9.7DataGridView控件创建DataGridView实例:DataGridViewdgv=newDataGridView();或者在工具箱中向窗体中添加DataGridView控件。【例9-27】单击窗体中的“Button1”按钮,在DataGridView控件中显示Northwind数据库的Customers表中的数据,具体实现方法如下:(1)设置连接Northwind数据库的连接字符串,并保存为connectionstring变量。(2)创建SqlConnection类的实例con,它将用于连接Northwind数据库。(3)设置con实例的ConnectionString属性的值为connectionstring变量的值,即设置该连接的连接字符串。(4)设置查询Customers表中的数据的SQL语句“select*fromCustomers”,并保存在cmdText变量中。(5)创建执行SQL语句的数据适配器da,它使用了cmd