首页 > 编程 > .NET > 正文

ASP.NET 2.0高级数据处理之处理Null值

2024-07-10 13:09:14
字体:
来源:转载
供稿:网友
国内最大的酷站演示中心!
  数据控件支持多种用于处理空值或缺失数据的方法。例如,gridview、formview和detailsview都支持emptydatatext或emptydatatemplate属性,当数据源没有返回数据行的时候,你可以使用这些属性来指定控件显示的内容。我们只需要设置emptydatatext和emptydatatemplate其中的一个(如果两个都设置了,emptydatatemplate会被重载)。你也可以在绑定字段(和衍生的字段类型)、模板字段或数据源参数对象上指定convertemptystringtonull属性,指明在调用相关的数据源操作之前,来自客户端的string.empty值必须被转换为空值。

  objectdatasource也支持convertnulltodbnull属性,当相关的方法要求用dbnull代替空值(visual studio数据集中的tableadapter类就有这个要求)的时候,我们就可以把这个属性设置为真。你还可以指定绑定字段(和衍生的字段类型)的nulldisplaytext属性,当数据源返回的某个字段的值为空的时候,它指定显示的内容。如果在编辑模式中这个值没有发生变化,那么在更新操作中这个值会以空值的形式返回给后端数据源。最后,你还可以指定数据源参数的defaultvalue属性,如果某个传递进来的参数值为空的时候,该属性就给参数指定默认值。这些属性是"链式反应"的,例如,如果convertemptystringtonull和defaultvalue都被设置了,那么string.empty值会首先被转换为空(null),接着被转换为默认值。

<asp:detailsview…...>
 <fields>
  <asp:boundfield datafield="phone" headertext="phone" nulldisplaytext="not listed" sortexpression="phone" />
  <asp:boundfield datafield="fax" headertext="fax" nulldisplaytext="not listed" sortexpression="fax" />
 </fields>
 <emptydatatemplate>
  <asp:image id="image1" runat="server" imageurl="~/images/warning.gif" />there are no records to display
 </emptydatatemplate>
</asp:detailsview>
<asp:sqldatasource ……>
 <updateparameters>
  <asp:parameter name="contacttitle" type="string" defaultvalue="owner" convertemptystringtonull="true" />
  <asp:parameter name="region" type="string" convertemptystringtonull="true" />
  <asp:parameter name="phone" type="string" convertemptystringtonull="true" />
  <asp:parameter name="fax" type="string" convertemptystringtonull="true" />
  <asp:parameter name="customerid" type="string" />
 </updateparameters>
 ……
</asp:sqldatasource>

  你可以使用这些处理空值的属性来实现下拉列表过滤器,让它开始时显示数据源的所有值,直到过滤器中的某个值被选中为止。我们是这样实现它的:首先给下拉列表添加一个空字符串值的数据项,并设置数据源中的与下拉列表相关的controlparameter(控件参数)的convertemptystringtonull属性。

  接着在数据源的selectcommand中,你可以通过检测空值来返回所有(没有过虑)值。下面的例子演示了这种技术,它使用了一个简单的sql命令,当然你也可以在存储过程的实现中执行空值检测。请注意下拉列表的appenddatabounditems属性的使用,它允许来自下拉列表数据源的值被添加到"all"(这个项是我们静态添加的)数据项后面。同时我们要注意,在默认情况下,如果传递给selectcommand 的相关参数的值中只要有一个为空,sqldatasource就不执行select操作。当传递了空值的时候,为了强制select操作执行,你可以把它的cancelselectonnullparameter属性设置为假。

<asp:dropdownlist appenddatabounditems="true" autopostback="true" datasourceid="sqldatasource2" datatextfield="state" datavaluefield="state" id="dropdownlist1" runat="server">
 <asp:listitem value="">all</asp:listitem>
</asp:dropdownlist>
<asp:sqldatasource connectionstring="<%$ connectionstrings:pubs %>" id="sqldatasource2" runat="server" selectcommand="select distinct [state] from [authors]">
</asp:sqldatasource>

<asp:sqldatasource connectionstring="<%$ connectionstrings:pubs %>" id="sqldatasource1" runat="server" selectcommand="select au_id, au_lname, au_fname, state from authors where state = isnull(@state, state)" cancelselectonnullparameter="false">
<selectparameters>
 <asp:controlparameter controlid="dropdownlist1" name="state" propertyname="selectedvalue" type="string" />
</selectparameters>
</asp:sqldatasource>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表