2017-07-06 175 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; 
       } 
      } 
     } 
    }