【问题标题】:Setting SelectedValue of a data bound DropDownList设置数据绑定 DropDownList 的 SelectedValue
【发布时间】:2011-07-19 11:57:54
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您必须使用 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";
    }
    

    【讨论】:

    • 我再次尝试使用 dataBound 事件,我不再收到错误消息但未选择该值。
    • 在使用 ddl.DataSourceID="" 之前,我已经尝试过您的第二个建议,但它没有用。我在没有 DataSourceID 的情况下再次尝试。我还有其他问题,例如数据中的尾随空格,并且在修剪后它终于起作用了。谢谢。
    【解决方案2】:

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

    <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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多