将DropDownList SelectedValue设置为有时为null值的绑定字段

时间:2013-05-21 14:41:59

标签: asp.net data-binding selectedvalue

我有一种情况,我有一个gridview,它是从允许编辑的sql表中填充的。对于其中一个字段,我有它,因此用户必须从gridview的编辑模板的下拉框中选择一个值。

<asp:TemplateField HeaderText="Department" SortExpression="Department">
                 <EditItemTemplate>
                     <asp:DropDownList ID="ddlEditDepartment" runat="server" 
                         SelectedValue='<%# Bind("Department") %>'>
                    <asp:ListItem>Department 1</asp:ListItem>
                    <asp:ListItem>Department 2</asp:ListItem>
                    <asp:ListItem>Department 3</asp:ListItem>
                     </asp:DropDownList>
                 </EditItemTemplate>
                 <ItemTemplate>
                     <asp:Label ID="lblDepartment" runat="server" Text='<%# Bind("Department") %>'></asp:Label>
                 </ItemTemplate>
            </asp:TemplateField>

如果您为该字段已经存储在表中的值的记录选择“编辑”,则没有问题。但是,如果您选择“编辑”并且表中没有值,则会出现以下错误

'ddlEditDepartment' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value

如何在这种情况下考虑空值或空值并使其有效?

2 个答案:

答案 0 :(得分:1)

听起来您正在尝试更新不存在的记录。所以,你有几个选择,这取决于你想做什么。您可以捕获错误并向用户显示他们在编辑之前创建新记录所需的用户友好警报。或者,您可以捕获错误并在出现错误时运行insert命令。或者你可以防止错误一起发射。这是我的建议。在您的代码中,当dropdowlist事件触发时,获取ID并运行查询以查看记录是否存在。如果是,请更新它。如果没有,要么警告用户,要么就可以进行插入。如果您有关于如何执行此操作的具体问题,请与我们联系。

答案 1 :(得分:1)

您将DropDownList绑定到GridView数据源中名为“Department”的字段:

SelectedValue='<%# Bind("Department") %>'

这是一种黑客行为,但您可以修改填充GridView的Department字段的查询以解释空值(通过合并它们):

SELECT COALESCE(Department, "No department entered") AS Department
FROM YourTable

然后在下拉列表中将其添加为“默认”选项:

<asp:ListItem>No department entered</asp:ListItem>