Problema checkboxlist

venerdì 09 dicembre 2005 - 14.26

ilpako Profilo | Junior Member

ragazzi ho creato una checkboxlist in questo modo:
chklxequip.DataSource = SelectOleDbSrvRows(dbConn, strConn, sqlCmd)
chklxequip.DataValueField = "ID"
chklxequip.DataTextField = "newequip"

prima domanda:
come faccio a decidere quali elementi debbano apparire chekkati e quali no?

seconda dmanda:
ora ho bisogno di intercettare sull'evento selectindexchanged se la proprietà checked dell'elemento è true o false...ma ho visto che il listitem della checkboxlist non ha la proprietà checked...

che faccio?

GvnnRules Profilo | Senior Member

prima domanda:
Per checcare quelli che ti interessano ti devi scorrere la collection dei listitem e selezionare quelli che soddisfano le tue condizioni. Altrimenti l'alternativa è quella di costruire la lista elemento per elemento.

seconda dmanda:
La proprietà è selected
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolslistitemclassselectedtopic.asp

Peace
Gvnn

ilpako Profilo | Junior Member

il problema è ke nn esiste una proprietà checked...se io tolgo il segno di spunta da un elemento ho bisogno di eliminarlo da un certo array riempito con gli oggetti chekkati... ho reso l'idea? sul selected=false non posso risalire al valore di quell'oggetto poikè la proprietà selecteditem dà valore nullo.

schifidus Profilo | Junior Member

Ciao dovresti essere più chiaro su cosa vuoi fare...
Nel senso l'arraylist degli elementi checcati quando lo crei? se elimino un elemento perchè lo deseleziono , nel caso dovessi selezionarlo nuovamente lo devo aggiungere ancora nell'arrayList?
Comunque in linea di massima il metodo migliore dovrebbe essere intercettare dall'evento checkedListBox1_SelectedIndexChanged il selectedItem che scaturisce il fire dell'evento (e questo lo fai semplicemente castando sender -->CheckedListBox sen = (CheckedListBox)sender; e accedendo alla proprietà selectedItem chiamando poi il metodo toString()).
A questo punto invece che un arrayList ti crei un HashTAble con items che hanno come chiave il nome dell'elemento della CheckedListBox e semplicemente chiamerai il metodo remove dell'hash passandogli sen.SelectedItem.toString();
Altrimenti puoi sfruttare la reflection.
Ancora meglio non dimenticare che la classe CheckedListBox contiene una collection aggiornata dinamicamente econtentente tutti gli elementi selezionati, quindi fa già quello che vorresti fare tu... (la collection deriva dalla proprietà SelectedItems. Fai attenzione al plurale di Item....)
Se sei più chiaro nel descrivere quello che devi fare vediamo come risoverla...
Ciao Marco.

ilpako Profilo | Junior Member

attenzione io ho parlato di una checkboxlist non di una checkedlistbox. questa di cui parli nn va bene per le web apps...cmq hai capito di cosa ho bisogno...aggiornare dinamicmente una lista degli elementi selezionati...ma credo di aver risolto utilizzando delle list box dinamike...cmq il problema resta sulle checkboxlist poikè nn si può risalire al valore (o a qualsiasi altra prorpietà) di un elemento non cekkato...fateci caso...se io ho una checkbox singola posso dire se "checked" = false o true ==> posso ricavare qualsiasi propietà...in una checkboxlist devo usare l'attributo "selected" ma se quest'ultimo è uguale False nn posso ricavare nesuna proprietà dell'item deselezionato...SMENTITEMI!!!poikè l'item risulta = NULL

schifidus Profilo | Junior Member

Scusa ma ieri sera ero un pò stanco e non ho visto che ti riferivi ad una WebApp.
Ti devo smentire...
Con un semplice ciclo come il seguente puoi scorrere tutti gli elementi di una checkBoxList e verificare o meno che siano chekkati, inoltre puoi accedere a tutte le proprietà di ogni singolo elemento della checkBoxList.
Se inoltre setti il postBack del controllo a true, ogni volta che modifichi lo stato della variabile selected di un Item hai la possibilità di eseguire questo controllo e popolare nuovamente il tuo arrayList.
private void CheckBoxList1_SelectedIndexChanged(object sender, System.EventArgs e)
{pippo.clear() //dove pippo è un ArrayList che probabilmente avrai necessità di mettere in Session.
for(int i=0;i<this.CheckBoxList1.Items.Count;i++)
{
if(this.CheckBoxList1.Items[i].Selected==true)
{
pippo.add(this.CheckBoxList1.Items[i].toString())
}
}
}
Se usassi un HashTable avresti il vantaggio di non dover sempre pulire tutto l'arrayList e ricrearlo, ma semplicemente verificare se la chiave esiste già o meno ed eliminarla o aggiungerla in relazione alla proprietà selected dell'Item.
Era questo che avevi bisogno.
Ciao Marco.

ilpako Profilo | Junior Member

tnx schifidus forse l'hashtable sarà più utile...

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5