设置数据绑定DropDownList的SelectedValue

时间:2011-07-19 11:57:55

标签: c# asp.net drop-down-menu selectedvalue databound

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

2 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分: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_Load中添加:(如果控件不直接调用DataBind,则这是父页面的责任)
if (!IsPostBack)
{
   Page.DataBind(); // only for pages
}