基本上,如果從資料庫撈出來的資料有NULL值時,應該在資料庫或撈取資料的SQL語句中處理,不應該由前端的ASP.NET/C#來處理。
雖然,ASP.NET/C#中有處理的機制,但對初學者來說,都有些困難度且不容易理解。
所以,我通常都是在資料庫端或在SQLDataSorce的SelectCommand就注意把NULL值處理掉。
怎麼處理呢?用SQL Server的ISNULL()函數。
例如,在前例的DropDownList2的SqlDataSource2中SelectCommand是...
<pre class="c" name="code">SELECT [kubun], [vesion] FROM [v_item] WHERE ([kubun] = @kubun)
我改成...
<pre class="c" name="code">SELECT [kubun], ISNULL([vesion], ' ') VESION FROM [v_item] WHERE ([kubun] = @kubun)
同樣的,在GridView的SqlDataSource3中SelectCommand原來是..
<pre class="c" name="code">SELECT NAME, KUBUN, VESION FROM [v_item] WHERE (([KUBUN] = @KUBUN) AND ([VESION] = @VESION))
我改成...
<pre class="c" name="code">SELECT NAME, KUBUN, ISNULL(VESION, ' ') VESION FROM [v_item] WHERE (([KUBUN] = @KUBUN) AND (ISNULL(VESION, ' ') = @VESION))
應用ISNULL()函數將NULL值轉成空白字元。
修改SelectCommand後執行結果如下:
整個程式碼如下:
<pre class="c" name="code"><asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1" DataTextField="kubun" DataValueField="kubun">
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource2" DataTextField="vesion" DataValueField="vesion">
</asp:DropDownList>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource3">
<Columns>
<asp:BoundField DataField="NAME" HeaderText="NAME" SortExpression="NAME" />
<asp:BoundField DataField="KUBUN" HeaderText="KUBUN" SortExpression="KUBUN" />
<asp:BoundField DataField="VESION" HeaderText="VESION" SortExpression="VESION" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TestConnectionString %>" SelectCommand="SELECT DISTINCT [kubun] FROM [v_item]"></asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:TestConnectionString %>" SelectCommand="SELECT [kubun], ISNULL([vesion], ' ') VESION FROM [v_item] WHERE ([kubun] = @kubun)">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="kubun" PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:TestConnectionString %>" SelectCommand="SELECT NAME, KUBUN, ISNULL(VESION, ' ') VESION FROM [v_item] WHERE (([KUBUN] = @KUBUN) AND (ISNULL(VESION, ' ') = @VESION))">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="KUBUN" PropertyName="SelectedValue" />
<asp:ControlParameter ControlID="DropDownList2" Name="VESION" PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
你可以看到我只修訂的SelectCommand。
從資料庫或SQL語句來處理NULL值,不僅很方便就能完成,而且也不用在ASP.NET/C#中刻一堆不容易看得懂的程式。
以上,提供你參考。
您好:
如果您透過 SqlDataSource來作(把資料呈現在Gridview裡面)
因為有一個 CancelSelectOnNullParameter屬性(預設為true),會導致「不運作」
就算您關閉(=false)也是一樣
這時候就得自己寫程式處理囉
我不知道有沒有把這一段文章分享出來?
您找一下這篇的內容看看
http://www.dotblogs.com.tw/mis2000lab/archive/2010/06/07/asp_net_search_engine_sample_2010.aspx
就算自己寫,也很簡單啦