Bindingsource.Find

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

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von darkman203.

    Bindingsource.Find

    Hallo zusammen,

    ich habe ein gebundenes Dataset welches aus einer ExcelTabelle gefüllt werden muss. (Das funktioniert soweit)
    Der Wert der Excel Tabellenspalte steht in (value(5).

    Ich möchte jetzt überprüfen ob die Anrede bereits vorhanden ist und wenn nicht, soll diese angelegt werden. (Das funktioniert schon)
    Wenn die Anrede bereits vorhanden ist, möchte ich von der gefundenen Row den Wert der Spalte ID ermitteln. (Da komme ich nicht weiter)

    VB.NET-Quellcode

    1. If Not IsNothing(value(5)) Then
    2. Dim _Anrede As String = value(5).ToString
    3. Dim _AnredeSeach As Integer = AnredeBindingSource.Find("Anrede", _Anrede)
    4. If _AnredeSeach = -1 Then ' Wemm noch nicht vorhanden, lege neu an
    5. AnredeBindingSource.AddNew()
    6. Dim _row = DirectCast(DirectCast(AnredeBindingSource.Current, DataRowView).Row, ds_Kundengesamtliste.AnredeRow)
    7. _row.Anrede = _Anrede
    8. AnredeBindingSource.EndEdit()
    9. Else
    10. 'Wenn die Anrede schon vorhanden ist den Wert der Spalte ID ermitteln
    11. End If
    12. End If



    Hoffe es kann mir jemand auf die Sprünge helfen.

    darkman203 schrieb:

    ch habe ein gebundenes Dataset welches aus einer ExcelTabelle gefüllt werden muss
    Wie bindest du die Daten an dein DataSet an? Per BindigSource und BindingList oder nur per BindingList?

    darkman203 schrieb:

    Wenn die Anrede bereits vorhanden ist, möchte ich von der gefundenen Row den Wert der Spalte ID ermitteln
    Wenn du das Anbinden mit BindingList machst, dann kannst du deine BindingList per Linq-Erweiterung über die .ToList()-Methode in eine List casten dann darauf die Find-Methode anwenden (Annonyme Methode bzw Delegaten)

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Class Class1
    3. Private bindingList As BindingList(Of Mitarbeiter)
    4. Public Sub New()
    5. Me.bindingList = New BindingList(Of Mitarbeiter)()
    6. End Sub
    7. Sub foo()
    8. Dim id As Integer = SucheMitarbeiterAnhandVonAnrede("Herr").ID
    9. End Sub
    10. Function SucheMitarbeiterAnhandVonAnrede(anrede As String) As Mitarbeiter
    11. Dim mit As Mitarbeiter = Me.bindingList.ToList().Find(Function(m)
    12. Return m.Anrede = anrede
    13. End Function)
    14. Return mit
    15. End Function
    16. End Class
    17. Public Class Mitarbeiter
    18. Public Property ID As Integer
    19. Public Property Anrede As String
    20. Public Property Nachname As String
    21. Public Property Vorname As String
    22. Public Property Mail As String
    23. End Class
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    Wie bindest du die Daten an dein DataSet an? Per BindigSource und BindingList oder nur per BindingList?
    Nach seim Code zu schließen ist ein typisiertes Dataset vorhanden sowie im Designer gestaltete Bindings an BindingSources.

    Vom typDataset kann man sehr ähnlich mit Linq arbeiten, zB mit der .Contains-Extension.
    @darkman203: Wenn du noch weitere Hilfestellung brauchst, würde ich dich bitten uns genauere Informationen zu geben:
    Wie sieht (grob) dein Dataset aus?
    Was ist dein value() Array? Also welcher Typ.
    Was genau ist gemeint mit "ob die Anrede bereits vorhanden ist"? Also ob "Herr" mindestens einmal vorhnden ist oder ob Herr "Huber" schon einmal vorhanden ist?

    Edit: Hier ein Code-sample:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Linq
    2. Imports System.Data
    3. Imports System.Drawing
    4. Imports System.Windows.Forms
    5. Imports System.Collections.Generic
    6. Public Class Form1
    7. Private dg As DataGrid
    8. Private bs As BindingSource
    9. Private pList As List(Of Person)
    10. Public Sub New()
    11. InitializeComponent()
    12. Me.dg = New DataGrid()
    13. Me.bs = New BindingSource()
    14. Me.pList = Me.GibPersonen()
    15. Me.bs.DataSource = Me.pList
    16. Me.dg.DataSource = Me.bs
    17. Me.dg.Location = New Point(10, 10)
    18. Me.dg.Size = New Size(400, 150)
    19. Me.Controls.Add(Me.dg)
    20. End Sub
    21. Private Function PruefeAufVorhandeneAnredeUndLiefereDieId(anrede As String) As Integer
    22. Dim personenliste = From p1 In Me.pList
    23. Where p1.Anrede = anrede
    24. Dim id As Integer = -1 'Nach Aufruf den Rückgabewertprüfen, -1 heißt kein Eintrag gefunden
    25. If (personenliste.Count() > 0) Then
    26. id = personenliste.First().ID
    27. End If
    28. Return id
    29. End Function
    30. Private Function GibPersonen() As List(Of Person)
    31. Dim liste As New List(Of Person)
    32. liste.Add(New Person() With
    33. {
    34. .ID = 1,
    35. .Anrede = "Herr",
    36. .Nachname = "Mustermann",
    37. .Vorname = "Max"
    38. })
    39. liste.Add(New Person() With
    40. {
    41. .ID = 2,
    42. .Anrede = "Frau",
    43. .Nachname = "Mustermann",
    44. .Vorname = "Erika"
    45. })
    46. liste.Add(New Person() With
    47. {
    48. .ID = 1,
    49. .Anrede = "Frau",
    50. .Nachname = "Merkel",
    51. .Vorname = "Angela"
    52. })
    53. Return liste
    54. End Function
    55. End Class
    56. Class Person
    57. Public Property ID As Integer
    58. Public Property Anrede As String
    59. Public Property Nachname As String
    60. Public Property Vorname As String
    61. End Class


    LG Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Radinator“ ()

    darkman203 schrieb:

    ​Kannst du mir im Bezug auf Linq und .Contains-Extension noch ein wenig Schützenhilfe geben?


    VB.NET-Quellcode

    1. Dim DoktorAnredeGibtsSchon As Boolean = myDataset.Anrede.Contains(Function(ar)ar.RowState<>RowState.Detached Andalso ar.RowState<>RowState.Deleted Andalso ar.Anrede = "Dr.")