1、基本
- <asp:TemplateField HeaderText="Price" SortExpression="UnitPrice"
- ItemStyle-Font-Bold="True">
- <ItemTemplate>
- <asp:Label runat="server"
- Text='<%# Eval("UnitPrice", "${0:F2}") %>' />
- </ItemTemplate>
- <EditItemTemplate>
- <asp:TextBox ID="UnitPrice" runat="server"
- Text='<%#Bind("UnitPrice")%>' />
- <asp:RequiredFieldValidator ID="rfv1" runat="server"
- ControlToValidate="UnitPrice"
- Text="You must enter the price" />
- </EditItemTemplate>
- </asp:TemplateField>
Eval和Bind这两个方法之间的区别在于,Eval提供了只读绑定,而Bind提供了读写绑定,通常会在不同模板中使用这两个方法。可以体会上面的代码。
2、与DropDownList 联合
- <asp:TemplateField HeaderText="Supplier">
- <ItemTemplate>
- <%#Eval("CompanyName") %>
- </ItemTemplate>
- <EditItemTemplate>
- <asp:SqlDataSource ID="Sds1" runat="server"
- ConnectionString="<%$ConnectionStrings:NorthwindConnectString%>"
- SelectCommand="SELECT SupplierID, CompanyName
- FROM Suppliers ORDER BY CompanyName" />
- <asp:DropDownList ID="SupplierID" runat="server"
- DataSourceId="Sds1"
- DataValueField="SupplierID" DataTextField="CompanyName"
- SelectedValue='<%#Bind("SupplierID")%>' />
- </EditItemTemplate>
- </asp:TemplateField>
可以看到,ItemTemplate 只是显示CompanyName,而EditItemTemplate包含一个SqlDataSource和一个DropDownList。数据源获取所有供应商的ID和名字,列表绑定到这个数据。DataValueField放置ID,DataTextField放置显示数据。这里的关键是SelectedValue,它设置为一个数据绑定表达式,在此使用Bind来提供与SupplierID列的双向绑定。因为使用了SelectedValue,底层行SupplierID会显示为列表中的当前所选项,另外由于使用了Bind,点击UpDate链接时。会通过数据源控件将新的SupplierID放回数据库。
参考:
ASP.NET 2.0 Illustrated (英)Alex Homer;Dave Sussman