9.3.1 数据绑定属性
数据绑定控件常常提供7个属性,供开发人员设置数据绑定信息。我们可以确定为控件配置哪些属性。
● DataSourceId:提供数据的对象(常常是数据库,也可以是一个列表,或其他带有支持数据绑定接口的对象)的Id属性值。这个属性是DataBound类提供的两个属性之一。
● DataMember:提供数据的对象中的数据存储器名。例如,如果DataSourceId是一个DataSet的名称,则DataMember就是DataSet中一个表的名称。这是DataBound类提供的另一个属性。
● DataTextField:数据源中的字段名,该字段的值将显示在窗体上。
● DataValueField:数据源中字段的值,用户选择一个显示的项时,就返回这个值。
● DataTextFormat:应用于数据的格式字符串,该数据是从DataTextField指定的字段中提取的。
● DataValueFormat:应用于数据的格式字符串,该数据是从DataValueField指定的字段中提取的。
● DataKeyField:数据源中的字段名,其值与显示的项关联起来(通常是数据源的主键字段)。
下面是Visual Basic 2005中的DataTextField属性示例。在这个例子中,DataTextField存储在ViewState中,所以属性的Get和Set部分中的代码检索和更新ViewState。
Public Property DataTextField() As String
Get
Dim strDTF As String
strDTF = ViewState("DTF").ToString
If strDTF Is Nothing Then
Return String.Empty
Else
Return strDTF
End If
End Get
Set(ByVal value As String)
ViewState("DTF") = value
End Set
End Property
C#的对应代码如下所示。
public string DataTextField
{
get
{
string strDTF;
strDTF = ViewState["DTF"].ToString;
if(strDTF == null)
{
return String.Empty;
}
else
{
return strDTF;
}
}
set
{
ViewState["DTF"] = value;
}
}
提示:
不需要把DataTextField和DataValue字段的值保存在ViewState中。如前所述,属性值自动保存为自定义控件上的特性,控件的特性就使用该值。这个例子使用ViewState是为了演示当值比简单的字符串更复杂时,如何存储它们。例如,如果控件可以为DataTextField、DataValueField或DataKeyField指定一系列值,ViewState就会为这些复杂的值提供更好的存储机制。
在设置各种数据绑定属性时,可能发生一个潜在的问题。数据绑定控件需要设置最多7个属性,才能有效地工作,因此,改变其中任意一个属性,都会改变控件进行数据绑定的方式。如果在提取数据之前设置了控件的一个数据绑定属性,就不会有问题:控件进行数据绑定时,就使用这些属性的当前值提取数据。但如果主页上的代码在提取数据之后,改变了数据绑定属性的值,就会出问题。此时,可能需要再次提取数据。
ASP.NET提供了两个工具来处理这个问题。
● Databound类的Initialized属性,如果数据已提取(或已启动数据绑定过程),它就设置为true。
● OnDataPropertyChanged方法,调用它可以表示:属性已改变,需要重新进行数据绑定。
只有控件开始提取数据(即Initialized属性为true),才需要指定数据属性已改变。 把这合并到DataTextField中,表示重写属性的Set部分,如下面的Visual Basic 2005代码所示。
Set(ByVal value As String)
If Me.Initialized = True Then
Me.OnDataPropertyChanged()
End If
ViewState("DTF") = value
End Set
C#的对应代码如下所示。
set
{
if(this.Initialized == true)
{
this.OnDataPropertyChanged();
}
ViewState("DTF") = value;
}






