BindingList und Custom Index Value

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    BindingList und Custom Index Value

    Ist es möglich in einer BindingList einen selbst definiertes Wert als Index zu benutzten? Um auf die entsprechenden Werte zuzugreifen!
    Nehmen wir das nachfolgende Beispiel! Ich habe eine Klasse Table und möchte in der BindingList die Felder der Tabelle speichern. Der Feldname soll hier auch als Index genutzt werden können um auf die Daten des Feldes zugreifen zu können! Ist das Möglich? Im Beispiel wird in der Sub Button2_Click auf das Feld zugegriffen. Hier wäre es halt super wenn man anstatt

    VB.NET-Quellcode

    1. ​objTable.Fields.Item(0) = objField

    so was nutzen könnte:

    VB.NET-Quellcode

    1. ​objTable.Fields.Item("FieldName") = objField


    Für jede Hilfe und Anregung bin ich dankbar!
    Christian

    Mein Beispiel:

    VB.NET-Quellcode

    1. ​Imports System.ComponentModel
    2. Public Class Form1
    3. Dim objTable As New Table
    4. Dim objField As New Table.Field
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. With objTable
    7. .TableName = "Test"
    8. .TableDescription = "Testtabelle"
    9. With objField
    10. .FieldName = "Nachname"
    11. .FieldDescritpion = "Der Nachname, vor der Änderung"
    12. End With
    13. .Fields.Add(objField)
    14. End With
    15. DataGridView1.DataSource = objTable.Fields
    16. End Sub
    17. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    18. Dim objField As New Table.Field
    19. With objField
    20. .FieldName = "Vorname"
    21. .FieldDescritpion = "Der Vorname"
    22. End With
    23. objTable.Fields.Add(objField)
    24. End Sub
    25. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    26. Dim objField As New Table.Field
    27. With objField
    28. .FieldName = "Nachname"
    29. .FieldDescritpion = "Der Nachname nach der Änderung!"
    30. End With
    31. objTable.Fields.Item(0) = objField
    32. End Sub
    33. End Class
    34. Public Class Table
    35. Public Property TableName As String
    36. Public Property TableDescription As String
    37. Public Property Fields As New BindingList(Of Table.Field)
    38. Public Class Field
    39. Public Property FieldName As String
    40. Public Property FieldDescritpion As String
    41. End Class
    42. End Class
    Ist hier jetzt die Frage, wie man so was lösen kann?

    Da Objekte in der BindingList sind, wird der direktzugriff glaub schwierig.
    Man könnte aber eine eigene IndexOf-Funktion in das Objekt einbauen, dann
    kann man mit dem Fieldnamen arbeiten.

    Ist dann halt eine situationsbedingte Lösung.

    Also in deiner Table-Klasse

    VB.NET-Quellcode

    1. Public Function IndexOf(ByVal name As String) As Int32
    2. For i As Int32 = 0 To Fields.Count - 1
    3. If Fields(i).FieldName.SequenceEqual(name) Then
    4. Return i
    5. End If
    6. Next
    7. Return -1
    8. End Function


    und zugreifen könnte man dann so

    VB.NET-Quellcode

    1. 'Button2_Click
    2. Dim idx = objTable.IndexOf(objField.FieldName)
    3. If idx >= 0 Then
    4. objTable.Fields.Item(idx) = objField
    5. End If


    'Edit: Mist, irgendwie will das nicht so mit dieser Tastatur

    Freundliche Grüsse

    exc-jdbi


    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „exc-jdbi“ ()