2016-04-19 13 views
1

Ich habe eine Seite, die eine Listenansicht dynamisch mit Checkboxen füllt, die auf einer Datenbank basieren. Der Text für die Kontrollkästchen entspricht den Benutzernamen aller Benutzer in der Datenbank. Ich versuche ein Steuerelement zu erstellen, in dem die Benutzernamen in den ausgewählten Kontrollkästchen gelöscht werden. Um dies zu tun, werde ich eine foreach-Schleife verwenden, die für jedes ausgewählte Kontrollkästchen innerhalb der ValidationGroup ausgeführt wird.Abrufen der ausgewählten Kontrollkästchenwerte aus einer ValidationGroup

Zuerst, hier ist der ASP.NET-Code, zeigt meine Vorgehensweise zum Formatieren der Seite.

 <asp:ListView ID="lvUsers" runat="server"> 
      <ItemTemplate> 
        <asp:CheckBox ID="chkUser" runat="server" Text='<%# Eval("UserName") %>' ValidationGroup="userCheck" /><br /> 
      </ItemTemplate> 
     </asp:ListView> 

Hier ist mein aktueller (gebrochen) Code, der zur Zeit versucht, eine foreach-Schleife für jedes Listview-Element zu laufen, wenn es nur eine foreach-Schleife für jede ausgewählte Option ausgeführt werden soll.

foreach (ListViewItem item in lvUsers.Items) //Trying to replace this with "for each selected checkbox within the userCheck ValidationGroup". 
    { 

     int UserID = 0; 

     String sqlStatement = "SELECT UserID FROM Users WHERE UserName = " + item; //This should be selecting where the UserName = the text value of each selected checkbox. 
     SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
     SqlCommand comm = new SqlCommand(sqlStatement, conn); 
     conn.Open(); 

     SqlDataReader Reader = comm.ExecuteReader(); 

     while (Reader.Read()) 
     { 
      UserID = (int)Reader["UserID"]; 
     } 

     Reader.Close(); 
     conn.Close(); 

     //Down here I delete all the connected values from various tables based on the value obtained from UserID above. 

     } 

Jede Hilfe auf diesem würde sehr geschätzt werden.

Antwort

2

die schöne Control Klasse von Jimmy gegeben Verwendung in Better way to find control in ASP.NET, können Sie die Kontrollkästchen rekursiv in der Listview abrufen und testen ihre ValidationGroup:

ControlFinder<CheckBox> finder = new ControlFinder<CheckBox>(); 
finder.FindChildControlsRecursive(lvUsers); 

foreach (CheckBox chkBox in finder.FoundControls) 
{ 
    if (chkBox.Checked && chkBox.ValidationGroup == "userCheck") 
    { 
     // Do something 
    } 
} 
+1

Danke, das war eine brillante Umsetzung, die einwandfrei funktioniert! Das klingt, als wäre es auch nützlich, um mein anderes Problem zu lösen, bei dem der Textwert aus den Checkboxen abgerufen wurde. Ich danke dir sehr! – user3530169

Verwandte Themen