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 = -1
和 ddl.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子句中”]]