5

我有一个 asp.net dropDownList,它在页面加载时自动绑定到 sqlDataSource 到客户端类型的值。在页面加载时,我还创建了一个 Client 对象,它的属性之一是 ClientType。我试图根据Client对象的ClientType属性值设置ddl的SelectedValue失败。我收到以下错误消息“System.ArgumentOutOfRangeException:'ddlClientType' 的 SelectedValue 无效,因为它不存在于项目列表中”。我知道这是因为当我尝试设置所选值时列表尚未填充。有没有办法克服这个问题?谢谢!

4

2 回答 2

5

您必须使用 DataBound 事件,一旦数据绑定完成,它将被触发

protected void DropDownList1_DataBound(object sender, EventArgs e)
{
    // You need to set the Selected value here...
}

如果你真的想看到页面加载事件中的值,那么DataBind()在设置值之前调用方法......

protected void Page_Load(object sender, EventArgs e)
{
    DropdownList1.DataBind();
    DropdownList1.SelectedValue = "Value";
}
于 2011-07-19T12:07:43.043 回答
4

在设置选定值之前检查项目是否在列表中,然后按索引选择它

<asp:DropDownList id="dropDownList"
                    AutoPostBack="True"
                    OnDataBound="OnListDataBound"
                    runat="server />
protected void OnListDataBound(object sender, EventArgs e) 
{
    int itemIndex = dropDownList.Items.IndexOf(itemToSelect);
    if (itemIndex >= 0)
    {
      dropDownList.SelectedItemIndex = itemIndex;
    }
}

编辑:添加...

如果您在页面加载中进行绑定,请尝试按照以下方式进行操作:

  • DataBind()在覆盖方法中移动所有绑定相关代码
  • Page的Page_Load中添加:(控制的情况下不要直接调用DataBind,这是父页面的责任)
if (!IsPostBack)
{
   Page.DataBind(); // only for pages
}
于 2011-07-19T12:08:23.903 回答