Wie erhalten Sie Werte von ausgewählten Elementen in CheckBoxList mit foreach in ASP.NET C #?

Ich habe eine CheckBoxList wie folgt:

  TG   Gold   Silver   NE   Tala   Sekeh   

Jetzt möchte ich den Wert der ausgewählten Elemente aus dieser CheckBoxList mit foreach abrufen und die Werte in eine Liste einfügen.

Hinweis : Ich würde es vorziehen, wenn der Code kurz ist.

   

Beachten Sie, dass der Code eher kurz ist.

 List selected = CBLGold.Items.Cast() .Where(li => li.Selected) .ToList(); 

oder mit einer einfachen foreach :

 List selected = new List(); foreach (ListItem item in CBLGold.Items) if (item.Selected) selected.Add(item); 

Wenn Sie nur den ListItem.Value :

 List selectedValues = CBLGold.Items.Cast() .Where(li => li.Selected) .Select(li => li.Value) .ToList(); 

Guten Tag, du könntest immer ein wenig LINQ verwenden, um die ausgewählten Listenelemente zu erhalten und dann mit den Ergebnissen zu machen, was du willst:

 var selected = CBLGold.Items.Cast().Where(x => x.Selected); // work with selected... 
  foreach (ListItem item in CBLGold.Items) { if (item.Selected) { string selectedValue = item.Value; } } 

In Anlehnung an die Vorschläge hier habe ich eine Erweiterungsmethode hinzugefügt, um eine Liste der ausgewählten Elemente mit LINQ für einen beliebigen Typ, der von System.Web.UI.WebControls. ListControl geerbt wurde, zurückzugeben System.Web.UI.WebControls. ListControl System.Web.UI.WebControls. ListControl .

Jedes ListControl Objekt verfügt über eine Items Eigenschaft vom Typ ListItemCollection . ListItemCollection stellt eine Auflistung von ListItems , die jeweils über eine Selected Eigenschaft verfügen.

C Sharp:

 public static IEnumerable GetSelectedItems(this ListControl checkBoxList) { return from ListItem li in checkBoxList.Items where li.Selected select li; } 

Visual Basic:

  _ Public Function GetSelectedItems(ByVal checkBoxList As ListControl) As IEnumerable(Of ListItem) Return From li As ListItem In checkBoxList.Items Where li.Selected End Function 

Dann benutze einfach so in einer der beiden Sprachen:

 myCheckBoxList.GetSelectedItems() 

Um @Tim Schmelter aufzufüllen, um stattdessen die List ,

 List selectedValues = CBLGold.Items.Cast() .Where(li => li.Selected) .Select(li => li.Value) .Select(int.Parse) .ToList(); 
 string s= string.Empty for (int i = 0; i < Chkboxlist.Items.Count; i++) { if (Chkboxlist.Items[i].Selected) { s+= Chkboxlist.Items[i].Value + ";"; } } 
 List values =new list(); foreach(ListItem Item in ChkList.Item) { if(Item.Selected) values.Add(item.Value); } 

Dieser Thread war bei weitem der beste mit vielen guten Beispielen!

Eine Sache, in die ich hineingerannt bin, war keines der Beispiele, die für mich arbeiteten, und ich verbrachte Stunden des Debuggens, ich konnte aus allen Gründen in der Welt nicht verstehen, warum es mir gelang, die ausgewählten Werte aus meiner Checkbox-Liste zu bekommen. War es wegen meiner Masterseite? Oder weil ich ein ModalPopup mit AjaxControlkit verwendet habe oder ging ich beim Erstellen meiner Checkbox-Liste aus einer databaseabfrage richtig?

Ich habe endlich gemerkt, dass ich eine wichtige Rolle in all dem verpasst habe …

In meinem Codebehind habe ich eine Checkbox-Liste von sql db in meinem Page_Load-Event erstellt und in meinem button_click -Ereignis alle Get-Werte von checkboxlist usw.

Als ich also einige Checkboxen anklickte und dann auf meine Schaltfläche klickte, war das erste, was passierte, dass mein page_load-Event die checkboxlist neu erzeugte, also keine Kontrollkästchen aktiviert hatte, als es meine get checkbox-Werte auswertete … Ich habe es versäumt, das page_load-Event hinzuzufügen das if (! this.IsPostBack)

Ich hoffe, dass mein Fehler und diese Antwort helfen können, einige Debugging-Stunden für einige da draußen zu minimieren.

 protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { // db query and create checkboxlist and other SqlConnection dbConn = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnString"].ConnectionString); string query; try { query = "SELECT [name], [mail] FROM [users]"; dbConn.Open(); SqlDataAdapter da = new SqlDataAdapter(query, dbConn); DataSet ds = new DataSet(); da.Fill(ds); if (ds.Tables[0].Rows.Count != 0) { checkboxlist1.DataSource = ds; checkboxlist1.DataTextField = "name"; checkboxlist1.DataValueField = "mail"; checkboxlist1.DataBind(); } else { Response.Write("No Results found"); } } catch (Exception ex) { Response.Write("
" + ex); } finally { dbConn.Close(); } } } protected void btnSend_Click(object sender, EventArgs e) { string strChkBox = string.Empty; foreach (ListItem li in checkboxlist1.Value) { if (li.Selected == true) { strChkBox += li.Value + "; "; // use only strChkBox += li + ", "; if you want the name of each checkbox checked rather then it's value. } } Response.Write(strChkBox); }

Und die Ausgabe war wie erwartet, eine Semikolon getrennte Liste für mich in einer Mail-send-function zu verwenden:

  bill@contoso.com; jeff@corp.inc; sam@dot.net 

Eine lange Antwort auf ein kleines Problem. Bitte beachten Sie, dass ich weit davon entfernt bin, ein Experte zu sein und weiß, dass es bessere Lösungen als diese gibt, aber es könnte für einige hilfreich sein.