快速业务通道

ASP.NET 2.0数据操作教程之二十:定制数据修改界面

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

ASP.NET 2.0数据操作教程之二十:定制数据修改界面

图11:修改后Categroy和Supplier正确选中了Product的实际数据

处理NULL值

Product表中的CategoryID 和 SupplierID列允许为 NULL,而编辑模板中的下拉列表却没有NULL这一项。所以目前存在下面两种问题 :

1. 用户无法则现在的界面中将某个product非空的category或supplier 设置为NULL

2. 如果产品的CategoryID 或 SupplierID为NULL,在点击 Edit按钮时程序会抛出异常。这是因为Bind()表达式中CategoryID(或 SupplierID)返回NULL值时,SelectedValue无法找到NULL这一列表项因而抛出异 常。

为了支持CategoryID 和 SupplierID的NULL值,需要为两个 DropDownList增加一个NULL值选项。在《Master/Detail Filtering With a DropDownList》教程中,我们演示了为绑定的DropDownList增加列表项,方法是 将DropDownList的AppendDataBoundItems属性设置为true并手动增加一个值为-1 的列表项。在ASP.NET的数据绑定逻辑中,空字符串将自动转换为NULL,NULL值也 可以转为空字符串。因此,本节教程我们将增加一个值为空字符串的列表项。

先将这两个DropDownList的AppendDataBoundItems属性设置为true。接着 ,用<asp:ListItem>元素来增加一个NULL列表项,元素标记大致如下:

<asp:DropDownList ID="Categories" runat="server" DataSourceID="CategoriesDataSource" DataTextField="CategoryName" DataValueField="CategoryID" SelectedValue=''<%# Bind ("CategoryID") %>'' AppendDataBoundItems="True">
<asp:ListItem Value="">(None)</asp:ListItem>
</asp:DropDownList>

我们选择了使用“(None) ”作为列表项的文本显示(Text),你也可以空字符串或别的字符。

注意:《Master/Detail Filtering With a DropDownList》教程演示过 DropDownList列表项的增加方法――在设计器中点击DropDownList的属性窗口 (F4)中的Item属性(将显示ListItem集合编辑器)。这次我们采用直接在元素 标记中增加NULL列表项。如果你使用集合编辑器,创建出的元素标记将忽略空字 符的Value,如:<asp:ListItem>(None)</asp:ListItem>。看起来 并无大碍,可是DropDownList对没有Value的项则使用Text来代替,这样以来选择 “None”时,“None”则被赋予CategoryID,系统将产生 异常。通过显式设置Value="",选择此项,CategoryID 就被更新为 NULL值了。

重复以上步骤设置Supplier的下拉框控件。

通过这一 附加的列表项,编辑界面就可以为Product的CategoryID 和 SupplierID设定NULL 值了,见图12

ASP.NET 2.0数据操作教程之二十:定制数据修改界面

图12:通过选择(None)为产品的Category或Supplier指定NULL值。

四、用RadioButton表示Discontinued状态

Product的 Discontinued字段以CheckBox列呈现,只读模式是disabled的,只有编辑模式下 才被enable。根据配套需要,我们可以使用模板列对其进行定制。本节教程中, 我们将使用含有RadioButtonList控件的模板列代替原来的CheckBox列,并带有两 个选项-“Active” 和 “Discontinued” – 让用 户选择product的Discontinued值。

先将Discontinued的CheckBox列转为 模板列,会用到ItemTemplate 和 EditItemTemplate两个模板。它们使用 CheckBox并将通过Checked属性绑定Discontinued字段,唯一的区别在于 ItemTemplate模板中的CheckBox的Enabled属性是false。

使用 RadioButtonList控件替换掉原来ItemTemplate 和 EditItemTemplate模板中的 CheckBox控件,并将它们的ID属性都设置为DiscontinuedChoice。然后,设置 RadioButtonLists的两个单选按钮

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号