Vb.net: combobox. visualizzare in combox dati da database access e dat...

lunedì 10 giugno 2013 - 20.58
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Visual Studio 2010

Praticone Profilo | Newbie

ciao a tutti, sono nuovo e alle prime armi con vb 2010. Avrei bisogno di aiuto per risolvere un problema. Ho creato un piccolo programmino per archiviare i dati anagrafici dei clienti (database access). Ho una tabella anagrafica con tutti i dati (cognome, nome, indirizzo, provincia, comune, località e cap). I dati relativi all'indirizzo vengono visualizzati in combobox per permettere la modifica con alcune query che mi filtrano i valori :

Private Sub ProvinciaComboBox_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ProvinciaComboBox.SelectedIndexChanged
Dim prov As String = ProvinciaComboBox.Text
Me.ComuneTableAdapter.FillByProvincia(Me.PortafoglioDataSet.Comune, prov)
End Sub
e così via per filtrare il comune in base alla provincia, la località in base al comune e via. Ho associato i dati al database che viene salvato regolarmente. Il problema si presenta quando riapro la maschera perché nel campo località mi viene mostrato il primo valore utile della query e non il valore che ho selezionato e salvato.
Come dovrei fare per visualizzare i dati del database all'apertura della maschera e far si che solo agendo sul combobox vengano modificati i dati?
Scusate la lungaggine ma non riesco a trovare altra soluzione che creare una sottomaschera per modificare i dati dell'indirizzo e preferirei evitarla se possibile. Un grazie anticipato a tutti

AntCiar Profilo | Expert

Ciao.

Dipende come hai valorizzato la combobox. Se hai passato la tabella al DataSource della combo e poi hai impostato il DisplayMember e il ValueMember allora dopo aver terminato il caricamento dati della combo basta che richiami

me.ComboComume.SelectedValue = xxxxx dove al posto di xxxxx ci passi il valore del comune che hai salvato nel tuo record che devi mostrare (presumo sia un ID)

Se invece hai caricato la combo con gli Items allora devi fare me.ComboComume.SelectedItem = "xxxxxxx" dove al posto delle xxxxxx ci devi passare lo stesso testo che hai caricato nella combo.
Cristian Barca

Praticone Profilo | Newbie

grazie per l'aiuto, ma non ho capito dove dovrei inserire il codice. Il mio Problema sta nel fatto che una volta salvati i dati, le query si resettano e viene visualizzato nei combo il primo valore utile, mentre negli altri campi come la professione rimane corretto. Ho aggiunto dei text box per vedere cosa risultava per i campi "indirizzo" nel database dopo il salvataggio e quelli sono corretti, ma i campi combobox corrispondenti si resettano. Ti posto un immagine dei campi per farti vedere lo schema con le proprietà impostate.
Grazie per l'aiuto che potrai darmi

1280x1024 365Kb

AntCiar Profilo | Expert

Dalla foto ho visto che hai usato il DataBinding per l'associazione dei controlli.
E' strano che si comporti in quel modo. Se dici che dopo il salvataggio ricarica la combo, vuol dire che in qualche modo scateni qualche evento a cascata che fa si che la combo "resetti" il suo datasource e quindi in automatico si riposiziona sul primo valore.

di solito il riposizionarsi sul primo valore capita quando tenta in automatico di selezionare un valore passato nel Binding che non esiste più nella lista.
Cristian Barca

Praticone Profilo | Newbie

scusa se approfitto di te... "l'innesco" potrebbe essere dovuto ad un errore nelle query? ti spiego: ho notato che appena salvo mi viene resettato il combo cap al primo valore , e poi quello località inserendo la località corrispondente e a volte il comune, mentre nei textbox e quindi nel db rimangono quelli corretti. Penso di aver fatto qualche cavolata lì. ti spiego come sono strutturati:
tabella provincia (una sola colonna con tutte le provincie)
tabella comune (due colonne: provincia - comune)
tabella località (due colonne: comune - località)
tabella cap (era quella originale e riporta tutti i campi pr-comune-località-cap)
ogni tabella è filtrata con query tipo:
SELECT Località
FROM Località
WHERE (Comune = ?)
ORDER BY Località
mentre la sub per ogni cambiamento è:
Private Sub ProvinciaComboBox_SelectedValueChanged(sender As System.Object, e As System.EventArgs) Handles ProvinciaComboBox.SelectedValueChanged
Dim prov As String = ProvinciaComboBox.Text
Me.ComuneTableAdapter.FillByProvincia(Me.PortafoglioDataSet.Comune, prov)
End Sub
ad eccezione del campo CAP per il quale non ho inserito nulla.
Solo ProvinciaTableAdapter è caricato nel LOAD.
Sono sicuro che si potrebbe trovare di meglio ma è il massimo che sono riuscito a fare.
Scusa se mi sono dilungato ma sono più pratico che teorico e non riuscirei a spiegarmi tecnicamente.
Grazie ancora

risolto. E' un comportamento tipico di _SelectedValueChanged. E' bastato usare TextChanged e funziona tutto tranquillamente.
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5