2015-10-20 111 views
0

我在Windows 8.2中工作,并正在向我的数据库中插入选定的行,并且我有web窗体,其中有一个gridesview,并带有复选框来选择/取消选择要插入的事件。 web表单的代码是作为如何访问gridview的选中/选中行元素的元素

<asp:Panel runat="server" ID="pnlStudData"> 
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3"> 
     <Columns> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        <asp:checkbox runat="server" ID="chKCheckAll" onclick="javascript:SelectAllCheckboxes(this)"/> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <asp:CheckBox runat="server" ID="chkCheck" onclick="javascript:CheckedCheckboxes(this)"/> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Student Id"> 
       <ItemTemplate> 
        <asp:Label ID="lblStudName" runat="server" Text='<%#Eval("Stud_Id")%>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="First Name"> 
       <ItemTemplate> 
        <asp:Label ID="lblFirstName" runat="server" Text='<%#Eval("FirstName")%>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Middle Name"> 
       <ItemTemplate> 
        <asp:Label ID="lblMiddleName" runat="server" Text='<%#Eval("MiddleName")%>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Last Name"> 
       <ItemTemplate> 
        <asp:Label ID="lblLastName" runat="server" Text='<%#Eval("LastName")%>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Cumpase"> 
       <ItemTemplate> 
        <asp:Label ID="lblCumpase" runat="server" Text='<%#Eval("Cumpase")%>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="College"> 
       <ItemTemplate> 
        <asp:Label ID="lblCollege" runat="server" Text='<%#Eval("College")%>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Department"> 
       <ItemTemplate> 
        <asp:Label ID="lblDept" runat="server" Text='<%#Eval("Dept")%>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Block"> 
       <ItemTemplate> 
        <asp:Label ID="lblBlock" runat="server" Text='<%#Eval("Block")%>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Dorm Number"> 
       <ItemTemplate> 
        <asp:Label ID="lblDormNo" runat="server" Text='<%#Eval("Dorm")%>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
     <FooterStyle BackColor="White" ForeColor="#000066" /> 
     <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" /> 
     <RowStyle ForeColor="#000066" /> 
     <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /> 
     <SortedAscendingCellStyle BackColor="#F1F1F1" /> 
     <SortedAscendingHeaderStyle BackColor="#007DBB" /> 
     <SortedDescendingCellStyle BackColor="#CAC9C9" /> 
     <SortedDescendingHeaderStyle BackColor="#00547E" /> 
    </asp:GridView> 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    <br /> 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    <asp:Button ID="Save" runat="server" Text="Save" Width="169px" Height="46px" OnClick="Save_Click" /> 
     <br /> 
     <br /> 
     <br /> 
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
     <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    <br /> 
</asp:Panel> 

和Java脚本选择/取消选择一个复选框作为

<script language="javascript" type="text/javascript"> 
     function SelectAllCheckboxes(chk) 
     { 
      var totalRows = $("#<%=GridView1.ClientID%> tr").length; 
      var selected = 0; 
      $('#<%=GridView1.ClientID%>').find("input:checkbox").each(function() { 
       if (this != chk) { 
        this.checked = chk.checked; 
        selected += 1; 
       } 
      }); 
     } 
     function CheckedCheckboxes(chk) 
     { 
      if(chk.checked) 
      { 
       var totalRows = $('#<%=GridView1.ClientID %> :checkboxes').length; 
       var checked = $('#<%=GridView1.ClientID %> :checkbox:checked').length; 
       if(checked==(totalRows-1)) 
       { 
        $('#<%=GridView1.ClientID %>').find("input:checkbox").each(function() { 
         this.checked = true; 
        }); 
       } 
       else 
       { 
        $('#<%=GridView1.ClientID %>').find('input:checkbox:first').removeAttr('checked'); 
       } 
      } 
      else { 
       $('#<%=GridView1.ClientID %>').find('input:checkbox:first').removeAttr('checked'); 
      } 
     } 
</script> 

和按钮保存点击事件,它发送该选择的行细胞进行数据库类插入方法为

foreach(GridViewRow gd in GridView1.Rows) 
     { 
      if ((gd.Cells[0].FindControl("chkCheck") as CheckBox).Checked) 
      { 

       // gd.Cells[0].Visible = false; 
       string stId = gd.Cells[1].Text.ToString(); 
       string fName = gd.Cells[2].Text.ToString(); 
       string mName = gd.Cells[3].Text.ToString(); 
       string lName = gd.Cells[4].Text.ToString(); 
       string cumpas = gd.Cells[5].Text.ToString(); 
       string college = gd.Cells[6].Text.ToString(); 
       string dept = gd.Cells[7].Text.ToString(); 
       int bl = Convert.ToInt32(gd.Cells[8].Text); 
       int dormNo = Convert.ToInt32(gd.Cells[9].Text); 
       DbCon db = new DbCon(); 
       if (db.RegisterStud(stId, fName, mName, lName, cumpas, college, dept, bl, dormNo) == 1) 
       { 
        Label1.Text = "You Have Inserted"; 
       } 
        else 
        { 
         Label1.Text = "Errror"; 
        } 

      } 
      else { Label1.Text = "Please select a row"; } 
     } 

但我无法找到每个单元格值,也没有分配给那些字符串变量。

回答

0

使用<asp:TemplateField>时,数据不在单元格内,但包含在单元格内的控件中。

row.Cells[].Text仅当使用<asp:BoundField>作为GridView列时才起作用。

因此,在使用<asp:TemplateField>时,有两个步骤来读取值:

  1. 访问内部单元的控制
  2. 访问从控制在步骤1

价值我看你做上述步骤已经从第一列读取复选框值。对所有其他列遵循相同的步骤。

if ((gd.Cells[0].FindControl("chkCheck") as CheckBox).Checked) 
{ 
     // Step 1: Access the Control inside Cell 
      Label lblName = (Label)gd.Cells[1].FindControl("lblStudName"); 

     // Step 2: Access the Value from Control in step 1 
      string Name = lblName.Text; 

    // Combine Step 1 & Step 2: Access Values in one line 

    string Name = ((Label)gd.Cells[1].FindControl("lblStudName")).Text; 
    string firstName = ((Label)gd.Cells[2].FindControl("lblFirstName")).Text; 

    // ....same way for all Columns which use a <asp:TemplateField> 

}