Combobox / DataCombo

02/02/2010 - 12:05 von dula | Report spam
Hi,



unter VB6 kann man DataCombo verwenden, um mit nicht numerischen oder mit
nicht lückenlosen Zahlen "BoundText" zu füllen.

Z.B.

...

dcAnrede.ListField = "Anrede_Text" , Herr / Frau

dcAnrede.BoundColumn = "Anrede" , H / F

...

dcAnrede.BoundText = "F" ergibt: Frau



Wie kann ich dies realisieren mit ComboBox unter vb.net?



Mein erster Versuch hat leider nicht geklappt!





cbAnrede.DataSource = ds.Tables("Anrede")

cbAnrede.DisplayMember = "Anrede_Text"

cbAnrede.ValueMember = "Anrede"

...

cbAnrede.SelectedIndex = "F" ,Verursacht eine Fehlermeldung!





Ich bitte um Hilfe



Vielen Dank im Voraus
 

Lesen sie die antworten

#1 Peter Götz
02/02/2010 - 14:02 | Warnen spam
Hallo "dula",

wir stellen uns hier üblicherweise mit unserem
Vor- und Zunamen vor. Wàre schön, wenn Du
Dich dieser Gepflogenheit anschliessen würdest.

unter VB6 kann man DataCombo verwenden, um mit nicht numerischen oder mit
nicht lückenlosen Zahlen "BoundText" zu füllen.



Ich verstehe nicht so recht, was genau Du machen
möchtest.
Die nachfolgenden Beispiele sollten Dir aber
zeigen wie Datenbindung an die .net-ComboBox
funktioniert, bzw wie man ganze Objekte an die
Items-Auflistung einer Combobox übergeben kann.

Das erste Beispiel bindet die ComboBox über eine
DataView (mDV) an eine DataTable (mDT).

' /// Code in einem leeren Formmodul (Form1.vb)
Public Class Form1
Private WithEvents CBox As ComboBox

Private mDT As DataTable
Private mDV As DataView

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

CreateControls()

CreateData()

With CBox
.DataSource = mDV
.DisplayMember = _
mDT.Columns(1).ColumnName

.ValueMember = _
mDT.Columns(0).ColumnName
End With

End Sub

Private Sub CreateControls()
CBox = New ComboBox
With CBox
.Name = "CBox"
.Font = New Font("Arial", 12)

.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
.Height)

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right
End With
Me.Controls.Add(CBox)
End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow
Dim Values() As String = _
New String() {"Frau", "Herr", "Firma"}

mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Text", GetType(String))

For i = 0 To Values.GetUpperBound(0)
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = Values(i)
.Rows.Add(DR)
Next
.AcceptChanges()
End With
mDV = New DataView(mDT)
End Sub

Private Sub CBox_SelectedIndexChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles CBox.SelectedIndexChanged

Dim DRv As DataRowView = _
DirectCast(CBox.SelectedItem, DataRowView)

Me.Text = _
DRv.Item(0).ToString & " : " & _
DRv.Item(1).ToString
End Sub
End Class
' \\\ E N T E

Nach dem Programmstart werden mit jeder neuen
Auswahl in der ComboBox die Inhalte der Felder
ID u. Text in der Titelleiste der Form angezeigt.
_________________________________________

Man kann der Items-Auflistung der ComboBox
aber auch Objekte übergeben und mit Hilfe
von .DisplayMember bestimmen, welche
Eigenschaft eines solchen Objektes in der
ComboBox angezeigt werden soll.

Im nachfolgenden Beispiel werden der Items-
Auflistung der ComboBox einige Objekte vom
Typ Anrede (mit den Eigenschaften ID u. Text)
übergeben.

Public Class Form1
Private WithEvents CBox As ComboBox

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

CreateControls()

FillCombo()
CBox.SelectedIndex = 0
End Sub

Private Sub CreateControls()
CBox = New ComboBox
With CBox
.Name = "CBox"
.Font = New Font("Arial", 12)

.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
.Height)

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right
End With
Me.Controls.Add(CBox)
End Sub

Private Sub FillCombo()
With CBox
.DisplayMember = "Text"

.Items.Add(New Anrede(1, "Frau"))
.Items.Add(New Anrede(2, "Herr"))
.Items.Add(New Anrede(5, "Firma"))
.Items.Add(New Anrede(9, "Merkwürden"))
End With

End Sub

Private Sub CBox_SelectedIndexChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles CBox.SelectedIndexChanged

Dim A As Anrede
A = DirectCast(CBox.SelectedItem, Anrede)
Me.Text = A.ID.ToString & " : " & A.Text
End Sub


Public Class Anrede
Private mID As Integer
Private mText As String

Public Sub New _
(ByVal ID As Integer, ByVal Text As String)

mID = ID
mText = Text
End Sub

Public ReadOnly Property ID() As Integer
Get
Return mID
End Get
End Property


Public ReadOnly Property Text() As String
Get
Return mText
End Get
End Property

End Class
End Class
' \\\ E N T E

Nach dem Programmstart werden mit jeder
neuen Auswahl in der ComboBox die Werte
der Eigenschaften ID und Text des ausgewàhlten
Anrede-Objektes angezeigt.


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen