编辑模式下显示一个Drop-Down List
这里将提供给用户的一个常用需求——一个某行处于编辑状态下的Drop-Down List。举例来说,一个DataGrid可能显示一个书籍清单,其中包括每本书的类别,当用户编辑一条书籍记录时,可能要为该书指定一个不同的类别,理想情况下,他们可以从Drop-Down List中选择可能的类别值,比如“小说”、“生物”或者“参考书目”。
显示一个Drop-Down List需要在DataGrid中设定一个模板列。典型的情况是:项模板包含了一个控件,比如一个数据绑定的Label控件来显示记录中某个字段的当前值。然后,向编辑项模板中添加一个Drop-Down List,在VS中,你可以通过DataGrid的属性生成器添加一个模板列,然后通过“编辑模板”移除编辑项模板中默认的TextBox控件,并拖入一个Drop-Down List控件,你还可以在HTML视图下添加模板列。
在创建了含有Drop-Down List的模板列后还有两个任务:首先,要产生一个列表,其次要设定列表中的预选项。举例来说,如果本书的类别设为“小说”,当Drop-Down List显示时,往往需要“小说”是预选的(预选一个项并不是在所有情况下都要讨论的问题)。
可以有多种生成Drop-Down List的方法。下面的几个例子说明了三种方式:使用静态项;使用DataSet中的记录集合;使用DataReader直接从数据库中读取信息。
l 静态项:在Drop-Down List中显示静态项不需要绑定数据到控件。你可以很简单地在控件的项集合中定义项。在VS中,可以通过属性窗口中的Items属性触发项集合编辑器,也可以在HTML视图中编辑项。
下面是一个显示模式下显示类别的模板列和编辑模式下类别的静态列表的完整定义。项模板包含了一个Label控件,其Text属性被设置为当前记录的“genre”(类别)字段,编辑项模板中的静态项定义高亮显示。
<asp:TemplateColumn HeaderText="genre">
<ItemTemplate>
<asp:Label id=Label4 runat="server"
Text=’<%# DataBinder.Eval(Container, "DataItem.genre") %>’>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="DropDownList2" runat="server" Width="172px">
<asp:ListItem Value="fiction">fiction</asp:ListItem>
<asp:ListItem Value="biography">biography</asp:ListItem>
<asp:ListItem Value="reference">reference</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
l DataSet
如果你想要在Drop-Down List中显示的数据处于一个DataSet里,那么你可以采用通用的数据绑定方式。下面是它的声明语法。Drop-Down List绑定了数据集DsBooks1中的类别表。数据绑定的设置高亮显示。
<asp:TemplateColumn HeaderText="genre (dataset)">
<ItemTemplate>
<asp:Label id=Label3 runat="server"
Text=’<%# DataBinder.Eval(Container, "DataItem.genre") %>’>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id=DropDownList4 runat="server"
DataSource="<%# DsBooks1 %>" DataMember="Genre"
DataTextField="genre" DataValueField="genre" Width="160px">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
l DataReader
你也可以直接从数据库生成Drop-Down List。这种方式更为复杂但效率也更高。原因在于只有在需要的时候才去读数据库。
实现的一个相当简便的方法是利用WEB窗体数据绑定表达式。尽管最常用的是在数据绑定表达式中调用DataBinder.Eval 方法,但事实上你可以使用该页任何可用的public成员。下面的例子告诉你如何创建一个函数来创建、填充以及返回一个DataTable对象,Drop-Down List可以对它进行绑定。
这种情况下,你需要能够执行一个能得到你需要的记录集的数据命令。比如说,你可能需要定义一个Command,并把它的Comman