ASP.NET 2.0数据操作教程之二十:定制数据修改界面
uppliers表中 。ProductsRow对象中的CategoryID和SupplierID可以读取和写入,而 CategoryName和SupplierName属性则标记为只读。
由于CategoryName和 SupplierName的只读状态,相应绑定列的ReadOnly属性也被置为true,防止编辑 某行时它们的值被修改。尽管也可以通过设置ReadOnly属性为false,使其在编辑 状态将这些绑定列转为TextBox,但是这样以来当用户尝试更新产品信息时系统就 会抛出异常,因为UpateProduct重载中并不接受CategoryName和SupplierName参 数。事实上,我们也不想编写这种重载方法,原因如下: 1. Products表 没有SupplierName和CategoryName字段,而是对应的外键SupplierID和 CategoryID。因此,我们希望在更新方法中传递外键ID,而不是查找外键表中的 值。 2. 要求用户键入supplier或者category的名字也很不合理,因为这 要求用户必须知道合法的category和supplier,并且拼写正确无误。 我们 打算在只读模式Supplier和category列分别显示了分类和提供商的名字,而在编 辑时,通过下拉列表显示可用选项。这样以来,用户可以快速查看有效的 category和supplier并且可以很便捷直观的进行选择。 要实现这一点,需 要将SupplierName和CategoryName对应的绑定列转换为模板列,在ItemTemplate 模板中显示SupplierName和CategoryName,而EidtItemTemplate模板则使用 DropDownList控件列出有效的cagegory和supplier。 添加Categories和 Suppliers 的DropDownList控件 我们要先将SupplierName和CategoryName 绑定列转换为模板列:点击GridView智能标记中的‘编辑列’链接; 选择左下的BoundField;点击“将此字段转换为TemplateField”链接 ,转换过程将创建一个模板列,包括ItemTemplate和EditItemTemplate,最终的 元素标记大致如下:
由于绑定列标记为只读, ItemTemplate和EditItemTemplate都将用Label控件的Text属性绑定显示相关数据 (如上面的CategoryName)。因此需要修改EditItemTemplate模板,用 DropDownList控件来替换原来的Label控件。 像上节教程讲的,即可在设 计器中编辑模板也可直接修改模板的元素标记。要在设计器中修改,可以通过 GridView的智能标记点击“编辑模板”链接并选择Category字段的 EditItemTemplate模板。删除Label控件用DropDownList控件代替,并设置 DropDownList的ID属性为Categories。 图5:删除EditItemTemplate模板中的TextBox并增加一个 DropDownList 下一步我们需要为DropDownList绑定category。从智能标记 中点击“选择数据源”链接并选择创建一个新的ObjectDataSource, 命名为CategoriesDataSource。 图6:创建一个新的ObjectDataSource控件 CategoriesDataSource 为了使ObjectDataSource显示所有的category,我 们将它与CategoriesBLL类的GetCategories()方法进行绑定。 图7:将ObjectDataSource控件用GategoriesBLL的GetCategories()方 法进行绑定 最后,配置DropDownList,用CategoryName字段作为显示字段 而CategoryID作为Value字段。 图8:用CategoryName作为显示字段并用CategoryID作为V |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |