我正在尝试在页面加载期间设置ddl的选定值,即。在databind之前。
这会导致“所选值不存在”错误。所以我强制一个数据绑定,并添加一个新元素,如果它在数据源中不存在。
但是,在页面生命周期的后期执行数据绑定时,我的添加元素将被删除/覆盖。
我是否在生命周期的错误部分设置了值? 我正在做的事似乎相当hackish,我认为我这样做是错误的...有更好的方法吗?
答案 0 :(得分:1)
不要在页面上执行此操作在ddl
的DataBound事件上执行此操作答案 1 :(得分:1)
您是否考虑过DDL的OnPreRender事件......我认为您将拥有在那里设置所选值的所有内容
答案 2 :(得分:0)
然而它看起来像什么时候 数据绑定稍后在执行 我添加的页面生命周期 元素被删除/覆盖。
这是可以预料的,数据绑定会清除项目并再次重新绑定它们。您应该查看正在调用DataBind的页面生命周期中的哪些点,并尝试设置选定的值。
您是否考虑过Page_PreRender设置SelectedValue?在完成所有初始化之后,这会在页面呈现给浏览器之前发生。 (希望你不会在Page_PreRender中进行任何数据绑定;))
但是将SelectedValue设置在一个地方只是为了再次覆盖它似乎不合逻辑,你应该只设置SelectedValue 一次 - 在最终的.DataBind()<之后/ p>
答案 3 :(得分:0)
然而它看起来像什么时候 数据绑定稍后在执行 我添加的页面生命周期 元素被删除/覆盖。
正如bgs264所说,这是设计数据绑定的行为。但是,如果您为DropDownList将AppendDataBoundItems
属性设置为true,则不会发生这种情况,您手动添加的项目将保留在原位。
<asp:DropDownList runat="server" id="MyDropDownList" AppendDataBoundItems="true" />
答案 4 :(得分:0)
我对此解决方案的解决方法如下:
在页面加载中:
Page_Load(..)
{
if(...)
{
hidCGroup.value = objCG.CName;
}
}
在DataBound中:
ddlContGroup_DataBound(..)
{
ddlContGroup.Items.Insert(0, "--Select--");
ddlContGroup.SelectedIndex = ddlContGroup.Items.IndexOf(ddlContGroup.Items.FindByText(hidCGroup.Value));
}
现在有两件事需要照顾。当您使用FindByText和FindByValue时,请始终特别注意您从ddl中选择的值。
有时,我们使用数字项作为DataValue,使用文本项作为DataText,当发生这种情况时,您需要交换FindByText和FindByValue,以便进行正确的选择。
希望这有帮助。
答案 5 :(得分:0)
ddlExample.SelectedIndex=ddlExample.Items.IndexOf(ddlExample.Items.FindByValue(ExampleID.ToString()));
或
ddlExample.SelectedIndex=ddlExample.Items.IndexOf(ddlExample.Items.FindByText(ExampleText.ToString()));