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

Posted

技术标签:

【中文标题】SelectedValue 无效,因为它不存在于项目列表中【英文标题】:SelectedValue which is invalid because it does not exist in the list of items 【发布时间】:2010-11-25 18:04:18 【问题描述】:

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

以下是一些重要信息:

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

【问题讨论】:

异常发生在哪一行?信息片段 #5 暗示每条语句都会毫无例外地执行。 【参考方案1】:

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

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();

【讨论】:

这是唯一对我有用的解决方案。我从来没有意识到股票 ddl 有多么可怕 我创建了一个从下拉列表中派生的类,并覆盖了 DataSource 属性的 Set 来调用这些东西,这样我就不必记住在所有地方都这样做了,它的工作原理就像魅力。谢谢! 它也对我有用。但我陷入了异端的想法“创建 DropDownList 类的新实例并将其分配给相同的 ID 不是更容易吗?”叹息。 listOrgs.Items.Clear(); listOrgs.SelectedIndex = -1; listOrgs.SelectedValue = null; listOrgs.ClearSelection(); 经过一些实验后,我能够将这些行减少为:listOrgs.Items.Clear(); listOrgs.SelectedValue = null; 我仍然不明白为什么这些语句中的一个还不够 您好,它也为我工作。我仍然无法得到任何人可以解释的真正原因是什么??【参考方案2】:

我不断收到此错误。 奇怪的是,在我设置数据源并在删除项目后重新绑定之前 selected index = -1.

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

所以即使它已经 -1 设置为 -1 也会阻止它出错。

很奇怪吧?

【讨论】:

这证明了这个控件设计的潜在疯狂。 我也有同样的经历!我首先做了ddl.ClearSelection(),它清除了选定的值和索引。但我还是得到了错误。但是,当我明确设置 ddl.SelectedIndex = -1ddl.SelectedValue = null 时,它可以工作! ??? 这对我有用。绝对荒谬。谢谢【参考方案3】:

刷新DataSource后尝试设置listOrgs.SelectedValue = "0"

此时您正尝试选择空列表中的第一项。

【讨论】:

【参考方案4】:

用这个改变前两行:

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

【讨论】:

设置 SelectedItem.Selected = false 会抛出异常 有什么异常?也许你应该在绑定之前再次实例化你的下拉列表:listOrgs = new DropDownList();【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

然而,在实验过程中,我突然想到了为什么我首先会遇到错误。

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

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

所以我误解了 text 属性的作用。

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

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

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

【讨论】:

【参考方案9】:

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

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

在设置时,

我正在尝试捕获,在捕获中我将值设置为 -1

【讨论】:

以上是关于SelectedValue 无效,因为它不存在于项目列表中的主要内容,如果未能解决你的问题,请参考以下文章

列 'CM.PfmFolder.Id' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中

列的原因在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中[重复]

SQL:选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中[关闭]

列“在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中”]]

列在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。[ntext] [重复]

ORDER BY 子句中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中