首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

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;

}

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论