DataGrid--->DG
string strID = "";
        for (int i = 0; i < DG.Items.Count; i++)
        {
            CheckBoxList CheckBoxList1 = (CheckBoxList)DG.Items[i].FindControl("CheckBoxList1");
            foreach (ListItem li in CheckBoxList1.Items)
            {
                if (li.Selected)
                {
                    strID = strID + li.Value + ",";
                }
            }
        }
        Response.Write("<script>alert('" + strID + "');</script>");为什么就获取不到选中的值呢?

解决方案 »

  1.   

    估计你对DG的绑定是不管是否是IsPostback,都会去做一次,把你界面的选择的数据冲掉了
      

  2.   

    Postback时,不要去做DG的重新绑定操作,否则你的数据就没有了。
      

  3.   

    protected void Page_Load(object sender, EventArgs e)
        {
            BindData();
            if (!Page.IsPostBack)
            {
                BindBoxList();
            }
        }
    ----------------protected void btn_Click(object sender, EventArgs e)
        {
            BindBoxList();
            string strID = "";
    ....这样写的 应该怎么修改呢
      

  4.   

    哦你说的没有错  我这样就  if (!Page.IsPostBack) 
            { BindData(); 
                BindBoxList(); 
            } 可以了
    帮我看下
    protected void DataGrid1_PageIndexChanged(object sender, DataGridPageChangedEventArgs e)
        {
            Hashtable table = new Hashtable();
            for (int i = 0; i < DataGrid1.Items.Count; i++)
            {
                CheckBoxList CheckBoxList1 = (CheckBoxList)DataGrid1.Items[i].FindControl("CheckBoxList1");
                ListItem li = (ListItem)CheckBoxList1.Items[i];
                table.Add(i, li.Selected);
            }
            ViewState["CheckBox"] = table;
            DataGrid1.CurrentPageIndex = e.NewPageIndex;
            DataGrid1.DataBind();
        }
    为什么说超出索引范围》?
      

  5.   

    for(int i = 0; i < DG.Items.Count-1; i++)减1试试
      

  6.   

    嗯 减一也是超出索引范围
    我这个就是网上说的  选中之后翻页还是选中的  所以用HashTable保存他,不知道是否正确
      

  7.   

    protected void DataGrid1_PageIndexChanged(object sender, DataGridPageChangedEventArgs e) 
        { 
            Hashtable table = new Hashtable(); 
            for (int i = 0; i < DataGrid1.Items.Count; i++) 
            { 
                
                CheckBoxList CheckBoxList1 = (CheckBoxList)DataGrid1.Items[i].FindControl("CheckBoxList1"); 
                ListItem li = (ListItem)CheckBoxList1.Items[i];             table.Add(i, li.Selected); 
            } 
            ViewState["CheckBox"] = table; 
            DataGrid1.CurrentPageIndex = e.NewPageIndex; 
            DataGrid1.DataBind(); 
        } 难道你的dg的items数目一定和checkboxlist的items数目一样吗?怎么就不判断下各自的个数是否不相等呢?
      

  8.   

    你那个i是dg的index啊,老大
    怎么又拿这个去取checkboxlist的item?难道两个的数据源一样的?
      

  9.   

    protected void Page_Load(object sender, EventArgs e) 
        { 
            
            if (!Page.IsPostBack) 
            { 
                BindData(); 
                BindBoxList(); 
            } 
        } 
      

  10.   

    兄弟什么眼神啊Checkboxlist是dg.Item[i]里的一个控件。
    然后又用这个i去取checkboxlist里的item,你认为没问题?
    假设dg的items是50个,在一个页面里显示的,那么你也认为在它的第30个item里的checkboxlist的item的数量一定会会大于或者等于30?只有这样才能不会报楼主的错误,否则就肯定报了。
      

  11.   

    嗯 i改为了0
    现在在OnItemDataBound事件
    for (int i = 0; i < DataGrid1.Items.Count; i++)
            {
                if (e.Item.ItemIndex >= 0 && ViewState["CheckBox"] != null)
                {
                    Hashtable table = (Hashtable)ViewState["CheckBox"];
                    CheckBoxList CheckBoxList1 = (CheckBoxList)DataGrid1.Items[i].FindControl("CheckBoxList1");
                    ListItem li = (ListItem)CheckBoxList1.Items[0];
                    li.Selected = bool.Parse(table[i].ToString());
                }
            }有问题   超出索引范围 为什么