ASP.NET C # - Come posso impostare una proprietà pubblica per un CheckBoxList all'interno di un UserControl?
-
08-07-2019 - |
Domanda
Ho problemi a capirlo. Se ho un elenco di controllo all'interno di un controllo utente, come posso scorrere (o controllare davvero) quali caselle sono selezionate nell'elenco?
Come ho detto nel commento qui sotto, vorrei esporre gli elementi selezionati tramite una proprietà nel controllo stesso.
Soluzione
Dalla tua pagina puoi farlo
var checkboxes = (CheckBoxList)userControl1.FindControl("checkBoxList1");
Ma una soluzione migliore nella mia mente sarebbe quella di esporre gli elementi selezionati tramite una proprietà o un metodo.
Nel controllo utente
public string[] CheckedItems {
get {
List<string> checkedItems = new List<string>();
foreach (ListItem item in checkbox1.Items)
checkedItems.Add(item.Value);
return checkedItems.ToArray();
}
}
Quindi nella pagina
var checkedItems = userControl1.CheckedItems;
Potresti anche restituire checkbox1.Items
nella proprietà, ma non è un buon incapsulamento.
Altri suggerimenti
Se si utilizza .net 3.5, è possibile creare una proprietà di sola lettura che utilizza LINQ per restituire un IList dei soli valori selezionati:
public IList<string> SelectedItems{
get {
return checkbox1.Items.Cast<ListItem>.Where(i => i.Selected).Select(j => j.Value).ToList();
}
}