一、在DataGridTextBoxColumn 编辑器中设置
或
新建一个TableStyle,将此TableStyle.MappingName属性对应到这个TableStyle要控制的那个DataTable的名字
DataGridTableStyle myTableStyle = new DataGridTableStyle();
myTableStyle.MappingName = "myDateTable";
再建立几个DataGridColumnStyle,分别用来控制将要显示的列
DataGridColumnStyle myColumnStyle1 = new DataGridTextBoxColumn();
myColumnStyle1.MappingName = "OrderID";
myColumnStyle1.HeaderText = "订单号";
……
二、采用复杂数据绑定
复杂数据绑定指将一个控件绑定到多个数据元素的能力,通常绑定到数据库中的多条记录,或者绑定到多个任何其他类型的可绑定数据元素,一般是绑定到一个DataView。支持复杂绑定的控件的示例有DataGrid、ListBox 和 ErrorProvider 控件。
一般DataGrid控件都是跟一个DataView绑定,DataGrid的数据绑定属于复杂绑定,因为它绑定到有多条记录的表,DataGrid有两个属性同数据绑定有关:
DataGrid.DataSource 属性:获取或设置DataGrid所显示数据的数据源。一般是跟DataTable 、DataView 、DataSet 绑定,如果DataSource设定为DataSet,则引用包含的表不止一个,则必须向 DataMember 属性设置一个字符串,该字符串指定要绑定到的表。
DataGrid.DataMember 属性:获取或设置 DataSource中的特定列表,就是上述DataSource设定为DataSet时,要设定此属性来指定要绑定到的表。
经常有这种需求,一个窗体中有一个DataGrid,显示了一些数据,窗体上还有一些TextBox控件,用来显示DataGrid中的当前行的数据,一个TextBox控件对应DataGrid行的一个列,当DataGrid的当前行移动时,TextBox控件中的值也会跟着显示改变后的DataGrid的当前行。
要保证这些数据绑定控件保持同步就要一个统一管理数据绑定的机制来保证这些控件的同步,DotNet中负责数据同步的是BindingManagerBase,它是用来管理数据源的,绑定到同一个数据源的数据绑定控件都可以由BindingManagerBase统一管理。BindingManagerBase可以由Form.BindingContext.Item属性获得,此属性有两种重载:
public BindingManagerBase this[object DataSource] //获取与指定数据源关联的 BindingManagerBase
public BindingManagerBase this[object DataSource, string DataMember] //获取与指定数据源和数据成员相关联的一个 BindingManagerBase
所有的数据绑定控件的数据源同建立BindingManagerBase时传递的对象一样的,都将属于这个BindingManagerBase管理,比如,建立一个如下的BindingManagerBase:
BindingManagerBase myBindingManagerBaseParent = this.BindingContext[myDataSet,"customers"];
如果Form上有个DataGrid的DataGrid.DataSource = myDataSet;DataGrid.DataMember = "customers",那么这个DataGrid的数据源就在myBindingManagerBaseParent的管理之下了。
同样简单数据绑定的控件的DataSource也是跟 BindingManagerBase的DataSource一样,DataMember是BindingManagerBase的DataMember指定的那个表的某一列时,这个控件的数据源也在这个myBindingManagerBaseParent管理之下了:
dataGrid1.DataSource = myDataSet;
dataGrid1.DataMember = "customers";
textCustomerId.DataBindings.Add(new Binding("Text",myDataSet,"customers.customerid")); //TextBox的Text属性跟
//myDataSet的customers表的customerid字段绑定
BindingManagerBase控制的数据源有个当前行的概念,控件一旦跟数据源绑定后,DataGrid将显示数据源表的所有数据,不过在DataGrid的行标头里有个黑色的三角箭头用来指示当前行。简单绑定控件中显示的值将是数据源当前行的内容。
所以,只要我们改变BindingManagerBase的指针就行了,这个可以在界面上通过点击要到的那一行来改变当前行,也可以在程序中改变当前行的设置:
myBindingManagerBaseParent.Position = 10;
BindingManagerBase.Position属性的变化就会引起BindingManagerBase当前行的变化,也就是跟这个数据源绑定的DataGrid的当前行的变化,简单绑定控件的显示内容也就随之改变了。
或
新建一个TableStyle,将此TableStyle.MappingName属性对应到这个TableStyle要控制的那个DataTable的名字
DataGridTableStyle myTableStyle = new DataGridTableStyle();
myTableStyle.MappingName = "myDateTable";
再建立几个DataGridColumnStyle,分别用来控制将要显示的列
DataGridColumnStyle myColumnStyle1 = new DataGridTextBoxColumn();
myColumnStyle1.MappingName = "OrderID";
myColumnStyle1.HeaderText = "订单号";
……
二、采用复杂数据绑定
复杂数据绑定指将一个控件绑定到多个数据元素的能力,通常绑定到数据库中的多条记录,或者绑定到多个任何其他类型的可绑定数据元素,一般是绑定到一个DataView。支持复杂绑定的控件的示例有DataGrid、ListBox 和 ErrorProvider 控件。
一般DataGrid控件都是跟一个DataView绑定,DataGrid的数据绑定属于复杂绑定,因为它绑定到有多条记录的表,DataGrid有两个属性同数据绑定有关:
DataGrid.DataSource 属性:获取或设置DataGrid所显示数据的数据源。一般是跟DataTable 、DataView 、DataSet 绑定,如果DataSource设定为DataSet,则引用包含的表不止一个,则必须向 DataMember 属性设置一个字符串,该字符串指定要绑定到的表。
DataGrid.DataMember 属性:获取或设置 DataSource中的特定列表,就是上述DataSource设定为DataSet时,要设定此属性来指定要绑定到的表。
经常有这种需求,一个窗体中有一个DataGrid,显示了一些数据,窗体上还有一些TextBox控件,用来显示DataGrid中的当前行的数据,一个TextBox控件对应DataGrid行的一个列,当DataGrid的当前行移动时,TextBox控件中的值也会跟着显示改变后的DataGrid的当前行。
要保证这些数据绑定控件保持同步就要一个统一管理数据绑定的机制来保证这些控件的同步,DotNet中负责数据同步的是BindingManagerBase,它是用来管理数据源的,绑定到同一个数据源的数据绑定控件都可以由BindingManagerBase统一管理。BindingManagerBase可以由Form.BindingContext.Item属性获得,此属性有两种重载:
public BindingManagerBase this[object DataSource] //获取与指定数据源关联的 BindingManagerBase
public BindingManagerBase this[object DataSource, string DataMember] //获取与指定数据源和数据成员相关联的一个 BindingManagerBase
所有的数据绑定控件的数据源同建立BindingManagerBase时传递的对象一样的,都将属于这个BindingManagerBase管理,比如,建立一个如下的BindingManagerBase:
BindingManagerBase myBindingManagerBaseParent = this.BindingContext[myDataSet,"customers"];
如果Form上有个DataGrid的DataGrid.DataSource = myDataSet;DataGrid.DataMember = "customers",那么这个DataGrid的数据源就在myBindingManagerBaseParent的管理之下了。
同样简单数据绑定的控件的DataSource也是跟 BindingManagerBase的DataSource一样,DataMember是BindingManagerBase的DataMember指定的那个表的某一列时,这个控件的数据源也在这个myBindingManagerBaseParent管理之下了:
dataGrid1.DataSource = myDataSet;
dataGrid1.DataMember = "customers";
textCustomerId.DataBindings.Add(new Binding("Text",myDataSet,"customers.customerid")); //TextBox的Text属性跟
//myDataSet的customers表的customerid字段绑定
BindingManagerBase控制的数据源有个当前行的概念,控件一旦跟数据源绑定后,DataGrid将显示数据源表的所有数据,不过在DataGrid的行标头里有个黑色的三角箭头用来指示当前行。简单绑定控件中显示的值将是数据源当前行的内容。
所以,只要我们改变BindingManagerBase的指针就行了,这个可以在界面上通过点击要到的那一行来改变当前行,也可以在程序中改变当前行的设置:
myBindingManagerBaseParent.Position = 10;
BindingManagerBase.Position属性的变化就会引起BindingManagerBase当前行的变化,也就是跟这个数据源绑定的DataGrid的当前行的变化,简单绑定控件的显示内容也就随之改变了。