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

时间:2009-09-04 19:33:44

标签: asp.net data-binding

我反复遇到这个问题,并且不知道造成它的原因。我在DataBind中遇到异常:SelectedValue which is invalid because it does not exist in the list of items

以下是一些重要的信息:

  1. 我在基础数据发生变化时定期重新加载listOrgs。
  2. Organization.DTListAll调用返回2个Int,String对。
  3. 返回的数据中没有重复或空值
  4. 在下面的前两行之后,listOrgs.Items.Count为0,且Selected Value为0
  5. DataBind操作执行后的选定值是数据
  6. 中第一行的ID值
  7. 在新页面加载后第一次执行此代码时会发生此异常
  8. listOrgs.Items.Clear(); 
    listOrgs.SelectedValue = "0"; 
    listOrgs.DataSource = new Organization().DTListAll(SiteID); 
    listOrgs.DataTextField = "OrganizationName"; 
    listOrgs.DataValueField = "OrganizationID"; 
    listOrgs.DataBind();
    

9 个答案:

答案 0 :(得分:58)

显然我发布的解决方案并不完全有效......最终在我的应用程序中我改为:

listOrgs.Items.Clear();
listOrgs.SelectedIndex = -1;
listOrgs.SelectedValue = null;
listOrgs.ClearSelection();     // Clears the selection to avoid the exception (only one of these should be enough but in my application I needed all..)
listOrgs.DataSource = new Organization().DTListAll(SiteID);
listOrgs.DataTextField = "OrganizationName"; 
listOrgs.DataValueField = "OrganizationID"; 
listOrgs.DataBind();

答案 1 :(得分:7)

我一直收到这个错误 奇怪的是,在我设置数据源并在删除项目后重新绑定 selected index = -1

如果我明确设置selectedIndex = -1;,那么它可以正常工作并且不会抛出错误。

所以即使它已经-1,将其设置为-1也可以防止它出错。

很奇怪呃?

答案 2 :(得分:3)

刷新listOrgs.SelectedValue = "0"

后尝试设置DataSource

目前您正在尝试选择空列表中的第一项。

答案 3 :(得分:1)

如果你还有这个问题,我就是这样解决的:

listOrgs.SelectedIndex = -1;    // Clears the SelectedIndex to avoid the exception
listOrgs.DataSource = new Organization().DTListAll(SiteID);
listOrgs.DataTextField = "OrganizationName"; 
listOrgs.DataValueField = "OrganizationID"; 
listOrgs.DataBind();            //Unless you have "listOrgs.AppendDataBoundItems = true" you don't need to clear the list

答案 4 :(得分:1)

不确定是你的情况,但我有同样的问题,显然没有解释,然后我意识到在数据库字段的记事本上复制并粘贴,在值的开头有一个NULL。

奇怪的是,选择的连接表正在运行。在工作正常后,我删除了行并重新插入。

答案 5 :(得分:1)

@PMarques的回答帮助了我并解决了我的问题。

然而,在进行实验时,它点击了我的脑袋,为什么我首先得到错误。

我正在设置" Text"属性认为它可能为我创建一个包含标签或字段集+图例(它没有)。

列表的Text property实际上是ListControl的SelectedValue属性。

所以我错误地解释了文本属性的作用。

答案 6 :(得分:0)

用这个改变前两行:

listOrgs.SelectedItem.Selected = false; 
listOrgs.Items.Clear(); 

答案 7 :(得分:0)

我反复得到相同的错误,并尝试通过不将默认选择值设置为索引-1来结束。

我评论了我的代码ddlDRIBidAmt.SelectedValue = -1

此值是在我的页面控件重置为默认值时设置的。

答案 8 :(得分:0)

我知道回答太晚了,但我尝试的是一个肮脏的解决方案,但它有效。 在数据绑定之后,我在索引0处插入一个项目

ddl.Items.Insert(0, new ListItem("---Select---","-1"));

在设置上,

我正在放置try catch,在catch我将Value设置为-1