dropdownlist设置选定的项

 

在ASP.NET 2.0 网站页面的开发过程中,经常需要把DropDownList等列表类控件的SelectedValue值设置为一个从数据库或其他地方读取出来的值。

最简单的办法就是直接进行指定:
DropDownList1.SelectedValue = "中国";
但有的时候如果DropDownList1中没有"中国"这一项的话,赋值就会出现异常:
异常详细信息: System.ArgumentOutOfRangeException: “DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中。

想要实现的目标:如果指定的值不在列表项中,则不设置选中项,而且不要抛出异常。


查看MSDN:
SelectedValue 属性还可以用于选择列表控件中的某一项,方法是用该项的值设置此属性。如果列表控件中的任何项都不包含指定值,则会引发 System.ArgumentOutOfRangeException。

但奇怪的是这样赋值在大部分情况下都不会出错,只是偶尔会出错,通过反射查了一下SelectedValue的实现,找到了原因。
public virtual string SelectedValue
{
      get
      {
            int num1 = this.SelectedIndex;
            if (num1 >= 0)
            {
                  return this.Items[num1].Value;
            }
            return string.Empty;
      }
      set
      {
            if (this.Items.Count != 0)
            {
                  if ((value == null) || (base.DesignMode && (value.Length == 0)))
                  {
                        this.ClearSelection();
                        return;
                  }
                  ListItem item1 = this.Items.FindByValue(value);
                  if ((((this.Page != null) && this.Page.IsPostBack) && this._stateLoaded) && (item1 == null))
                  {
                        throw new ArgumentOutOfRangeException("value", SR.GetString("ListControl_SelectionOutOfRange", new object[] { this.ID, "SelectedValue" }));
                  }
                  if (item1 != null)
                  {
                        this.ClearSelection();
                        item1.Selected = true;
                  }
            }
            this.cachedSelectedValue = value;
      }
}

原来只有在页面是IsPostBack的情况下,赋值才会出错。


另外这样写也会出现异常:
DropDownList1.Items.FindByValue("中国").Selected = true;
最后找到了一种方法可以实现上面的要求:
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("中国"));
就是如果通过FindByValue没有找到指定项则为null,而Items.IndexOf(null)会返回-1


资料引用:http://www.knowsky.com/343443.html

转载于:https://www.cnblogs.com/qqnnhhbb/articles/1333452.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值