无法在页面加载中设置下拉列表选择值

时间:2010-06-03 04:31:18

标签: c# asp.net

我正在尝试在页面加载期间设置ddl的选定值,即。在databind之前。

这会导致“所选值不存在”错误。所以我强制一个数据绑定,并添加一个新元素,如果它在数据源中不存在。

但是,在页面生命周期的后期执行数据绑定时,我的添加元素将被删除/覆盖。

我是否在生命周期的错误部分设置了值? 我正在做的事似乎相当hackish,我认为我这样做是错误的...有更好的方法吗?

6 个答案:

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