PDA

View Full Version : [VB] Selezionare due Items alla volta con una ComboBox()


race2
06-05-2002, 07:32
Salve, vorrei sapere come posso o se posso selezionare
due Items contemporaneamente con una ComboBox(), il
motivo e' il seguente:

in base alla voce che seleziono nella mia ComboBox(),
voglio avere a mia disposizione il Nome e l'ID della mia
selezione, ma non l'ID della ComboBox() ma l'ID della
tabella nel mio Database, dato che la ComboBox() viene
popolata con una Query.

Come si fa per passare con la ComboBox() sia il Nome e
sia l'ID della tabella ???




Per aggiungere gli Item Io faccio cosi:

---------------------------------------------------------
Dim conn As New OleDbConnection
("Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=D:\Employee.mdb")

conn.Open()
Dim comm As New OleDbCommand("Select * From
Dependents", conn)
Dim read As OleDbDataReader = comm.ExecuteReader

While read.Read()

cmb1.Items.Add(read("Name"))

End While

conn.Close()
---------------------------------------------------------
Ma cosi aggiungo solo l'Item "Nome" , e per l'Item ID ???


POI:

Per estrarre l'"ID" e il "Name" come devo fare ???
----------------------------------------------------------
Dim Id As String = ???
Dim Nome As String = ???
MessageBox.Show(Id & "<--->" & Nome)
----------------------------------------------------------

Vi scongiuro datemi una mano, sono molti giorni che
faccio treand nei forum, ho 3 libri da 800 pagine l'uno
su VB.NET e C#, ma non ho trovato risposta, grazie.

tas
06-05-2002, 10:47
Mah, forse quello che ti mostro ora non č il modo pių corretto, fai tu...

Ti crei una semplice classe:

Public Class MyItem
Private m_id As Long
Private m_text As String

Public Overrides Function ToString() As String
Return m_text
End Function

Public Sub New(ByVal Text As String, ByVal ID As Long)
m_text = Text
m_id = ID
End Sub

Public Property ID() As Long
Get
Return m_id
End Get
Set(ByVal Value As Long)
m_id = Value
End Set
End Property

Public Property Text() As String
Get
Return m_text
End Get
Set(ByVal Value As String)
m_text = Value
End Set
End Property

End Class


Con questo codice aggiungi gli item al Combobox (nell'esempio imposto ID=i*2):

Dim i As Integer

For i = 1 To 10
ComboBox1.Items.Add(New MyItem("Item " & i.ToString, i * 2))
Next


Con quest'altro codice puoi estrarre il tuo ID:

Dim it As MyItem

it = ComboBox1.SelectedItem
TextBox1.Text = it.ID

race2
06-05-2002, 11:27
sei un GRANDISSIMO!!!!!!!!!!
mi stai salvando un lavoro immenso,

solo una cosa mi sta sottolineando il codice all'interno delle parentesi rotonde,

tu nella classe hai messo dei ByVal Text e ID, ma quando li passi i valori Text e ID ???


ComboBox1.Items.Add(New MyItem("Item " & i.ToString, i * 2))

race2
06-05-2002, 11:33
ERRORE!!!!!!!!!

Sto sbagliando io, funziona tutto!!!!!!!!!!!!!

race2
07-05-2002, 02:29
Scusami, e' perfetto, funziona tutto, solo una cosa, ma se non volessi visualizzare l'ID nella ComboBox() ma nello stesso tempo vorrei passare il valore dell'ID alla classe, come dovrei fare ???
Per il motivo che visualizzare l'ID non sta molto bene!!!


il mio codice:
----------------------------------------------------------------------------------
conn.Open()
Dim comm As New SqlCommand("Select * From Clienti", conn)
Dim read As SqlDataReader = comm.ExecuteReader
While read.Read()
ComboBox1.Items.Add(New MyItem(read("Nome"), read("ID")))
End While
conn.Close()
------------------------------------------------------------------------------------

tas
07-05-2002, 07:09
Se non hai modificato la classe MyItem che ti avevo proposto non dovresti vedere l'ID dentro la ComboBox!

La classe funziona cosė: se aggiungi al ComboBox un oggetto, VB cerca per questo oggetto il metodo ToString e carica il valore restituito dentro la ComboBox. Controlla ToString...

race2
07-05-2002, 12:49
La tua classe non l'ho toccata, ho solo modificato l'inserimento degli Items, l'esempio che ti ho postato e' il metodo di caricamento degli Item nella ComboBox() , cosa ci vedi di sbagliato ???
Perche mi visualizza pure l'ID nella ComboBox() ???

race2
07-05-2002, 12:57
Scusa ho trovato !!!!!!!!!!!!!!!!!!!

Ho aggiunto ToString() all'ID, non mi ero accorto che non lo avevo inserito!!!!!!!!!

Lo sai, mi hai tolto da un problema troppo grande per me, ti ringrazio moltissimo, ciao!!!

race2
13-05-2002, 18:39
Originariamente inviato da tas
[B]Mah, forse quello che ti mostro ora non č il modo pių corretto, fai tu...

Ti crei una semplice classe:

Public Class MyItem
Private m_id As Long
Private m_text As String

Public Overrides Function ToString() As String
Return m_text
End Function

Public Sub New(ByVal Text As String, ByVal ID As Long)
m_text = Text
m_id = ID
End Sub

Public Property ID() As Long
Get
Return m_id
End Get
Set(ByVal Value As Long)
m_id = Value
End Set
End Property

Public Property Text() As String
Get
Return m_text
End Get
Set(ByVal Value As String)
m_text = Value
End Set
End Property

End Class


Con questo codice aggiungi gli item al Combobox (nell'esempio imposto ID=i*2):


Ciao!
Avrei bisogno di te un altra volta....
Ho creato una ListView multicolonna (Vedi Allegato...),
dovrei fare la solita cosa della discussione passata, al click passare l'ID ad una Query ed ho pensato di usare la tua Classe,
il problema e' che non so come piazzarla , mi da errore, qui sotto c'e' il mio codice completo, mi puooi dare una mano???

-----------------------------------------------------------------------------------
listView1.Activation = ItemActivation.Standard
listView1.Columns.Add("Codice", 100, HorizontalAlignment.Left)
listView1.Columns.Add("Prodotto", 100, HorizontalAlignment.Left)
listView1.Columns.Add("Quantita", 100, HorizontalAlignment.Left)
listView1.Columns.Add("Prezzo", 100, HorizontalAlignment.Left)
listView1.Columns.Add("Iva", 100, HorizontalAlignment.Left)
listView1.Columns.Add("Descrizione", 100, HorizontalAlignment.Left)

Dim Codice As String
Dim Prodotto As String
Dim Quantita As String
Dim Prezzo As String
Dim Iva As String
Dim Descrizione As String
Dim Immagine As String
conn.Open()
Dim comm As New OleDbCommand("Select * From Prodotti", conn)
Dim read As OleDbDataReader = comm.ExecuteReader
While read.Read()
Codice = read("Codice")
Prodotto = read("Prodotto")
Quantita = read("Quantita")
Prezzo = read("Prezzo")
Iva = read("Iva")
Descrizione = read("Descrizione")
Immagine = read("Immagine")
Dim Item As New System.Windows.Forms.ListViewItem(Codice)
Dim itms1 As New System.Windows.Forms.ListViewItem.ListViewSubItem()
Dim itms2 As New System.Windows.Forms.ListViewItem.ListViewSubItem()
Dim itms3 As New System.Windows.Forms.ListViewItem.ListViewSubItem()
Dim itms4 As New System.Windows.Forms.ListViewItem.ListViewSubItem()
Dim itms5 As New System.Windows.Forms.ListViewItem.ListViewSubItem()
Item.SubItems.Add(Prodotto)
Item.SubItems.Add(Quantita)
Item.SubItems.Add(Prezzo)
Item.SubItems.Add(Iva)
Item.SubItems.Add(Descrizione)
listView1.Items.Add(Item)
End While
conn.Close()
-----------------------------------------------------------------------------------

chiaramente qui' non e' stata applicata la tua classe, grazie , ciao!!!