2013-05-21 41 views
2

我有一个情况,我有一个从允许编辑的sql表填充的gridview。对于其中一个字段,我拥有它,用户必须从GridView的编辑模板中的下拉框中选择一个值。将DropDownList SelectedValue设置为一个有时为空值的绑定字段

<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 

我怎么能在这种情况下,占空或空值,而且使这项工作?

回答

1

你是你的DropDownList绑定到你的GridView的数据源命名为“系”字段:

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

这是一种黑客攻击的,但你可以修改填充你的GridView的部门领域查询账号为空值(由聚结出来):

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

然后再补充,作为一种在下拉列表中选择“默认”选项:

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

我真的很喜欢这个想法,它会做我想做的。虽然编辑Select语句后,出现错误: DataBinding:'System.Data.DataRowView'不包含名为'Department'的属性。 'SelectCommand =“SELECT ID,COALESCE(Department,'No department'),Notes FROM Departments”' –

+0

编辑注释... –

+0

我的不好,你需要别名列@ @ kyle_13。 'COALESCE(部门,'没有部门')AS Department' – jadarnel27

1

听起来好像您正在尝试更新不存在的记录。所以,你有几个选择,取决于你想要做什么。您可以捕获该错误并向用户显示一个用户友好的警报,以便在编辑之前需要创建一条新记录。或者,如果错误发生,您可以捕获该错误并运行插入命令。或者你可以防止错误发生在一起。这是我的建议。在后面的代码中,当dropdowlist事件触发时,请带上ID并运行查询以查看记录是否存在。如果是,请更新它。如果没有,请提醒用户,或者您可以直接插入。如果您有关于如何做到这一点的具体问题,请告诉我。

+0

嗨@jason,谢谢。我基本上试图做的是,如果字段实际上是空值,那么在更新记录时拉入空的“空白”值,然后用下拉菜单中新输入的值更新记录。没有jadarnel27的解决方法,它会抛出错误。 –

相关问题