2016-07-29 20 views
0

Ich habe eine Combobox an eine Datenquelle "StatusListBindingSource" mit Status und StatusID gebunden. Ich brauche den Index des gefundenen Artikels. Ich werde den Index Me.cmbResult.SelectedIndexFinden Sie den Index der Combobox Element mit Objekt Wert

Dies funktioniert gut einstellen verwenden, außer ich will nicht ein für/jede Schleife verwenden:

Private Sub SetStatusIndex(ByVal StatusValue As Integer) 
    Dim ItemIndex As Integer = -1 
    Dim ct As Integer = 0 
    For Each dView As DataRowView In Me.cmbResult.Items 
     If dView.Row.Item("StatusID") = StatusValue Then 
      ItemIndex = ct 
      Exit For 
     End If 
     ct += 1 
    Next 
    Me.cmbResult.SelectedIndex = ItemIndex 
End Property 

Hier ist, was ich tun möchte:

Dim a As ComboBox.ObjectCollection = Me.cmbResult.Items 

'can't cast like this 
Dim lisDRView As List(Of DataRowView) = a.Cast(Of DataRowView)() 

'I'd like to use something like .find 
Dim drView As DataRowView = lisDRView.Find(Function(x) x.Row.Item("StatusID") = StatusValue) 

'there is no drView.index so this fails 
Me.cmbResult.SelectedIndex = drView.index 

Aber ich bin immer eine Ausnahme auf a.Cast(Of DataRowView)() und natürlich gibt es keine drView.index

ungültig castexception: Das Objekt des Typs 'd__aa'1 [System.Data.DataRowView]' konnte nicht in den Typ 'System.Collections.Generic.List`1 [System.Data.DataRowView]' umgewandelt werden.

Wie bekomme ich den Index des Artikels mit gegebenem StatusValue mit Find?

Antwort

0

Dies funktioniert:

Dim lis As List(Of DataRowView) = _ 
     (From item As DataRowView In cmbResult.Items Select item).ToList 
Dim d = lis.Find(Function(x As DataRowView) x.Row.Item("StatusID") = StatusValue) 
Me.cmbResult.SelectedItem = d 

die Vorlage zum Tor von how to get the all combobox item .... using array