<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"  AllowPaging="True" 
OnPageIndexChanging="GridView1_PageIndexChanging" PageSize="15">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:CheckBox ID="chkSelect" runat="server" />
                            </ItemTemplate>
                            <HeaderTemplate>
                                <asp:CheckBox ID="ckAll" runat="server" Text="选择" OnCheckedChanged="ckAll_CheckedChanged" AutoPostBack="True" />
                            </HeaderTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="led_id" HeaderText="屏幕ID" />
                   </Columns>
</asp:GridView>为什么模板列中的ID,如chkSelect,ckAll在后台获得不到?还是我的代码有问题?

解决方案 »

  1.   

    因为你是在GridView1里添加的,生成后它的id就改变了,你可以查看下页面源码就会发现这个问题了
    解决办法是用FindControl方法在你对应的行里去找这个CheckBox
      

  2.   

     protected void ckAll_CheckedChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                CheckBox checkbox1 = (CheckBox)GridView1.Rows[i].FindControl("chkSelect");
                if (ckAll.Checked == true)
                {
                    checkbox1.Checked = true;
              
                }
                else
                {
                    checkbox1.Checked = false;
                }        }
        }我只是在后台使用,然后ckAll总是提示不存在
      

  3.   

    ckAll 也要CheckBox checkbox1 = (CheckBox)GridView1.Rows[i].FindControl("chkSelect");这样拿
      

  4.   

     
    for (int i = 0; i < this.GridView1.Items.Count; i++)
    {
         CheckBox cbox = (CheckBox)GridView1.Items[i].FindControl("chkSelect");
         if(cbox.Checked)
         {
              ....
         }
     }
      

  5.   

    谢谢
    解决办法是用FindControl方法在你对应的行里去找这个CheckBox