iT邦幫忙

0

ASP.NET dropdownlist 如何取空值

接續前一篇後的問題 http://ithelp.ithome.com.tw/question/10175295
有dropdownlist1,dropdownlist2 兩個下式選單,選定完後顯示在gridview表格,
但dropdownlist2 有null值,該如何可以對應,讓gridview 能夠顯示..

請大家不吝指教,謝謝!!

2 個回答

0
賽門
iT邦超人 1 級 ‧ 2015-08-21 13:36:32
最佳解答

基本上,如果從資料庫撈出來的資料有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#中刻一堆不容易看得懂的程式。
以上,提供你參考。

hans2012 iT邦新手 5 級 ‧ 2015-08-21 16:28:21 檢舉

是的,解決了!!

感謝S 大 ~~

0
mis2000lab
iT邦好手 1 級 ‧ 2015-08-21 10:27:32

您好:

如果您透過 SqlDataSource來作(把資料呈現在Gridview裡面)
因為有一個 CancelSelectOnNullParameter屬性(預設為true),會導致「不運作」

就算您關閉(=false)也是一樣
這時候就得自己寫程式處理囉

我不知道有沒有把這一段文章分享出來?

您找一下這篇的內容看看
http://www.dotblogs.com.tw/mis2000lab/archive/2010/06/07/asp\_net\_search\_engine\_sample\_2010.aspx
就算自己寫,也很簡單啦

hans2012 iT邦新手 5 級 ‧ 2015-08-21 16:33:01 檢舉

感恩m大,目前可以走到這一步也是看您的書練的,後置程式碼還在努力學,謝謝提供資訊!!

我要發表回答

立即登入回答