我的一个ascx控件里就只有一个下拉菜单,然后根据数据库内容取值,然后在页面上,我想让其中的一项默认选中,我使用
DropDownList nation=(DropDownList)this.nation.Controls[0];
nation.Items.FindByValue(dt.Rows[0]["nation"].ToString()).Selected=true;这样没有问题的但是另外一个ascx控件,里面有两个下拉菜单,是省市无刷新联动菜单,值也是根据数据库内容取的,在页面上我想让某项默认选中,比如这两个菜单分别的默认选中湖北-武汉,我使用
DropDownList nation=(DropDownList)this.nation.Controls[0];
nation.Items.FindByValue(dt.Rows[0]["nation"].ToString()).Selected=true;这样就提示“未将对象引用设置到对象实例”,然后我调试了一下,发现下拉菜单的值是空的,也就是说这个下拉菜单没有初始化,为什么会没有初始化呢,我想不明白了,如果我不写这两句代码,这个ascx控件是正常的搞不定了,寻求高手,在一个ascx控件里有两个下拉菜单,他们是联动的省市菜单,这时候我怎么在页面上让某项默认选中噢,请给出语法,谢谢

解决方案 »

  1.   

    for (int i = 0; i < nation.Item.Count; i ++)
    {
      if (nation.Item[i].Text == "湖北")
          nation.Item[i].Selected = true;
    }
      

  2.   

    你要清楚页面的生命周期。Page_Load在事件处理之前执行,详细信息参考微软的帮助。你在完成这个任务之前先要确定绑定顺序:
    1、先绑定主Drp
    2、设置主Drp的默认值,根据主Drp的默认值绑定从drp,之后再设置从drp的默认值。在设置默认值之前需要先判断是否存在这个默认值。比如这一句可能就有问题:
    nation.Items.FindByValue(dt.Rows[0]["nation"].ToString()).Selected
    FindByValue(dt.Rows[0]["nation"].ToString())这个结果可能是null,因为你这里没有检查也不能保证一定存在。此时在使用Selected就会现上面的错。