Elemente von Listbox

22/01/2009 - 11:23 von Andreas Schmidt | Report spam
Hallo,

ich habe eine Listbox an eine LINQ Abfrage gehàngt. Die Abfrage liefert vier
Spalten. Eine davon ist als DisplayMember definiert.
Nun kopiere ich den Inhalt einer selektierten Zeile in eine 2. Listbox:
ListBox2.Items.Add(ListBox1.SelectedItem)

wie kann ich nun auf die Werte in den einzelnen Spalten in der Listbox2
zugreifen?

Gruß

Andreas
 

Lesen sie die antworten

#1 Elmar Boye
23/01/2009 - 18:09 | Warnen spam
Hallo Andreas,

Andreas Schmidt schrieb:
ich habe eine Listbox an eine LINQ Abfrage gehàngt. Die Abfrage liefert
vier Spalten. Eine davon ist als DisplayMember definiert.
Nun kopiere ich den Inhalt einer selektierten Zeile in eine 2. Listbox:
ListBox2.Items.Add(ListBox1.SelectedItem)
wie kann ich nun auf die Werte in den einzelnen Spalten in der Listbox2
zugreifen?



Leider beschreibst Du nicht, wie Deine Abfrage aussieht.
Solange Du im Select eine konkrete Klasse angibst, wird
diese in SelectedItem enthalten sein.
Gibst Du eine Auswahl von Elementen an, so wird im Hintergrund
ein anonymer Typ erzeugt. Da Du dessen Namen nicht auflösen kanst,
mußt Du in dem Falle via Reflection zugreifen.

Ich habe mal ein Beispiel angehàngt, das einmal TypeDescriptor
verwendet (womit auch die Datenbindung arbeitet und an ihre
Daten kommt). Und eine zweite Varianten die über Type zugreift.

Die Daten stammen dort aus einer Linq2Sql Abfrage,
aber das allgemeine Konzept bleibt gleich.

Gruß Elmar

Imports System.ComponentModel

Public Class LinqListBoxForm

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

Using db As New NorthwindDataContext
Dim q = From c In db.Customers _
Where c.Country = "Germany" _
Select c.CustomerID, c.CompanyName, c.ContactName, c.ContactTitle

Me.customerListBox.DataSource = q.ToList()
Me.customerListBox.DisplayMember = "CompanyName"
Me.customerListBox.ValueMember = "CustomerID"
End Using
End Sub

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

Dim lb As ListBox = DirectCast(sender, ListBox)

If (lb.SelectedItem IsNot Nothing) Then

Dim item As Object = lb.SelectedItem
Dim itemType As Type = item.GetType()
' Anonymer Typ
Console.WriteLine("{0}", itemType)

' Via TypeDescriptor (auch bei Datenbindung verwendet)
Console.WriteLine("TypeDescriptor.GetProperties")
For Each pd As PropertyDescriptor In TypeDescriptor.GetProperties(itemType)
Console.WriteLine("{0} = {1}", pd.Name, pd.GetValue(item))
Next

' Via Type.GetProperty
Console.WriteLine("Type.GetProperties")
For Each pi In itemType.GetProperties()
Console.WriteLine("{0} = {1}", pi.Name, pi.GetValue(item, Nothing))
Next
End If
End Sub
End Class







Gruß

Andreas

Ähnliche fragen