Problema con combobox e textbox

mercoledì 12 maggio 2010 - 16.11

carlo9987 Profilo | Newbie

Ciao a tutti, sono un nuovo iscritto! Innanzitutto complimenti per il forum, mi sono fatto un bel giro e c'è davvero tanta roba interessante!
Quello che mi ha portato ad iscrivermi è un problema su una piccola applicazione in vb 2008 che sto realizzando.

Premetto di essere alle prime armi con vb 2008 e sono alle prese con una combox!

Il mio problema è questo:

Ho una winform con una combobox e delle textbox, in base alla selezione nella combobox, le textbox devono essere popolate. I dati nella combobox arrivano tramite query, questo è il codice:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Come faccio a popolare le textbox dinamicamente??? Nella combo apparirà solo nome e cognome, ma nelle textbox dovranno apparire altri dati presenti nel record.
Vi ringrazio in anticipo per le risposte!

AntCiar Profilo | Expert

Ciao.

Per prima cosa cambia il modo di reperire i dati. Incolla nella tua classe quello che segue

Public Function RiempiTabella(ByVal sql As String) As DataTable
Dim res As DataTable = New DataTable
Try
Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection()
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\database.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False"

Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter()
da.SelectCommand = New OleDb.OleDbCommand
da.SelectCommand.Connection = conn
da.SelectCommand.CommandText = sql
da.SelectCommand.CommandType = CommandType.Text
da.Fill(res)
da.Dispose()
da = Nothing
Catch ex As Exception
End Try
Return res
End Function


Crea una variabile globlale di tipo boolenao

Private lockCombo as bool = false


poi nel tuo evento load (al posto di quello che facevi per caricare la combo) scrivi


Dim Tab as dataTable = new datatable()
tab = RiempiTabella("SELECT id, Cognome, Nome, Indirizzo FROM ..... ")
if tab is nothing =false next

lockCombo = true
me.combobox1.dataSource = Tab
me.combobox1.DisplayMember = "Cognome"
me.combobox1.ValueMember= "ID"

lockCombo = false
end if

PS. Se vuoi visualizzare Cognome e Nome insieme, nella stringa sql devi concatenare i due campi e ci dai un alias che userai nel DisplayMember = ......


Poi mettiti in ascolto dell'evento SelectIndexChange della combo e scrivi:

if lockCombo = false then
me.textbox1.text = Ctype(me.combobox1.datasource, DataTable).Rows(Me.Combosox1.SelectedIndex)("Nome")
me.textbox2.text = Ctype(me.combobox1.datasource, DataTable).Rows(Me.Combosox1.SelectedIndex)("Cognome")

end if

Il codice l'ho scritto di botta qui quindi è probabile che ci sia qualche errore di sintassi.

Ciao
Cristian Barca

nico839 Profilo | Senior Member

ciao..potresti crearti un datatable o un array globale,popolarlo mentre popoli le combo e poi pescare gli altri dati per le textbox dal di li....

carlo9987 Profilo | Newbie

Non so che dire ...... Oltre che grazie mille!!

L'ho adattato e funziona alla perfezione!!

Devo solo cercare di capire tutto il codice da te postato.... Non mi sono chiari alcuni punti!

Ancora grazie mille!

AntCiar Profilo | Expert

ciao.

chiedi pure senza problemi...
Cristian Barca

carlo9987 Profilo | Newbie

Bè se non ti dispiace approfitto allora..

Quello che dovrei ottenere ora, è la possibilità di modificare il record corrispondente ai dati nelle textbox. Ovvero tramite un apposito tasto Salva, vorrei avere la possibilità di cambiare il contenuto delle textbox e andare quindi in update sul db. Come mi conviene implementare questa cosa?
Mi faccio una funzioncina che esegue l'update??
Facendo l'update sempre tramite OleDb.OleDbConnection, l'oggetto datatable non mi servirà dato che ho bisogno di gestire un solo record... o mi sbaglio??

Perdonami se ti chiedo tutte queste cose.... ma è la mia prima esperienza con un linguaggio ad oggetti e nn ho ancora chiare delle cose.

Ancora grazie mille!

AntCiar Profilo | Expert

Ciao.

Nel caso in cui devi fare Insert/Update/Delete, allora ti conviene connettere il tutto al database tramite l'esploraServer di visualstudio. In questo modo ti vengono create classi in automatico per gestire la lettura e la scrittura dei dati a database.

Avrai sempre una tabella contenente le tue righe.

Una volta modificati i valori della riga che a te interessa, invocando il metodo Update() in automatico verranno eseguite tutte le operazioni necessarie per il salvataggio dei dati, anche se sulla tabella oltre ad aver fatto delle modifiche, hai cancellato o inserito nuovi record.
Cristian Barca
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