Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
COMBOBOX
giovedì 23 agosto 2007 - 16.39
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
marcello.ocone
Profilo
| Newbie
8
messaggi | Data Invio:
gio 23 ago 2007 - 16:39
Scusate, sapete indicarmi come passare un indice ad una combobox, derivante dall' id di una tabella?
Marcello
Marcello OCONE
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
gio 23 ago 2007 - 16:48
Non ho ben capito la domanda...
vuoi sapere come effettuare il binding della tua combobox alla tabella?
marcello.ocone
Profilo
| Newbie
8
messaggi | Data Invio:
gio 23 ago 2007 - 16:55
Tabella:
id
Nome
Cognome
Nella combo visualizzo nome e cognome (già fatto)
L'id non voglio vederlo ma assegnarlo alla combo in modo che nel momento in cui seleziono un' anagrafica riesco ad intercettare l'id del record contenuto in tabella. L'i servirà per effettuare una nuova query in un' altra tabella che contiene dettagli sull' anagrafica. La tabella dettagli contiene un campo con l'id dell' anagrafica. Ecco la mia problematica. Con vb6 utilizzavo la proprietà combo.ItemData assegnando un NewIndex (id della tabella).
Spero di essermi spiegato bene.
Ciao
Grazie dell' aiuto.
Marcello
Marcello OCONE
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
gio 23 ago 2007 - 17:13
Allora...
VB.NET ti consente di collegare la tua Combobox al database utilizzando i DataSet.
Attraverso i DataSet vengono creati dei DataTable che altro non sono che una replica lato client della tua tabella.
I vantaggi di questa tecnologia sono molteplici... mi riservo di preparare un tutorial e di pubblicarlo sul mio blog a breve.
Intanto cerco di spiegarti sinteticamente la procedura per raggiungere il tuo obiettivo:
Prima di tutto devi creare un nuovo Dataset contenente la tabella che ti interessa collegare alla tua Combobox:
1. Da Esplora Soluzione click destro sul tuo progetto e aggiungi 'nuovo elemento'; seleziona 'Dataset' e dai ok
2. Ti appare una finestra di composizione del tuo Dataset dove dovrai trascinare da Esplora Server (sempre che tu sia connesso al database), la tabella che ti interessa collegare alla combobox. Salva
3. A questo punto trascina il controllo Combobox nella tua Form
4. Nell'angolo in alto a Dx del controllo trovi una freccia nera rivolta verso DX (il controllo deve essere selezionato)
5. Cliccando sulla freccia ti esce un menu dove dovrai selezionare il check "Usa elementi associati a dati"
6. Appariranno nuove opzioni che dovrai così selezionare:
--- su origine dati andrai a selezionare Altre Origini Dati => Origini dati del progetto => TuoDataSet ==> TuaTabella
--- su visualizza membro devi selezionare il campo il cui dato deve essere visualizzato nella combobox
--- su membro valore devi selezionare invece il tuo campo id
Fatto questo il gioco è fatto.
Fai il debug del tuo progetto e vedrai che la tua combobox si è riempita.
Potrai far riferimento al ID con la proprietà SelectedValue del controllo oppure al testo visualizzato con la proprietà SelectedText.
Spero di essere stato sufficientemente chiaro.
Sono a tua disposizione per eventuali chiarimenti.
Ciao
Alessandro
marcello.ocone
Profilo
| Newbie
8
messaggi | Data Invio:
ven 24 ago 2007 - 08:19
Bene,
con gli oggetti completi dell'autocomposizione funziona, ma io ho necessità di fare tutto via codice.
Con la tua spiegazione (devo dire chiarissima!) ho cercato di trasferire il tutto via codice come segue:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'*********** connessione ****************
Dim stringa_conn As String = "Data Source=223.xx.xx.xx;Initial Catalog=Athlon;Persist Security Info=True;User ID=sa;Password=xxxxxxxx; MultipleActiveResultsets=true"
Dim connessione As New SqlClient.SqlConnection(stringa_conn)
connessione.Open()
'query estrazione dei dati
Dim sql_command As String = "select id, server, categoria from ASCENT_Anagrafica_server_PRI "
'CREAZIONE DATA ADAPTER
Dim cmd As New SqlClient.SqlCommand(sql_command, connessione)
Dim DR As SqlClient.SqlDataReader = cmd.ExecuteReader
'Con un ciclo riempio la mia combo
Do While DR.Read()
ComboBox1.Items.Add(CStr(((DR(1)))))
ComboBox1.ValueMember = CStr(((DR(0))))
Loop
Alla
AL CLICK SULLA COMBO:
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
TextBox1.Text = ComboBox1.SelectedValue.ToString
End Sub
Ma l'id non appare nella textbox di prova. (Con il tuo metodo appare)
Cosa sbaglio?
P.S. Io sono nuovo di VB2005 (Sono un programmatore VB6) e vorrei ringraziarti del supporto. Approfitto per chiederti una cosa: come faccio a scrivere uan volta sola la stringa di connessione e a richiamarla quando server in ogni parte del progetto?.
Lo so che sto approfittando, ma sono un allievo che da soddisfazioni a lungo andare...
Ciao
Marcello
Marcello OCONE
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
ven 24 ago 2007 - 10:01
>Bene,
>con gli oggetti completi dell'autocomposizione funziona, ma io ho necessità di fare tutto via codice.
>Con la tua spiegazione (devo dire chiarissima!) ho cercato di trasferire il tutto via codice come segue:
>Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
>'*********** connessione ****************
>Dim stringa_conn As String = "Data Source=223.xx.xx.xx;Initial Catalog=Athlon;Persist Security Info=True;User >ID=sa;Password=xxxxxxxx; MultipleActiveResultsets=true"
>Dim connessione As New SqlClient.SqlConnection(stringa_conn)
>connessione.Open()
Fino a qui va bene
>'query estrazione dei dati
>Dim sql_command As String = "select id, server, categoria from ASCENT_Anagrafica_server_PRI "
>'CREAZIONE DATA ADAPTER
>Dim cmd As New SqlClient.SqlCommand(sql_command, connessione)
>Dim DR As SqlClient.SqlDataReader = cmd.ExecuteReader
>'Con un ciclo riempio la mia combo
>Do While DR.Read()
>ComboBox1.Items.Add(CStr(((DR(1)))))
>ComboBox1.ValueMember = CStr(((DR(0))))
>Loop
Qui assolutamente non ci siamo. Tu hai infatti creato un DataReader e ciclato i recond per inserirli nella combo.
Non è la strada giusta.
Devi creare via codice un DataSet e un DataTable ed effettuare il binding con la combobox.
Cerco di spiegarti come:
1. Crei un'oggetto SqlCommand
Dim sql_command As String = "select id, server, categoria from ASCENT_Anagrafica_server_PRI "
Dim cmd As New SqlClient.SqlCommand(sql_command, connessione)
2. Crei il DataAdapter
Dim SqlDS As DataSet <== Dichiara il DataSet
Dim SqlDA as New SqlDataAdapter <== Crea l'oggetto DataAdapter (serve per collegare il Database al DataSet)
SqlDA.SelectCommand = cmd <== Passa al DataAdapter l'sqlcommand prima creato
SqlDA.Fill(SqlDS, "NomeTabella") <== Riempie la tabella "NomeTabella" con i dati derivanti da sqlcommand
In questo modo hai creato il tuo DataSet contenente il DataTable denominato "NomeTabella"
3. Effettui il binding con la combobox
Me.Combobox1.DataSource = SqlDS.Tables("NomeTabella")
Me.Combobox1.DisplayMember = "NomeCampoDaVisualizzare"
Me.Combobox1.ValueMember = "NomeCampoValore"
La tua combobox è pronta per l'uso.
>AL CLICK SULLA COMBO:
>Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles >ComboBox1.SelectedIndexChanged
>TextBox1.Text = ComboBox1.SelectedValue.ToString
>End Sub
>Ma l'id non appare nella textbox di prova. (Con il tuo metodo appare)
Ora otterrai le due proprietà SelectedText e SelectedValue della combobox.
>P.S. Io sono nuovo di VB2005 (Sono un programmatore VB6) e vorrei ringraziarti del supporto. Approfitto per chiederti una cosa: >come faccio a scrivere uan volta sola la stringa di connessione e a richiamarla quando server in ogni parte del progetto?.
>Lo so che sto approfittando, ma sono un allievo che da soddisfazioni a lungo andare...
>Ciao
>Marcello
Al fine di rendere più automatizzata possibile la procedura di connessione al database, ho creato una classe che ho chiamato GestDbase che si occupa di stabilire e chiudere le connessioni al database attraverso appositi metodi e genera gli oggetti utilizzabibili in qualsiasi punto dell'applicazione.
Non sò se sei pratico nella programmazione ad oggetti e nella creazione di classi, eventualmente fammi capire il tuo grado di preparazione in merito e di conseguenza di dò qualche dritta.
Ciao
Alessandro
marcello.ocone
Profilo
| Newbie
8
messaggi | Data Invio:
ven 24 ago 2007 - 11:10
Alessandro,
ho quanto hai detto tutto Ok. Non so come ringrazierti dell' aiuto e della pazienza.
PS: Ancora non sono pratico in programmazione a oggetti, quello che dici è interessantissimo. I miei colleghi mi dicondo di scrivere la stringa in un file conf di VB2005 in modo da risolvere il prolema. Dici che è una strada percorribile?
Ciao Marcello
Marcello OCONE
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
ven 24 ago 2007 - 11:22
>Dim DS As DataSet 'Creo il dataset
Scusami, devi creare l'oggetto DataSet in questo modo:
Dim Ds As New Dataset
>Dim DA As SqlClient.SqlDataAdapter ' creo il DataAdapater
e il DataAdapter in questo modo:
Dim DA As New SqlDataAdapter
Ricordati che per istanziare un oggetto devi sempre usare NEW!
Per quanto riguarda la gestione delle connessioni al database, sto preparando un tutorial che inseriro nel mio blog prossimamente.
Se hai un pò di pazienza nei prossimi giorni lo troverai disponibile.
http://blogs.dotnethell.it/alebadalin
Ciao
Alessandro
Torna su
Stanze Forum
Elenco Threads
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 !