将列表控件与数据集合进行绑定 前文提过,除了使用静态的方式定义列表外,我们还可以将SelectionList 、List和ObjectList三个列表控件与特定的数据源进行绑定。这些列表控件支持两种类型的数据源: System.Collections.IEnumerable和System.ComponentModel.IListSource。.Net Framework中的许多集合类都是实现了IEnumerator接口,为此这些类都支持简单的枚举功能。至于这些类的具体实例有位于System.Collections命名空间的Array、ArrayList、Hashtable和ListDictionary,还要一些和控件相关联的集合对象(例如前面的代码中使用到的MobileListItemCollection)。如果你要查看所有实现了IEnumerator接口的集合类的话,请自行参考MSDN帮助文档。
你还可以将列表控件与IListSource数据集合进行绑定。System.Data命名空间中的两个类实现了IListSource这种接口,这两个类就是我们在ADO.NET中经常使用的DataSet和DataTable。我们知道这两个类是相关联的,因为DataSet相当于一个由多个DataTable组成的集合。DataSet类是ADO.NET构架中的一个主要组件,并且DataSet还相当于在数据库中所检索到的数据在
内存中的一个缓存。当列表控件的数据源为一个DataSet对象时,因为一个DataSet可能包含多个DataTable对象,所以我们还必须使用SelectionList.DataMember属性确切地指定使用那个DataTable对象来填充列表项。注意,当你使用一个IEnumerator数据源时,是没有必要指定DataMember属性的。至于DataSet在ASP.NET移动程序中的具体应用,将在其它章节中进行介绍。
当你需要以数据绑定的方式动态地实现一个列表的话,那么应该将该列表控件的DataSource属性指定一个相关联的数据源。如果数据源是一个DataSet对象的话,那么还需要使用DataMember属性确切地指定用那个DataTable填充列表项。对于SelectionList和List控件来说,你可以使用DataTextField和DataValueField两个属性分别指定数据源中的两个字段,列表控件会自动将这两个字段的内容作为各个列表项的文本信息和值信息。而ObjectList列表控件是使用LabelField属性来指定数据源中的一个字段,使得该字段中的内容应用到各个列表项中进行呈现,至于每个列表项的其它字段内容,你可以在ObjectList的详细信息视图页上进行查看。
我们可以以代码的方式或服务器控件语法的方式实现上述数据绑定属性的设置。例如,你希望在一个SelectionList列表控件中使用Manufacturer字段作为各列表项的文本信息,且Model字段作为各列表项的值信息。那么其设置的方法如程序清单3所示:
程序清单3
<mobile:SelectionList ID="SelectionList1" Runat="server" SelectType="MultiSelectListBox" DataTextField="Manufacturer" DataValueField="Model"> </mobile:SelectionList> |
为了获取数据源中对应字段的内容,我们还需要定义一个类,使得每个列表项都可以读取相应的文本信息和值信息。
程序清单4
public class MobileTelephone { private String manufacturer, model; public MobileTelephone(String manufacturer, String model) { this.manufacturer = manufacturer; this.model = model; }
public String Manufacturer { get { return this.manufacturer; } } public String Model { get { return this.model; } } } |
然后,在Page_Load事件处理函数中,创建所有的数据项并将其添加到一个ArrayList对象中。最后就是设置列表控件的DataSource属性了,在这里我们将DataSource指定为这个ArrayList对象。完成上述的步骤再调用DataBind方法,这样就将列表控件和数据源进行绑定了。
程序清单4
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ArrayList array = new ArrayList(); array.Add(new MobileTelephone("Dopoda", "P800")); array.Add(new MobileTelephone("Motorola", "A1200")); array.Add(new MobileTelephone("Nokia", "N70")); array.Add(new MobileTelephone("Samsung", "E638")); SelectionList1.DataSource = array; SelectionList1.DataBind(); } } |
使用上述代码的完整示例将在具体探讨每个列表控件时会应用到。
提示:DataBind方法对于数据绑定来说是至关重要的,很多开发人员经常忘记调用这个方法,以致列表控件不显示任何列表项。我们可以使用两种方法来使用DataBind方法,一种就是在每个要进行数据绑定的列表控件上单独使用DataBind方法,如程序清单4所示。你还可以采用一种一劳永逸的方法,那就是使用MobilePage.DataBind方法(在程序清单4中,使用this.DataBind()替代 SelectionList1.DataBind(),这里的this代表的就是MobilePage)。这样在页面上存在多个数据绑定的列表控件时,仅需使用一个this.DataBind()方法就可以实现所有列表控件和数据源的绑定,而无需为每个实现了数据绑定的列表控件都调用一次DataBind方法。
查看关于
ASP.NET 的全部文档