程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET 2.0高級數據處理之處理Null值

ASP.NET 2.0高級數據處理之處理Null值

編輯:關於ASP.NET

數據控件支持多種用於處理空值或缺失數據的方法。例如,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>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved