COMBOBOX

giovedì 23 agosto 2007 - 16.39

marcello.ocone Profilo | Newbie

Scusate, sapete indicarmi come passare un indice ad una combobox, derivante dall' id di una tabella?
Marcello
Marcello OCONE

SSUPERPIPPO Profilo | Guru

Non ho ben capito la domanda...
vuoi sapere come effettuare il binding della tua combobox alla tabella?

marcello.ocone Profilo | Newbie

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

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

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

>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

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


>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
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