我在Gridview中用模板绑定一列checkbox,可是当我选中checkbox时在按钮事件中获取不到该checkbox的状态,checked始终为False另外我的Gridview中放在updatepanel里的
部分代码:<asp:TemplateField>
                        <ItemTemplate>
                            <asp:CheckBox ID="CheckBox1" runat="server"  />
                        </ItemTemplate>
                    </asp:TemplateField>
             foreach (GridViewRow row in grid_1.Rows)
        {
            index = (int)grid_1.DataKeys[row.RowIndex].Value;
            bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;//这里始终为False,但在页面上我已经选择了
.....
}          

解决方案 »

  1.   

    bool.Parse(dataGridView1.CurrentCell.Value.ToString())
      

  2.   

     会不会是你的row.RowIndex的问题?
      

  3.   

    checkBox cbx=((CheckBox)gridview.row[行索引].FindControl("CheckBox1"));
    cbx.checked=true;这样试下..
      

  4.   

    还有一个,你把那个checkBox是AutoPostBack的属性改为true
      

  5.   

    前台:
    <asp:UpdatePanel ID="UpdatePanel2" runat="server" 
            ChildrenAsTriggers="False" UpdateMode="Conditional">
            <ContentTemplate>
               <asp:GridView ID="grid_1" runat="server" Width="778px" 
            AllowPaging="True" CellPadding="4" 
            onpageindexchanging="grid_1_PageIndexChanging" PageSize="20" AllowSorting="True" onsorting="grid_1_Sorting" 
            DataKeyNames="nSubObjectID" onrowcommand="grid_1_RowCommand" BackColor="White" 
                    BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" 
                    EmptyDataText="无数据,重新选择查询条件" >
                    <PagerSettings Position="TopAndBottom" />
                    <FooterStyle BackColor="#001F60" ForeColor="#D9E6FF" />
                    <RowStyle BackColor="White" ForeColor="#003399" />
                    <Columns>
     
                           <asp:TemplateField>
                            <ItemTemplate>
                                <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True"  />
                            </ItemTemplate>
                        </asp:TemplateField>
                        
                        <asp:TemplateField HeaderText="序号" >
                            <ItemTemplate>
                                <asp:Label ID="lblIndex" runat="server" Text='<%#Container.DataItemIndex+1 %>'></asp:Label>
                            </ItemTemplate >
                        </asp:TemplateField>
     
                        <asp:HyperLinkField  DataNavigateUrlFields="nSubObjectID"
                            DataTextField="姓名" DataNavigateUrlFormatString="studentinfo.aspx?nSubObjectID={0}" 
                            Target="_blank" HeaderText="姓名" />
     
                    </Columns>
                    <PagerStyle BackColor="#D9E6FF" ForeColor="#003399" HorizontalAlign="Left" />
                    <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
                    <HeaderStyle BackColor="#001F60" Font-Bold="True" ForeColor="#CCCCFF" />
                    <AlternatingRowStyle BackColor="#D9E6FF" />
        
                </asp:GridView>
                <asp:CheckBox ID="chk_qx" runat="server" AutoPostBack="True" 
                    oncheckedchanged="chk_qx_CheckedChanged1" Text="全选" />
                <asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="取消" /> <asp:Button ID="Button4" runat="server" onclick="Button4_Click" Text="Button" />
    <br />
    <br />
            </ContentTemplate>
        </asp:UpdatePanel>后台:
      protected void Button4_Click(object sender, EventArgs e)
        {
            ArrayList categoryIDList = new ArrayList();
            int index = -1;
            foreach (GridViewRow row in grid_1.Rows)
            {
                index = (int)grid_1.DataKeys[row.RowIndex].Value;
                bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;////这里始终为False,但在页面上我已经选择了        }
        }
      

  6.   

    Page_Load中有没有加
    if(!page.ispostback)
    {}
      

  7.   

    试试(CheckBox)gridview1.Rows[i].Cells[0].Controls[1] 如果你的checkbox不在第一列,修改Cells[0]即可,从0开始的索引. 
      

  8.   

    checkBox cbx=((CheckBox)gridview.rows[行索引].FindControl("CheckBox1"));
    bool result = cbx.Checked;
    跟踪得到上面cbx的text="" checked=false
      

  9.   

    应该是提交了之后又重新绑定了一次GridView造成的  
    看看Page_Load中绑定GridView的地方又有判断 当!Page.IsPostBack的时候再去绑定
      

  10.   

    Grivew 里面的CheckBox状态在后台是不能保存的。我以前遇到过,我都是在前台遍历被选中的ID行记录在隐藏域里面然后后台得取的。不要浪费时间,这个只能在前台做
      

  11.   

    zhangfubo3..已经说了。。你把你数据绑定的代码发出来看看
      

  12.   

    你单步调试看看呢...首先你得先看有没有得到checkbox.
      

  13.   

    给 CheckBox 控件的 AutoPostBack 设置成 true
    然后在 protected void Page_Load(object sender, EventArgs e) 事件中 写入
    if(!Page.IsPostBack)
        GridView1.DataBind();
    就可以用
       var cbox = (CheckBox)CustomerInf.Rows[i].FindControl("DeleteThis")
           cbox.Checked
    得到Checked属性的值了。
      

  14.   

    将数据表同Gridview的绑定放在Page_PreRender中。确保读取checkbox状态前,Gridview未刷新。
      

  15.   

    感觉都不对啊,我的Checkbox的状态也无法获取,什么数据绑定、什么IsPostBack都不是问题。
    加个AutoPostBack到时可以,但是每次点击都刷新,我又没用Ajax,这真让人心烦!跟奇怪的是,加了AutoPostBack的CheckBox居然在第一次点击时无效,附带页面刷新,之后的点击才正常。
    没办法,该死的Asp.net,我只能靠强大的javascript与隐藏域了。