Dataset/Datatable doppelten Eintrag verhindern

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

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von PapaBeer92.

    Hab ich:

    VB.NET-Quellcode

    1. Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    2. ' Einstellungen laden und Anwenden
    3. Me.Opacity = My.Settings.FormOpacity / 100
    4. MetroTrackbar1.Value = My.Settings.FormOpacity
    5. lblVersion.Text = "V " & My.Application.Info.Version.ToString 'Version ausgeben
    6. MetroLabel5.Text = "NEUROWERK Anrufnotiz Version " & My.Application.Info.Version.ToString & vbNewLine _
    7. & "Build-Datum: " & BuildDate
    8. LoadChangelog()
    9. If My.Settings.TopMost = True Then
    10. Me.TopMost = True
    11. MetroSwitch1.Checked = True
    12. Else
    13. Me.TopMost = False
    14. MetroSwitch1.Checked = False
    15. End If
    16. If My.Settings.openOnInternCall = True Then
    17. MetroSwitch2.Checked = True
    18. Else
    19. MetroSwitch2.Checked = False
    20. End If
    21. If My.Settings.LightTheme = True Then
    22. Me.Style = Design.Style.Light
    23. styleSwitch.Checked = False
    24. Else
    25. Me.Style = Design.Style.Dark
    26. styleSwitch.Checked = True
    27. End If
    28. callTime = DateAndTime.Now
    29. 'Daten Einlesen
    30. With DataSet1
    31. If File.Exists(installDir & "\callLog.xml") Then
    32. Try
    33. .ReadXml(_dataPathCalls)
    34. Catch ex As Exception
    35. MsgBox(ex.Message)
    36. End Try
    37. End If
    38. If .TblVorwahl.Count < 1 Then
    39. CreateVorwahlen()
    40. End If
    41. If .tblTyp.Count < 1 Then
    42. CreateTypes()
    43. End If
    44. lblCountNotes.Text = .TblCallLog.Count & " Notizen in der Datenbank"
    45. lblCountVorwahlen.Text = .TblVorwahl.Count & " Vorwahlen in der Datenbank"
    46. End With
    47. Dim arg() = Environment.GetCommandLineArgs 'Argumente in einen Array schmeißen
    48. If arg.Count = 0 Then
    49. If My.Settings.openOnInternCall = False Then
    50. Me.Close()
    51. End If
    52. End If
    53. If UBound(arg) = 2 Then
    54. callID = arg(1)
    55. callName = arg(2)
    56. ElseIf UBound(arg) = 1 Then
    57. callID = arg(1)
    58. End If
    59. If callID.Contains("-") Then
    60. If callID = "-h" Then
    61. callID = ""
    62. Me.Text = Me.Text & " - READONLY"
    63. Else
    64. MsgBox("Ungültiger Parameter!", vbCritical)
    65. callID = ""
    66. Me.Close()
    67. End If
    68. End If
    69. If Not callID = "PlayFile" Then
    70. If Not callID = "" Then
    71. If Not callID.Length < 5 Then
    72. Dim Land As String = Microsoft.VisualBasic.Left(callID, 3)
    73. Dim Vorwahl As String = callID
    74. Vorwahl = Vorwahl.Remove(0, 3)
    75. Land = Land.Remove(0, 1)
    76. 'Und suchen, wenn länger als 1 Zeichen
    77. If Not Vorwahl.Length < 1 Then
    78. Vorwahl = Vorwahl.Remove(5, Vorwahl.Length - 5)
    79. callOrt = FindVorwahl(Land, Vorwahl)
    80. GenerateNew(callID, callOrt)
    81. Me.Text = Me.Text & " - " & callID
    82. End If
    83. ElseIf My.Settings.openOnInternCall = False Then
    84. Me.Close()
    85. Else
    86. GenerateNew(callID, "Intern")
    87. Me.Text = Me.Text & " - INTERN"
    88. End If
    89. End If
    90. End If
    91. 'TblCallLogBindingSource.MoveLast()
    92. End Sub


    Ich habe nun sogar das MoveLast Auskommentiert, Selbiges Ergebnis. Siehe Screenshot, er belässt die TypID, zeigt aber was anderes an.
    Bilder
    • Screenshot 2022-03-25 131830.png

      21,18 kB, 704×667, 41 mal angesehen
    Ok, Dein Post#19 zeigte die Codeverschiebung in den anderen EH nur für eine Zeile, daher mein Gegenpost.
    Hm, meine Variante funktioniert leider doch nicht, keine Ahnung, was da gestern anders lief. Aber ich hab zumindest einen Workaround. Nicht schön, aber erstmal möglich: "temporäres Deaktivieren" des DataBindings.

    VB.NET-Quellcode

    1. Me.MetroComboBox1.DataBindings.RemoveAt(0)
    2. TblCallLogBindingSource.Position = TblCallLogBindingSource.Count - 1
    3. Me.MetroComboBox1.DataBindings.Add(New Binding("SelectedValue", Me.TblCallLogBindingSource, "TypID", True))

    Nachdem der Programmstart fertig ist, kann anscheindend problemlos wieder die BS-Postition geändert werden, ohne dass das Auswirkungen auf die TypID hat. Aber beseitigt ist das Problem damit nicht, nur umgangen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    PapaBeer92 schrieb:


    Es ist übrigens egal ob man die Metro-Elemente von Gather nimmt oder die VB-Studio eigenen - hab's ausprobiert :D


    Hab ich schon getestet gehabt, auch damit bestand/besteht das Problem. In einem der Vorherigen Posts hab ich ja das Projekt angehängt. Der Code ist, wie VaporiZed schon schrieb, nicht schön, aber Funktionial.
    Da kannst du es ja mal austesten