QQ:6450046

Binding 类

       代表某对象属性值和某控件属性值之间的简单绑定。

 

 

备注

使用 Binding 类来创建和维护某控件的属性与某对象的属性或对象列表中当前对象的属性之间的简单绑定。

作为第一种情况的示例,您可以将 TextBox 控件的 Text 属性绑定到“客户”(Customer) 对象的“名字”(FirstName) 属性。作为第二种情况的示例,您可以将 TextBox 控件的 Text 属性绑定到包含客户的 DataTable 的“名字”(FirstName) 属性。

Binding 类还使您可以格式化值以通过 Format 事件显示,以及通过 Parse 事件检索格式化的值。

当用 Binding 构造函数构造 Binding 实例时,您必须指定三项:要绑定到的控件属性的名称、数据源以及解析为数据源中的列表或属性的导航路径。导航路径还用于创建对象的 BindingMemberInfo。

首先,您必须指定要将数据绑定到其上的控件属性的名称。例如,若要在 TextBox 控件中显示数据,请指定 Text 属性。其次,可以将下面任意一个类的实例指定为数据源:

描述 示例
实现 IBindingList 或 ITypedList 的任何类。包括:DataSet、DataTable、DataView 或 DataViewManager。 C# 示例:

DataSet ds = new DataSet("myDataSet");

实现 IList 以创建对象索引集合的任意类。必须在创建 Binding 对象以前创建和填充该集合。列表中的所有对象必须为同一类型;否则将引发异常。 C# 示例:

ArrayList ar1 = new ArrayList;

Customer1 cust1 = new Customer("Louis");

ar1.Add(cust1);

强类型对象的强类型 IList C# 示例:

Customer [] custList = new Customer[3];

第三,必须指定导航路径,它可以为空字符串 ("")、单个属性名称或句点分隔的名称层次结构。如果将导航路径设置为空字符串,将在基础数据源对象上调用 ToString 方法。

如果数据源为可以包含多个 DataColumn 对象的 DataTable,则必须使用导航路径解析为特定列。

注意   当数据源为 DataSetDataViewManagerDataTable 时,实际将绑定到 DataView。因此,绑定行实际为 DataRowView 对象。

当数据源设置为包含多个 DataTable 对象的对象(如 DataSetDataViewManager)时,需要句点分隔的导航路径。当绑定到其属性返回对其他对象的引用的对象(如具有返回其他类对象的属性的类)时,也可以使用句点分隔的导航路径。例如,以下导航路径均描述有效数据字段:

  • “Size.Height”
  • “Suppliers.CompanyName”
  • “Regions.regionsToCustomers.CustomerFirstName”
  • “Regions.regionsToCustomers.customersToOrders.ordersToDetails.Quantity”

路径的每个成员既可以返回解析为单个值(如一个整数)的属性,也可以返回值的列表(如字符串数组)。尽管路径中的每个成员都可以是列表或属性,但最终成员必须解析为属性。每个成员都建立在前一个成员上:“Size.Height”解析为当前 Size 的 Height;“Regions.regionsToCustomers.CustomerFirstName”解析为当前客户的名字,其中,该客户是当前区域的一个客户。

DataRelation 通过将 DataSet 中的一个 DataTable 与第二个 DataTable 链接来返回值列表。如果 DataSet 包含 DataRelation 对象,则可以将数据成员指定为 TableName,其后为 RelationName,然后是 ColumnName。例如,如果名为“Suppliers”的 DataTable 包含名为“suppliers2products”的 DataRelation,那么数据成员可能为“Suppliers.suppliers2products.ProductName”。

数据源可以由一组相关类组成。例如,设想对太阳系进行编录的一组类。名为 System 的类包含名为 Stars 的属性,后者返回恒星对象的集合。每个“恒星”(Star) 对象都有“名称”(Name) 和“质量”(Mass) 属性,以及返回“行星”(Planet) 对象的集合的“行星”(Planets) 属性。在该系统中,每个行星也有“质量”(Mass) 和“名称”(Name) 属性。每个“行星”(Planet) 对象此外还有“月球”(Moons) 属性,它返回“月球”(Moon) 对象的集合,每个“月球”对象也有“名称”(Name) 和“质量”(Mass) 属性。如果将“系统”(System) 对象指定为数据源,则可以将下列任意项指定为数据成员:

  • “Stars.Name”
  • “Stars.Mass”
  • “Stars.Planets.Name”
  • “Stars.Planets.Mass”
  • “Stars.Planets.Moons.Name”
  • “Stars.Planets.Moons.Mass”

可简单绑定的控件以 ControlBindingsCollection 中 Binding 对象的集合为特色,您可通过控件的 DataBindings 属性访问该集合。通过调用 Add 方法向该集合添加 Binding 对象,从而将控件的属性绑定到某个对象的属性(或绑定到列表中当前对象的属性)。

您可简单绑定到从 System.Windows.Forms.Control 类派生的任何对象,例如下列 Windows 控件:

  • Button
  • CheckBox
  • CheckedListBox
  • ComboBox
  • DateTimePicker
  • DomainUpDown
  • GroupBox
  • HScrollBar
  • Label
  • LinkLabel
  • ListBox
  • ListView
  • MonthCalendar
  • NumericUpDown
  • PictureBox
  • ProgressBar
  • RadioButton
  • RichTextBox
  • ScrollBar
  • StatusBar
  • TextBox
  • TreeView
  • VScrollBar
注意   只有 ComboBoxCheckedListBoxListBox 控件的 SelectedValue 属性是简单绑定的。

BindingManagerBase 类是管理特定数据源和数据成员的所有 Binding 对象的抽象类。从 BindingManagerBase 派生的类是 CurrencyManager 类和 PropertyManager 类。如何管理 Binding 取决于 Binding 是列表绑定还是属性绑定。例如,如果是列表绑定,则可以使用 BindingManagerBase 对象指定列表中的 Position;因此 Position 确定哪一项(在列表的所有项中)实际绑定到控件。若要返回适当的 BindingManagerBase,请使用 BindingContext。

若要向绑定到同一 DataSource 的一组控件添加新行,请使用 BindingManagerBase 类的 AddNew 方法。使用 BindingContext 类的 Item 属性返回适当的 CurrencyManager。若要避免添加新行,请使用 CancelCurrentEdit 方法。

posted @ 2009-02-04 11:02  易 天  阅读(464)  评论(0编辑  收藏  举报