9 messaggi dal 08 settembre 2010
Ciao a tutti, ho un problema...
su una form ho diversi controlli, griglia, textbox, combobox, e UNA SOLA maledetta listbox!
Nessun problema con le combo.
lavorando con i datatable, imposto valuemember quando seleziono recupero l'Id della voce relativa dal controllo combobox, con un selectedvalue.

La listbox ha, allo stesso tempo, come la combobox, il valuemember da settare...ma poi non mi permette di recuperare il valore, perchè non mi consente il selectedvalue...perchè!?!?!?!?
che senso ha impostare un valore se poi non ho un metodo per usarlo...oppure mi sfugge qualcosa?

In sostanza, ho una tabella CLIENTI, ogni "cliente" ha delle caratteristiche, che selezionabili dalla lista, andranno associate in tabella al cliente stesso.

Ora come ora, per verificare quelle selezionate e memorizzarle, uso un getselected(numitem)=true o false. Ho sincronizzato una datatable "TBL" con la listbox (sono cioè ordinate nello stesso modo), e le sposto contemporaneamente.
Se la voce 4 della lista è "checckata", l'id del record 4 di TBL sarà quello che devo memorizzare...è un po' contorto e sporco, ma funziona.
Quello che non riesco a fare è quando carico un cliente già esistente, che quindi si porta dietro le sue caratteristiche, come posso settare a "selezionata" via codice una voce?
In teoria...
IF "Id record di un datatable" = "valuemember prima voce della lista" THEN
etc etc...
ma come faccio a ciclare sulle voci della lista??


sono stato un po' prolisso, scusate, ma sono davvero a "tanto così" dal tirate testate sul muro alle mie spalle...
Potresti postare le parti "incriminate" del tuo codice?

Nicola Baldi
"Make things as simple as possible, but not simpler."
>>> My blog <<<
perdonami, curiosità personale, ma visto che devi selezionare solo ed esclusivamente un item dalla lista, perché non usare una normalissima comboBox ?

Davide Guida
Technical Architect @ Razorfish Healthware
http://davideguida.altervista.org
2.198 messaggi dal 30 novembre 2001
per ciclare su una listbox:
foreach (ListItem item in listBox1.Items)
{
if (item.Selected)
valore = item.Value;
}
179 messaggi dal 12 luglio 2007
akira, posta il codice che usi per leggere il selecteditem
e per sicurezza quando cicli per gli oggetti ListItem per leggerli controlla che siano effettivamente pieni, magari hai un problema a postback e la listbox non viene ricaricata
9 messaggi dal 08 settembre 2010
ciumbia, mi distraggo un attimo e...quante risposte!!! Grazie mille...
Allora la listbox è multiselct, quindi non posso usare una combobox, forse prima mi sono dimenticato questo "piccolo dettaglio".
datemi due secondi, apro il framewok, provo il codice e vi posto tutto...^^
9 messaggi dal 08 settembre 2010
Dim v_numrows As Integer = tabella.Rows.Count

Dim v_num_patologie As Integer = lst_patologie.SelectedItems.Count

'qui dovrei creare l'array da inviare alla sub di aggiornamento
'ma non so passare un array intero ancora, quindi creo una stringa 'che poi vado a scomporre nella sub 'aggiornapatologie("t_associaz_utenti_patologie")

Dim x As Integer
Dim y As Integer
Dim v_patologie As String = ""
y = 0

If Not lst_patologie.SelectedItems.Count = -1 Then
Dim v_lista As Integer = lst_patologie.Items.Count
For x = 0 To (v_lista - 1)
If lst_patologie.GetSelected(x) Then
If v_patologie = "" Then
v_patologie=tabella.Rows(y).Item("id_patologia")
Else
v_patologie = v_patologie & "," & tabella.Rows(y).Item("id_patologia")

End If

End If
y = y + 1
Next

fsb.aggiornapatologie("add", v_idutente, v_patologie, v_num_patologie)
End If

allora, questo è il salvataggio.
Dopo aver inserito il nuovo utente, ne recupero l'id e in maniera non proprio pulita, ottengo il valuemember che mi serve...
(ma in realtà sincronizzo un datatable e lo prendo da lì, non dalla listbox, se qualcuno (non è possibile perchè ci lavorerà una persona sola per volta) mi cambia i record della tabella e la lista non è aggiornata, ciao! le corrispondenze non esistono più...)
Quindi questo, seppur forzando, l'ho risolto, ma se riuscissi semplicemente a leggere il valuemember degli elementi e inserirlo in una variabile sarebbe moooooooolto meglio.

Quello che invece proprio non so come fare è:
quando un record utente esiste già, e lo si richiama per una modifica, si "doubleclicca" una griglia (dgrid_utenti), ottengo così IDutente e confrontando gli IDpatologie ad esso associati in una seconda tabella, devo selezionare in automatico, via codice, le voci già presenti.

doppio click=> idutente

Dim v_id_riga As String = dgrid_utenti.CurrentRow().Cells("idutente").Value

per le combo ho fatto così:
Dim v_idutente As String = dgrid_utenti.CurrentRow().Cells("id_tipoutente").Value
cmb_tipoutente.SelectedValue = v_idtipoutente
e funziona...


(non mi serve item!...mi serve l'ID contenuto nella proprietà valuemember ^^)

@chiccosimo...
io uso vb net non c#...
anche provando a convertirlo, che dichiarazione metto per le variabili?
Dim tabella As DataTable = elenco("nometabella")
mi spiego meglio:

Dim row As DataRow
Dim v_patologie As String = ""
For Each row In tabella.Rows
If v_patologie = "" Then
v_patologie = row.Item("id_patologia")
Else
v_patologie = v_patologie & "," & row.Item("id_patologia")
End If
Next

volendo scorrere le righe di una datatable, devo dichiarle come oggetti datarow, appartenenti all'insieme rows del datatable.
Nel caso della listbox cosa dichiaro e come? ^^


sto facendo altre prove...
grazie in anticipo...vi terrò aggiornati, sempre se ne esco vivo...
9 messaggi dal 08 settembre 2010
For Each row In tabella.Rows
v_patologie = row.Item("id_patologia")
Dim i As Integer
If lst_patologie.Items.Count > 0 Then
'provo un ciclo for
For i = 0 To lst_patologie.Items.Count - 1
Dim v_item As Integer = lst_patologie.SelectedItem(i).ToString 'il problema è in questa riga
'mi cicla passando da ID a NOME a descrizione, mantenendo lo stesso num di riga, cambiando colonna, se riuscissi a fargli cambiare riga...
If v_item = v_patologie Then
lst_patologie.SetSelected(i, True)
Else
lst_patologie.SetSelected(i, False)
End If
Next

'provo anche for each
'Dim v_lstrow As DataRowView
'i = 0
'For Each v_lstrow In lst_patologie.Items

' Dim v_item As Integer = lst_patologie.SelectedItem(i).ToString
' If v_item = v_patologie Then
' MsgBox(lst_patologie.Items(i))
' lst_patologie.SetSelected(i, True)
' Else
' lst_patologie.SetSelected(i, False)
' End If
' i = i + 1
'Next 'invece in questo ciclo mi da:
L'elenco a cui è associato l'enumeratore è stato modificato. L'enumeratore può essere utilizzato solo se l'elenco rimane costante.Non appena arriva qui...
End If
Next


pleaseeeeeeeeeeeeeeeeeeeeeeeee ^^ dove sbaglio?

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.