0

关于dropdownlist的有一个无效 SelectedValue的错误

by 刘武 29. 六月 2010 20:49

使用dropdownlist控件时,如果给SelectedValue赋了一个不存在的值,则会抛出一个异常,提示该控件“有一个无效 SelectedValue,因为它不在项目列表中”。

为了解决这个问题,可以先检查一下dropdownlist的选项,不过那样太麻烦,也不具备通用性,笔者选择了重写该控件,以下是相关的代码:

public class MyDropDownList :DropDownList
{
    public string ExceptionItemText
    {
        get
        {
            if (ViewState["ExceptionItemText"] == null)
                return "-----";
            return ViewState["ExceptionItemText"].ToString();
        }
        set
        {
            ViewState["ExceptionItemText"] = value;
        }
    }

    public string ExceptionItemValue
    {
        get
        {
            if (ViewState["ExceptionItemValue"] == null)
                return "0";
            return ViewState["ExceptionItemValue"].ToString();
        }
        set
        {
            ViewState["ExceptionItemValue"] = value;
        }
    }

    public override string SelectedValue
    {
        get
        {
            return base.SelectedValue;
        }
        set
        {
            try
            {
                base.SelectedValue = value;
            }
            catch (ArgumentOutOfRangeException)
            {
                ListItem itm = new ListItem(ExceptionItemText, ExceptionItemValue);                  
                Items.Insert(0, itm);
                SelectedIndex = 0;
            }
        }
    }

    protected override void OnDataBinding(EventArgs e)
    {
        try
        {
            base.OnDataBinding(e);
        }
        catch (ArgumentOutOfRangeException)
        {
            ListItem itm = new ListItem(ExceptionItemText, ExceptionItemValue);               
            Items.Insert(0, itm);
            SelectedIndex = 0;
        }
    }


}

此处重载了SelectValue属性和OnDataBinding方法,目的是为了兼容两种情况:

一种情况是直接给控件赋值,比如ddl.SelectedValue="0"。

另一种情况是在绑定的时候赋值,比如<asp:DropDownList SelectedValue='<%#Bind("value")%>' > 。

当然你也可以根据自己的需要编写特定的业务逻辑,这里就不再详述。

Tags:

技术生涯

评论

添加评论


(将显示你的Gravatar图标)

biuquote
  • 评论
  • 在线预览
Loading



Powered by BlogEngine.NET 1.6.1.9  登录
Original Design by Laptop Geek, Adapted by onesoft