32 messaggi dal 22 dicembre 2013
Ciao a tutti,
ho bisogno di impostare a selezionati tutti gli items di un checkboxlist in base a se gli items che contiene sono quelli passati da una stringa.
Mi spiego meglio: inizialmente in un altro punto del codice che non è postato setto una variabile stringa con un testo composto da diverse parole divise da una virgola; queste parole sono proprio i nomi degli elementi della lista del checkboxlist. Come vedete dal codice sotto setto words con tutte le parole, ed infine con il foreach le scorro tutte e di volta in volta gli dico di selezionare l'elemento con quel nome.
Il mio problema è che facendo cosi lui mi setta a selected solo l'ultimo elemento che scorro con il foreach e non tutti quelli che mi sarei aspettato nel caso words contenesse più di una parola.

Grazie!

CheckBoxList cbl = ((CheckBoxList)sender);
string[] separetors = { "," };
string[] words = scheck.Split(separetors, StringSplitOptions.RemoveEmptyEntries);
foreach (var word in words)
{
    cbl.SelectedValue = word;
}
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
usando il metodo Items.FindByValue puoi andare ad ottenere i singoli elementi della lista ed impostare, per ognuno, la proprietà Selected a true.
foreach (var word in words)
{
    cbl.Items.FindByValue(word).Selected = true;
}


Se hai anche la necessità di deselezionare le checkbox non presenti in lista, allora enumera gli items e setta la Selected su ciascuno.
foreach (ListItem item in cbl.Items)
{
    item.Selected = words.Contains(item.Value);
}


ciao,
Moreno

Enjoy learning and just keep making
32 messaggi dal 22 dicembre 2013
Ti ringrazio per la risposta ma adesso ho un altro problema che non mi permette di verificare se la modifica che mi hai detto funziona o meno.
Il problema è che il codice postato appartiene all'evento onload della checkboxlist i cui item vengono generati avendogli associato un sqldatasorce per recuperare tali voci da un db. Il problema è che adesso se scrivo il codice come me lo hai suggerito tu mi dice: "System.NullReferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto.".
Non riesco però a risolvere il problema.

Grazie come sempre in anticipo per la disponibilità e la pazienza.
Ciao
89 messaggi dal 13 aprile 2004
Credo che l'errore sia dovuto al fatto che non trova una checkbox avente nome "word" ovvero c'è una delle stringhe in words che non trova corrispondenza con le words che sono state passate. Ciò può essere dovuto al fatto che stai cercando di settare lo stato Selected prima che siano state create oppure, più banalmente, c'è un errore nel recupero delle words. Proverei a verificarlo ponendomi in debug. Al limite dividi l'istruzione indicata da Moreno in due parti:

Checkbox item = clb.Items.FindByValue(word)
if (item != null) {
item.Selected = true;
}

se nessuna checkbox viene trovata, sposterei il codice in un altro evento quando le checkbox sono già state create. Ad esempio un evento pre-renderer.
Ciao

Antonio
11.886 messaggi dal 09 febbraio 2002
Contributi
+1 Ottima risposta
Il PreRender è un buon punto per inserire quel codice, perché il binding si sarà già verificato e gli Items saranno stati popolati.

Eviteri l'if però, perché è una tecnica di defensive programming che in questo caso avrebbe lo scopo di nascondere il problema sottostante, che invece andrebbe risolto in uno dei modi suggeriti.

Eventualmente si può provare anche con un:
clb.DataBind();

da mettere subito prima di iniziare a ciclare gli Items.

ciao,
Moreno
Modificato da BrightSoul il 24 giugno 2015 00.11 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.