HO una form collegata a una tabella dove ho inserito alcune combobox
Una di queste combobox consente di selezionare un valore, ad esempio il tipo documento.
Il documento può essere "Documento", "Fattura" o "Ricevuta".
nel database verrà memorizzato D nel primo caso, F nel secondo e R nel terzo.
Le combo supportano le proprietà valuemember e displaymember per cui se utilizzassi una tabella "TipoDocumenti" di due colonne (ID, Descrizione) potrei collegare la combo a questa tabella con la proprietà datasource e utilizzare le proprietà valuemember (ID) e displaymember (descrizione) per ottenere l'effetto desiderato (cioè leggere o impostare ad es, Fattura e ottenere la memorizzazione del valore "F" nel campo di origine della combo.
Ma nel caso in cui non esista una tabella TipoDocumenti perchè fare una tabella per 3 elementi non ha senso, come si può ottenere lo stesso risultato?
Momentaneamente ho risolto nel seguente allucinante modo:
--
su Load la combo viene inizializzata così:
With Me.DocumentoComboBox
.Items.Add(New MyList_IdStr("Documento", "D"))
.Items.Add(New MyList_IdStr("Ricevuta", "R"))
.Items.Add(New MyList_IdStr("Fattura", "F"))
End With
Poi si ha:
Private Sub RecordCorrente(ByVal sender As Object, ByVal e As EventArgs) Handles DocumentiBindingSource.CurrentChanged
Dim i As Integer
For i = 0 To Me.DocumentoComboBox.Items.Count - 1
If Me.DocumentoComboBox.Items(i).itemdata = Me.TipoDocumentoTextBox.Text Then
Me.DocumentoComboBox.SelectedIndex = i
End If
Next
End Sub
Private Sub TipoDocumento_Changed(ByVal sender As Object, ByVal e As EventArgs) Handles DocumentoComboBox.SelectedIndexChanged
Dim mList As MyList_IdStr
mList = Me.DocumentoComboBox.Items(Me.DocumentoComboBox.Se lectedIndex)
Me.TipoDocumentoTextBox.Text = mList.ItemData
End Sub
--
Naturalmente esiste una classe MyList_idstr composto da due stringhe come definito su http://support.microsoft.com/kb/311340 da cui la seconda sub è tratta.
La cosa funziona (purchè si richiami a mano la sub RecordCorrente nell'evento Form_Load perchè altrimenti la combo al primo record visualizzato non viene valorizzata).
il controllo TipoDocumentoTextBox fa da collegamento col database perchè la proprietà databinding della combo in questo caso non lavora (o almeno non ci sono riuscito io).
La sub su change l'avevo originariamente scritta così:
Private Sub RecordCorrente(ByVal sender As Object, ByVal e As EventArgs) Handles DocumentiBindingSource.CurrentChanged
Dim stD As String
stD = ""
Select Case Me.TipoDocumentoTextBox.Text
Case "D"
stD = "Documento"
Case "F"
stD = "Fattura"
Case "R"
stD = "Ricevuta"
End Select
Dim My_Elemento As New MyList_IdStr(stD, Me.TipoDocumentoTextBox.Text)
Me.DocumentoComboBox.SelectedIndex = Me.DocumentoComboBox.Items.IndexOf(My_Elemento)
End Sub
ma la IndexOf non funziona nonostante My_Elemento sia esattamente dello stesso tipo degli items, non ho capito perchè.
Ciao e grazie
Davide