页面上拖了一个CheckBoxList控件和ObjectDataSource,CheckBoxList通过ObjectDataSource从数据库的权限列表中把所有权限读取出来,但是我在Page_Load中写入下面代码,怎么都选不中protected void Page_Load(object sender, EventArgs e)
    {
       //前面代码省略       ////CheckBoxList控件勾选,读取权限
        string[] strTemp = employee[0].EmpLimits.Split('|');
        foreach (string str in strTemp)
        {
            for (int i = 0; i < cblLimits.Items.Count; i++)
            {
                if (this.cblLimits.Items[i].Value.ToString() == str)
                {
                    this.cblLimits.Items[i].Selected = true;
                }
            }
        }
    }
但是我再页面添加一个Button,然后把代码移动到Button_Click中去,运行后,点击按钮,就可以选中,真诡异!
我分析应该是程序执行时,先执行了Page_Load中的代码然后才去绑定ObjectDataSource的,所以代码放Page_Load中没有生效,请问大家这种情况怎么处理呢?

解决方案 »

  1.   

    ObjectDataSource从数据库中的权限表取出所有权限,让CheckBoxList控件显示,然后页面打开后,通过代码从员工表中取出所选员工的权限,再让CheckBoxList选中该员工所拥有的权限,但是ObjectDataSource绑定不是手写代码的,结果Page_Load先执行了,我晕
      

  2.   

    那就不要用ObjectDataSource
    自己寫代碼綁定CheckBoxList,寫到Page_Load中你給CheckBoxList賦值的前邊就行了
      

  3.   

    你在項目開發中還用ObjectDataSource嗎?
    個人感覺實際使用中還是自己寫代碼綁定的好
      

  4.   


    我接触C#没多久,但是为什么不用ObjectDataSource呢?有什么坏处吗?
      

  5.   

    我也不用ObjectDataSource,
    这个不太灵活
      

  6.   

    protected void Page_Load(object sender, EventArgs e)
        {
           //前面代码省略
          if(!Page.IsPostBack)
          {
           ////CheckBoxList控件勾选,读取权限
            string[] strTemp = employee[0].EmpLimits.Split('|');
            foreach (string str in strTemp)
            {
                for (int i = 0; i < cblLimits.Items.Count; i++)
                {
                    if (this.cblLimits.Items[i].Value.ToString() == str)
                    {
                        this.cblLimits.Items[i].Selected = true;
                    }
                }
            }
          }
        }
      

  7.   

    看楼主的意思好象就是将CheckBoxLis全部打勾,
    应该在CheckBoxLis的PreRender事件中进行:
    不太清楚楼主的代码,以下是将CheckBoxLis1全部打勾    protected void CheckBoxList1_PreRender(object sender, EventArgs e)
        {
            for (int i = 0; i < CheckBoxList1.Items.Count; i++)
            {
                CheckBoxList1.Items[i].Selected = true;
            }
        }另外用ObjectDataSource我的感觉非常好,特别是配合强类型的dataset,一个字"爽";
    常常会看到说ObjectDataSource不灵活?究竟那儿不灵活??
    恐怕说不灵活的,也没好好用过吧!!!!
      

  8.   


    不是全部打勾,有一个权限表,绑定CheckBoxList,是所有权限
    从页面的上一页传过来一个员工ID,根据ID读取员工表的权限字段EmpLimit,根据这个字段中包含的权限来对应CheckBoxList已绑定的项打勾勾