0

尝试绑定数据时出现以下错误。

SelectedValue 无效,因为它不存在于项目列表中

<asp:DropDownList ID="DropDownList2" runat="server" 
     DataSourceID="JobCategoryEntityDataSource" DataTextField="ItemValue"
     DataValueField="ItemValue" SelectedValue='<%# Bind("JobCategory") %>' 
     Width="230px">
</asp:DropDownList>

我知道我收到此错误的原因。这是因为它无法在选择中找到值。当事务表中的 JohCategory 字段在来自 JobCategoryEntityDataSource 的列表中找不到它时,它只会抛出错误。

如果在下拉列表中找不到数据并且不想抛出错误,我想要做的就是不绑定数据。我怎样才能做到这一点 ?

另一种选择是如果找不到匹配的值,只需添加“请选择”或类似的内容。

有人可以帮忙吗?

4

2 回答 2

1

您可以在 的DataBound事件中选择值dropdown。您可以检查值是否存在,然后选择它,或者您可以实施try catch

<asp:DropDownList ID="DropDownList2" runat="server"
 DataSourceID="JobCategoryEntityDataSource" DataTextField="ItemValue"
 DataValueField="ItemValue" 
 Width="230px" OnDataBound="DropDownList2_DataBound">
</asp:DropDownList>

<asp:HiddenField ID="JobCategory" runat="server" value='<%# Bind("JobCategory") %>'></asp:HiddenField>

代码隐藏

protected void DropDownList2_DataBound(object sender, EventArgs e)  
{  
    try{
       HiddenField hf = (HiddenField)Form.FindControl("JobCategory");

       DropDownList2.SelectedValue = hf.Value;

    }Catch(Exception ex){

    }
}  
于 2013-01-27T07:29:04.270 回答
0

您需要将其绑定在后面的代码中,或者

  • 将语句包装在 try/catch 块中
  • 首先检查该项目是否存在,FindByName如果没有,则可以选择添加它。
于 2013-01-27T07:28:44.797 回答