2017-07-06 130 views
2

这是GridView的设计。嵌套gridview中的复选框操作

<asp:GridView ID="gmainrole" runat="server" OnRowDataBound="gmainrole_RowDataBound"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <input type="checkbox" id="chkavail" runat="server" checked='<%#Eval("checkstatus") %>' /> 
       &nbsp; 
       <asp:Literal ID="litstate" runat="server" Text='<%#Eval("areaname") %>'></asp:Literal> 
       <asp:Literal ID="lituserrole" runat="server" Text='<%#Eval("nid") %>' Visible="false"></asp:Literal> 
       <asp:GridView ID="subrole" runat="server" AutoGenerateColumns="false" OnRowDataBound="subrole_RowDataBound"> 
        <Columns> 
         <asp:TemplateField> 
          <ItemTemplate> 
           <asp:CheckBox ID="chk1vail" runat="server" Checked='<%#Eval("checkstatus") %>' /> 
           <asp:Literal ID="litstate" runat="server" Text='<%#Eval("areaname") %>'></asp:Literal> 
           <asp:Literal ID="lituserrole" runat="server" Text='<%#Eval("nid") %>' Visible="false"></asp:Literal> 
           <asp:DataList ID="glastrole" runat="server" GridLines="None" AutoGenerateColumns="false" OnItemDataBound="glastrole_ItemDataBound"> 
            <ItemTemplate> 
             <div> 
              <asp:CheckBoxList runat="server" ID="chklastrole"> 
              </asp:CheckBoxList> 
              &nbsp; 
                          <asp:Literal ID="Literal1" runat="server" Text='<%#Eval("areaname") %>'></asp:Literal> 
              <asp:Literal ID="litlast" runat="server" Text='<%#Eval("nid") %>' Visible="false"></asp:Literal> 
              <asp:DataList ID="ecounter" runat="server" GridLines="None" AutoGenerateColumns="false"> 
               <ItemTemplate> 
                <asp:CheckBoxList runat="server" ID="chklastrole"> 
                </asp:CheckBoxList> 

                &nbsp; 
                          <asp:Literal ID="Literal11" runat="server" Text='<%#Eval("areaname") %>'></asp:Literal> 
                <asp:Literal ID="litlast1" runat="server" Text='<%#Eval("nid") %>' Visible="false"></asp:Literal> 
               </ItemTemplate> 
              </asp:DataList> 
             </div> 
            </ItemTemplate> 
           </asp:DataList> 
           </table> 
          </ItemTemplate> 
         </asp:TemplateField> 
        </Columns> 
       </asp:GridView> 
       </td> 
        </tr> 
       </table> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

这GridView的是嵌套的GridView其中下两个级别DataLists和上部两个级别GridView的四个电平。我希望当用户检查名为subrole(级别2)的第二个GridView中的复选框时,DataList glastrole(级别3)和DataList ecounter(级别4)中的所有后续复选框都会为其特定级别2复选框检查其CheckBoxes。我会给你我到现在为止尝试过的代码,但事实是我甚至不知道如何解决这个问题。请帮忙!

回答

1

试试这个可以解决你的问题:

添加OnCheckedChanged财产<asp:CheckBox ID="chk1vail" OnCheckedChanged="Checked_Changed" runat="server" Checked='<%#Eval("checkstatus") %>' />

代码后面找到控制:

protected void Checked_Changed(object sender, EventArgs e) 
    { 
     // gets a row from GridView 
     GridViewRow subrole_row = ((CheckBox)sender).Parent as GridViewRow; 

     // get GridView 
     GridView subrole = subrole_row.Parent as GridView; 

     // find the datalist in GridView 
     DataList glastrole = subrole.Rows[subrole_row.RowIndex].FindControl("glastrole") as DataList; 

     glastrole.DataSource = glastrole_dt; // set your data to datalist 
     glastrole.DataBind(); // bind datalist 

     subrole.DataSource = subrole_dt; // set your data to gridview 
     subrole.DataBind(); // bind gridview 
    } 

    protected void glastrole_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
     if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) 
     { 
      GridViewRow subrole_row = ((DataList)sender).Parent as GridViewRow; 

      CheckBox chk1vail = subrole_row.FindControl("chk1vail") as CheckBox; 

      // find CheckBoxList in glastrole 
      CheckBoxList chklastrole = e.Item.FindControl("chklastrole") as CheckBoxList; 

      // find if checkbox is checked 
      if (chk1vail.Checked) 
      { 
       // here you can check all the CheckBoxList items 
       foreach (ListItem item in chklastrole.Items) 
       { 
        item.Selected = true; 
       } 
      } 


      // find DataList in glastrole 
      DataList ecounter = e.Item.FindControl("ecounter") as DataList; 

      ecounter.DataSource = ecounter_dt; // set your data to datalist 
      ecounter.DataBind(); // bind datalist 
     } 
    } 

    protected void ecounter_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
     if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) 
     { 
      DataList glastrole = ((DataList)sender).Parent as DataList; 
      DataList ecounter = glastrole.Parent as DataList; 

      GridViewRow subrole_row = ecounter.Parent as GridViewRow; 

      CheckBox chk1vail = subrole_row.FindControl("chk1vail") as CheckBox; 

      // find CheckBoxList in glastrole 
      CheckBoxList chklastrole = e.Item.FindControl("chklastrole") as CheckBoxList; 

      // find if checkbox is checked 
      if (chk1vail.Checked) 
      { 
       // here you can check all the CheckBoxList items 
       foreach (ListItem item in chklastrole.Items) 
       { 
        item.Selected = true; 
       } 
      } 
     } 
    }