c# asp.net list foreach checkboxlist

¿Cómo obtener los valores de los elementos seleccionados en CheckBoxList con foreach en ASP.NET C#?



(8)

Tengo una CheckBoxList como esta:

<asp:CheckBoxList ID="CBLGold" runat="server" CssClass="cbl"> <asp:ListItem Value="TGJU"> TG </asp:ListItem> <asp:ListItem Value="GOLDOZ"> Gold </asp:ListItem> <asp:ListItem Value="SILVEROZ"> Silver </asp:ListItem> <asp:ListItem Value="NERKH"> NE </asp:ListItem> <asp:ListItem Value="TALA"> Tala </asp:ListItem> <asp:ListItem Value="YARAN"> Sekeh </asp:ListItem> </asp:CheckBoxList>

Ahora quiero obtener el valor de los elementos seleccionados de este CheckBoxList usando foreach, y poner los valores en una lista.

Nota : preferiría que el código fuera corto.


Tenga en cuenta que prefiero que el código sea corto.

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

o con un simple foreach :

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

Si solo quieres el ListItem.Value :

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


¡Este hilo fue de lejos el mejor con muchos buenos ejemplos!

Una cosa con la que me encontré no fue ninguno de los ejemplos trabajados para mí y pasé horas de depuración, por todos los motivos del mundo no pude entender por qué logré obtener los valores seleccionados de mi lista de casillas de verificación. ¿Fue por causa de mi página maestra? ¿O porque estaba usando ModalPopup con AjaxControlkit o iba en la dirección correcta al crear mi checkboxlist a partir de una consulta de base de datos?

Finalmente me di cuenta de que me había perdido una parte importante en todo esto ...

En mi código subyacente creé una lista de casilla de verificación desde sql db en mi evento Page_Load y en mi evento button_click obtuve todos los valores de checkboxlist, etc.

Así que cuando marqué algunas casillas de verificación y luego hice clic en mi botón, lo primero que sucedió fue que mi evento page_load recreó la lista de casillas de verificación, por lo que no se verificaron cuadros cuando ejecutó mis valores de casilla de verificación ... Me he perdido para agregar el evento page_load el if (! this.IsPostBack)

Espero que mi error y esta respuesta puedan ayudar a minimizar algunas horas de depuración para algunos.

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("<br>" + 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); }

Y el resultado fue el esperado, una lista separada de punto y coma para usar en una función de envío por correo:

[email protected]; [email protected]; [email protected]

Una respuesta larga a un pequeño problema. Tenga en cuenta que estoy lejos de ser un experto en esto y sé que hay mejores soluciones que esto, pero podría ayudar a algunos.


Buenas tardes, siempre puedes usar un pequeño LINQ para obtener los elementos de la lista seleccionados y luego hacer lo que quieras con los resultados:

var selected = CBLGold.Items.Cast<ListItem>().Where(x => x.Selected); // work with selected...


Para recargar en @Tim Schmelter, en el que recuperar la List<int> ,

List<string> selectedValues = CBLGold.Items.Cast<ListItem>() .Where(li => li.Selected) .Select(li => li.Value) .Select(int.Parse) .ToList();


Siguiendo el ejemplo de las sugerencias aquí, agregué un método de extensión para devolver una lista de los elementos seleccionados usando LINQ para cualquier tipo que Herede de System.Web.UI.WebControls.ListControl System.Web.UI.WebControls.ListControl .

Todos los objetos ListControl tienen una propiedad Items de tipo ListItemCollection . ListItemCollection expone una colección de ListItems , cada uno de los cuales tiene una propiedad Selected .

C Sharp:

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

Visual Basic:

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

Entonces, solo usa esto en cualquier idioma:

myCheckBoxList.GetSelectedItems()


foreach (ListItem item in CBLGold.Items) { if (item.Selected) { string selectedValue = item.Value; } }


List<string> values =new list<string>(); foreach(ListItem Item in ChkList.Item) { if(Item.Selected) values.Add(item.Value); }


string s= string.Empty for (int i = 0; i < Chkboxlist.Items.Count; i++) { if (Chkboxlist.Items[i].Selected) { s+= Chkboxlist.Items[i].Value + ";"; } }