Price之外的所有绑定列(BoundFields)删除。然后,分别将 上述3列的HeaderText属性改为Product”, “Category”和 “Price”。由于ProductName是必需的,将ProductName列转变成模板 列(TemplateField),在EditItemTemplate里添加一个RequiredFieldValidator控 件;同样的,将UnitPrice列也转换成模板列,并添加一个CompareValidator控件 ,确保用户输入的是大于或等于0的有效的货币值。除此以外,你还可以作一些界 面上的改进,比如使UnitPrice值居中,或分别对UnitPrice的只读和编辑界面作 一些格式化的处理。
在GridView的智能标签里点相关项启动编辑、分页、 排序功能。
注意:想回顾怎样自定义GridView的编辑界面吗?请参考前面 的文章之20《定制数据修改界面》
图6:启用GridView的编辑、排序、分页功能。
完成GridView的 修改后,GridView 和 ObjectDataSource的代码声明看起来像下面这样:
<asp:GridView ID="Products" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ProductsDataSource"
AllowPaging="True" AllowSorting="True">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:TemplateField HeaderText="Product" SortExpression="ProductName">
<EditItemTemplate>
<asp:TextBox ID="ProductName" runat="server"
Text=''<%# Bind("ProductName") % >''></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1" Display="Dynamic"
ControlToValidate="ProductName" SetFocusOnError="True"
ErrorMessage="You must provide a name for the product."
runat="server">*</asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server"
Text=''<%# Bind("ProductName") % >''></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="CategoryName" HeaderText="Category"
ReadOnly="True" SortExpression="CategoryName" />
<asp:TemplateField HeaderText="Price" SortExpression="UnitPrice">
<EditItemTemplate>
contentlt;asp:TextBox ID="UnitPrice" runat="server" Columns="8"
Text=''<%# Bind ("UnitPrice", "{0:N2}") % >''></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1"
ControlToValidate="UnitPrice" Display="Dynamic"
ErrorMessage="You must enter a valid currency value with no
currency symbols. Also, the value
|