2008年11月8日 星期六

內嵌DropDownList, 欄位值為Null時怎麼辦

ASP.NET 2.0 小技巧

在GridView在編輯模式時內嵌DropDownList, 當對應的那筆資料欄位值為Null時怎麼辦?

這是在上ASP.NET 課程時同學問的問題.

 

欄位Null值時那個DropDownList 的SelectedValue無法對應到對的值, 所以網頁就會出現錯誤. 怎麼解決呢?

如果那個欄位不能設計成不可為Null值, 那只好在DropDownList裡多加一個可以給SelectedValue對應到的值.

作法是:

當Null值被對Building 到SelectedValue時, 那個值實際上是一個空字串.

所以可以在DropDownList的Items 加上一個項目, Text 為"請選擇", Value為空值.

<asp:ListItem Value="">請選擇</asp:ListItem>

而且必須設定DropDownList的AppendDataBoundItems屬性為"True", 整個TemplateField看起來像這樣:

<asp:TemplateField HeaderText="CategoryID" SortExpression="CategoryID">   
    <EditItemTemplate>
        <asp:DropDownList ID="DropDownList1"  runat="server"
            DataSourceID="SqlDataSource2" DataTextField="CategoryName"
             DataValueField="CategoryID" SelectedValue='<%# Bind("CategoryID") %>'
           AppendDataBoundItems="True">
            <asp:ListItem Value="">請選擇</asp:ListItem>
        </asp:DropDownList>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server"
            ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
            SelectCommand="SELECT [CategoryID], [CategoryName] FROM [Categories]">
        </asp:SqlDataSource>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("CategoryID") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

就可以了.

1

1 則留言: