<asp:GridView ID="GridView1" runat="server"  
  onrowdatabound="GridView1_RowDataBound"  
  DataKeyNames="fengineeringpartcode,frequency" AllowPaging="True"  
  EnableViewState="False" onpageindexchanging="GridView1_PageIndexChanging"  
  PageSize="2" onrowcommand="GridView1_RowCommand"  
  >
  <Columns>
  <asp:TemplateField>
  <ItemTemplate>
  <asp:CheckBox ID="cbSelect" runat="server" />   
  </ItemTemplate>
  </asp:TemplateField>
  </Columns>   
  <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
  </asp:GridView>
现在想点击窗口的确定按钮获取用户选择了哪几行, 每行的值是多少
protected void btn_Click(object sender, EventArgs e)
  {
    for (int i = 0; i < GridView1.Columns.Count; i++)   //这里GridView1.Columns.Count一直为1是怎么回事?明明有十多列的
}

解决方案 »

  1.   

    <asp:GridView ID="GridView1" runat="server"  
      onrowdatabound="GridView1_RowDataBound"  
      DataKeyNames="fengineeringpartcode,frequency" AllowPaging="True"  
      EnableViewState="False" onpageindexchanging="GridView1_PageIndexChanging"  
      PageSize="2" onrowcommand="GridView1_RowCommand"  
      >
      <Columns>
      <asp:TemplateField>
      <ItemTemplate>
      <asp:CheckBox ID="cbSelect" runat="server" />  
      </ItemTemplate>
      </asp:TemplateField>

      </Columns>  
      <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
      </asp:GridView>红色部分就一列,而且还是个复选框列。GridView1.Columns.Count是获取GridView中有几列,所以值为1是对的。GridView自动生成列的话,有个属性叫AutoGenerateColumns设置成true即可。如果不使用自动生成列,使用模板列的话,有多少列的话,那就得自己写,就像你的这个一样,只是你只有一列而已。
      

  2.   

    foreach (GridViewRow item in this.GridView1.Rows)
                {
                    HtmlInputCheckBox hicb = item.Cells[0].FindControl("cbSelect") as HtmlInputCheckBox;
                    if (hicb.Checked)
                    {..}
    }你循环的是列 不是行
    还有就是把页面上的<asp:CheckBox ID="cbSelect" runat="server" />   
    改成<input id="cbSelect" value='<%# Eval("id") %>' runat="server" visibletype="checkbox" />
      

  3.   

    你只绑定了一列当然count==1了
    另外,遍历rows寻找选择的行
      

  4.   

    foreach (GridViewRow item in this.GridView1.Rows)
      {
      HtmlInputCheckBox hicb = item.Cells[0].FindControl("cbSelect") as HtmlInputCheckBox;
      if (hicb.Checked)
      {..}
    }你循环的是列 不是行
    还有就是把页面上的<asp:CheckBox ID="cbSelect" runat="server" />   
    改成<input id="cbSelect" value='<%# Eval("id") %>' runat="server" type="checkbox" />
      

  5.   

    for (int i = 0; i < GridView1.Columns.Count; i++) //这里GridView1.Columns.Count一直为1是怎么回事?明明有十多列的
      

  6.   

    可是预览时GridView里的数据有十几列啊, 为什么GridView1.Columns.Count却为1列
      

  7.   

    可是预览时GridView里的数据有十几列啊, 为什么GridView1.Columns.Count却为1列
      

  8.   

    foreach (GridViewRow item in this.GridView1.Rows)
      {
      HtmlInputCheckBox hicb = item.Cells[0].FindControl("cbSelect") as HtmlInputCheckBox;
      if (hicb.Checked)
      {..}
    }你循环的是列 不是行
    还有就是把页面上的<asp:CheckBox ID="cbSelect" runat="server" />   
    改成<input id="cbSelect" value='<%# Eval("id") %>' runat="server" visibletype="checkbox" />
     
     
      

  9.   

    行的问题已经解决,
    现在想知道
    为什么预览时GridView显示的是十多列
    这里GridView1.Columns.Count一直为1是怎么回事?明明有十多列的
    我想知道怎样获取当前有多少列
      

  10.   

    不要使用自动生成字段 
    gridview属性 AutoGenerateColumns="false"
    所有字段全部换成自己手写
    <asp:TemplateField>
    <ItemTemplate>
    <asp:CheckBox ID="cbSelect" runat="server" /> 
    </ItemTemplate>
    </asp:TemplateField>
      

  11.   

    this.GridView1.Rows这个就可以获取有多少行数据
      

  12.   

    <asp:TemplateField>
      <ItemTemplate>
      <asp:CheckBox ID="cbSelect" runat="server" />  
      </ItemTemplate>
      </asp:TemplateField>
    模板列只有一列啊
      

  13.   

    for (int i = 0; i < GridView1.Rows.Count; i++) 
      

  14.   

    模板列只有一列,它显示也应该是一列啊. 他显示的是十多列
    AutoGenerateColumns="true" 它显示了十多列,结果GridView1.Columns.Count只有一列