Combobox hat Einträge mehrfach doppelt

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Sportverein_Vorsitz.

    Combobox hat Einträge mehrfach doppelt

    Guten Tag,

    ich habe ein Dataset typisiert und über eine BindingSource eine ComboBox angebunden. Aus mir unerklärlichen Gründen, werden die Date aus der DataTable jetzt doppelt und dreifach angezeigt. Vielleicht könnt Ihr mir einfach nur ein paar Tipps geben, wonach ich da genau suchen muss.

    ich habe bereits beide betreffende ComboBoxen inkl. BindingSource entfernt und wieder neu hinzugefügt (allerdings mit der seleben Namensgebung). Auch meine Codesuche hat mir jeweils imemr nur einmal das Element angezeigt und ich habe bereits den gesamten Code durchgeforstet ob ich eventuell die BindingSource doppelt lade oder die ComboBox mehrfach mit der BindingSource verknüpfe. Nichts.

    Das Dataset lade ich aus dem übergebenen Form mit Me.Owner in ein Dataset auf der BuchungNeu Form (beide typisiert).
    Hier mal ein Codeausschnitt aus der Form "BuchungNeu" welcher relevant sein dürfte (der gesamte war zu lang für den Beitrag):
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class BuchungNeu
    2. Dim ScanDiag As WIA.CommonDialog
    3. Dim imageFileNameList As New List(Of String)
    4. Dim currentPage As Integer = 0
    5. Dim outputFileName As String
    6. Dim fs As FileStream
    7. Dim srcBmp As Bitmap
    8. Dim totalPages As Integer
    9. Dim EditMode As Boolean = False
    10. Dim EditRow As Integer = -1
    11. Dim Editdrv As KasseDataset.BuchungenRow
    12. Private Sub BuchungNeu_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    13. Me.KasseDataset = DirectCast(Me.Owner, KasseMain).KasseDS
    14. If Not (EditMode) Then
    15. With Me.BelegnummerTB
    16. .Text = CStr(KasseDataset.Buchungen.Rows.Count + 1).PadLeft(5, CChar("0"))
    17. End With
    18. End If
    19. With Me.BuchungskontoBindingSource
    20. .DataSource = Me.KasseDataset.Buchungskonto
    21. End With
    22. With Me.GeldkontoBindingSource
    23. .DataSource = Me.KasseDataset.Geldkonto
    24. End With
    25. With Me.KostenstellenBindingSource
    26. .DataSource = Me.KasseDataset.Kostenstellen
    27. End With
    28. With Me.FinanzbereicheBindingSource
    29. .DataSource = Me.KasseDataset.Finanzbereiche
    30. End With
    31. With Me.BuchungsartBindingSource
    32. .DataSource = Me.KasseDataset.Buchungsart
    33. End With
    34. With Me.GeldkontoCB
    35. .SelectedIndex = -1
    36. End With
    37. With Me.BuchungsartCB
    38. .SelectedIndex = -1
    39. End With
    40. With Me.BuchungskontoCB
    41. .SelectedIndex = -1
    42. End With
    43. With Me.BuchungsartCB
    44. .SelectedIndex = -1
    45. End With
    46. AddHandler Me.BuchungsartCB.SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged
    47. With Me.FinanzbereichCB
    48. .SelectedIndex = -1
    49. End With
    50. AddHandler Me.FinanzbereichCB.SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged
    51. With Me.KostenstellenCB
    52. .SelectedIndex = -1
    53. End With
    54. With MwStCB
    55. .DataSource = My.Settings.MehrwertSteuer
    56. .SelectedIndex = -1
    57. End With
    58. If (Me.EditMode) Then
    59. InitEditMode_Row()
    60. End If
    61. End Sub
    62. Sub InitEditMode_Row()
    63. If (Me.EditMode) Then
    64. Editdrv = Me.KasseDataset.Buchungen.FindByBuchungenID(Me.EditRow)
    65. With Me.GeldkontoCB
    66. .SelectedValue = Editdrv.GeldkontoID
    67. End With
    68. With Me.BelegnummerTB
    69. .Text = Editdrv.Belegnummer
    70. End With
    71. With Me.BuchungskontoCB
    72. .SelectedValue = Editdrv.BuchungskontoID
    73. End With
    74. With Me.FinanzbereichCB
    75. .SelectedValue = Editdrv.BereichID
    76. End With
    77. With Me.BuchungsartCB
    78. .SelectedValue = Editdrv.BuchungsartID
    79. End With
    80. If (Editdrv.MwStSatz > CDec(0.0)) Then
    81. Me.CheckBox2.Checked = True
    82. Dim selID As Integer = 0
    83. With Me.MwStCB
    84. For Each Str As String In My.Settings.MehrwertSteuer
    85. If (CDbl(Str) = CDbl(Editdrv.MwStSatz * 100)) Then
    86. .SelectedIndex = selID
    87. End If
    88. selID += 1
    89. Next
    90. End With
    91. selID = Nothing
    92. End If
    93. With Me.BuchungstextTB
    94. .Text = Editdrv.Buchungstext
    95. End With
    96. Dim EditBuchungswert As String = CStr(Editdrv.Buchungswert)
    97. If (EditBuchungswert.Substring(0, 1) = "-") Then EditBuchungswert = EditBuchungswert.ToString.Substring(1)
    98. With Me.BuchungswertTB
    99. .Text = EditBuchungswert
    100. End With
    101. With Me.BuchungsdatumDP
    102. .Value = Editdrv.Buchungsdatum
    103. End With
    104. End If
    105. End Sub
    106. Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    107. Select Case True
    108. Case sender Is Me.BuchungsartCB
    109. If (CType(sender, ComboBox).SelectedIndex <> -1) Then
    110. If (Me.FinanzbereichCB.SelectedIndex <> -1) Then
    111. With BuchungskontoBindingSource
    112. .Filter = "BuchungsartID=" & _
    113. CInt(Me.BuchungsartCB.SelectedValue) & _
    114. " AND BereichID=" & _
    115. CInt(Me.BuchungsartCB.SelectedValue)
    116. End With
    117. Else
    118. With BuchungskontoBindingSource
    119. .Filter = "BuchungsartID=" & _
    120. CInt(Me.BuchungsartCB.SelectedValue)
    121. End With
    122. End If
    123. If Not (EditMode) Then
    124. With Me.BuchungskontoCB
    125. .SelectedIndex = -1
    126. End With
    127. End If
    128. End If
    129. Case sender Is Me.FinanzbereichCB
    130. If (Me.BuchungsartCB.SelectedIndex <> -1) Then
    131. With Me.BuchungskontoBindingSource
    132. .Filter = "BuchungsartID=" & _
    133. CInt(Me.BuchungsartCB.SelectedValue) & _
    134. " AND BereichID=" & _
    135. CInt(CType(sender, ComboBox).SelectedValue)
    136. End With
    137. Else
    138. With Me.BuchungskontoBindingSource
    139. .Filter = "BereichID=" & _
    140. CInt(CType(sender, ComboBox).SelectedValue)
    141. End With
    142. End If
    143. End Select
    144. End Sub
    145. Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
    146. If (Me.BuchungswertTB.Text.Trim.Length < 1) Then
    147. Me.MessageLbl.Text = "Buchungswert enthält keinen Eintrag!"
    148. Return
    149. End If
    150. If (Decimal.TryParse(Me.BuchungswertTB.Text, CDec(0.0)) = False) Then
    151. Me.MessageLbl.Text = "Der eingegebene Betrag ist nicht gültig!"
    152. Return
    153. End If
    154. If (Me.BuchungstextTB.Text.Trim.Length < 1) Then
    155. Me.MessageLbl.Text = "Buchungstext enthält keinen Eintrag!"
    156. Return
    157. End If
    158. If (Me.BelegnummerTB.Text.Trim.Length < 1) Then
    159. Me.MessageLbl.Text = "Belegnummer enthält keinen Eintrag!"
    160. Return
    161. End If
    162. If (BuchungsartCB.SelectedIndex = -1) Then
    163. Me.MessageLbl.Text = "Es wurde keine Buchungsart angegeben!"
    164. Return
    165. End If
    166. If (CheckBox2.Checked And MwStCB.SelectedIndex = -1) Then
    167. Me.MessageLbl.Text = "Es wurde kein gültiger Mehrwertsteuersatz angegeben!"
    168. Return
    169. End If
    170. If (GeldkontoCB.SelectedIndex = -1) Then
    171. Me.MessageLbl.Text = "Es wurd kein Geldkonto angegeben!"
    172. Return
    173. End If
    174. If (Me.BuchungskontoCB.SelectedIndex = -1) Then
    175. Me.MessageLbl.Text = "Es wurde kein Buchungskonto angegeben!"
    176. Return
    177. End If
    178. If (Me.FinanzbereichCB.SelectedIndex = -1) Then
    179. Me.MessageLbl.Text = "Es wurdde kein Geschäftsbereich angegeben!"
    180. Return
    181. End If
    182. If (Me.CheckBox1.Checked And Me.KostenstellenCB.SelectedIndex = -1) Then
    183. Me.MessageLbl.Text = "Es wurde keine Kostenstelle angegeben!"
    184. Return
    185. End If
    186. If (Me.BuchungsdatumDP.Value.Year <> Date.Now.Year) Then
    187. Me.MessageLbl.Text = "Es dürfen nur Buchungen innerhalb des laufenden Kalenderjahres vorgenommen werden!"
    188. Return
    189. End If
    190. If (Me.EditMode) Then
    191. With Me.Editdrv
    192. .BeginEdit()
    193. .Buchungsdatum = Me.BuchungsdatumDP.Value
    194. Dim dr As DataRow = KasseDataset.Buchungsart.FindByBuchungsartID(CInt(Me.BuchungsartCB.SelectedValue))
    195. If (dr!BuchungsartName.ToString = "Einlage") Then
    196. .Buchungswert = CDec(Me.BuchungswertTB.Text)
    197. Else
    198. .Buchungswert = CDec(String.Format("-{0}", Me.BuchungswertTB.Text))
    199. End If
    200. .Buchungstext = Me.BuchungstextTB.Text
    201. .Belegnummer = Me.BelegnummerTB.Text
    202. .BuchungsartID = CInt(Me.BuchungsartCB.SelectedValue)
    203. .GeldkontoID = CInt(Me.GeldkontoCB.SelectedValue)
    204. .BuchungskontoID = CInt(Me.BuchungskontoCB.SelectedValue)
    205. .BereichID = CInt(Me.FinanzbereichCB.SelectedValue)
    206. If (Me.CheckBox1.Checked) Then
    207. .KostenstellenID = CInt(Me.KostenstellenCB.SelectedValue)
    208. End If
    209. If (Me.CheckBox2.Checked) Then
    210. .MwStSatz = Decimal.Parse(CStr((CDec(Me.MwStCB.SelectedValue) / 100)))
    211. Else
    212. .MwStSatz = CDec(0.0)
    213. End If
    214. If (Me.BelegScanImgFileTB.Text.Trim.Length > 0) Then
    215. .BelegFile = Me.BelegScanImgFileTB.Text
    216. End If
    217. .EndEdit()
    218. End With
    219. Else
    220. Dim BuchungRowNew As KasseDataset.BuchungenRow = KasseDataset.Buchungen.NewBuchungenRow
    221. Try
    222. With BuchungRowNew
    223. .Buchungsdatum = Me.BuchungsdatumDP.Value
    224. Dim dr As DataRow = KasseDataset.Buchungsart.FindByBuchungsartID(CInt(Me.BuchungsartCB.SelectedValue))
    225. If (dr!BuchungsartName.ToString = "Einlage") Then
    226. .Buchungswert = CDec(Me.BuchungswertTB.Text)
    227. Else
    228. .Buchungswert = CDec(String.Format("-{0}", Me.BuchungswertTB.Text))
    229. End If
    230. .Buchungstext = Me.BuchungstextTB.Text
    231. .Belegnummer = Me.BelegnummerTB.Text
    232. .BuchungsartID = CInt(Me.BuchungsartCB.SelectedValue)
    233. .GeldkontoID = CInt(Me.GeldkontoCB.SelectedValue)
    234. .BuchungskontoID = CInt(Me.BuchungskontoCB.SelectedValue)
    235. .BereichID = CInt(Me.FinanzbereichCB.SelectedValue)
    236. If (Me.CheckBox1.Checked) Then
    237. .KostenstellenID = CInt(Me.KostenstellenCB.SelectedValue)
    238. Else
    239. .KostenstellenID = 0
    240. End If
    241. If (Me.CheckBox2.Checked) Then
    242. .MwStSatz = Decimal.Parse(CStr((CDec(Me.MwStCB.SelectedValue) / 100)))
    243. Else
    244. .MwStSatz = CDec(0.0)
    245. End If
    246. If (Me.BelegScanImgFileTB.Text.Trim.Length > 0) Then
    247. .BelegFile = Me.BelegScanImgFileTB.Text
    248. End If
    249. End With
    250. KasseDataset.Buchungen.AddBuchungenRow(BuchungRowNew)
    251. Catch ex As Exception
    252. FiBuHelper.LoggingError(ex)
    253. MsgBox(ex.InnerException.ToString)
    254. MsgBox(ex.ToString)
    255. MsgBox(ex.StackTrace)
    256. Return
    257. End Try
    258. End If
    259. If (srcBmp IsNot Nothing) Then
    260. srcBmp.Dispose()
    261. End If
    262. Me.Close()
    263. End Sub



    Ich bin Euch für alle hinweise, auch kritiken dankbar. Suche da schon seit gestern Nachtn ach der Ursache.
    warum konfigurierst du die Combos nicht im Designer?

    In deim Code seh ich garnet, wie und wo die konfiguriert werden.

    Ah - jetzt vermeine ich zu verstehen: Du lädst das Dataset nicht, sondern du weist es ja nur neu zu, und stöpselst dann alle BindingSources entsprechend um, weil die ja noch an das olle Dataset gebunden sind.

    Jo, dassis prinzipiell eine richtige Vorgehensweise für formübergreifendes Arbeiten mit Dataset. Kannst dir überlegen, ob du die DBExtensions nutzen willst - da ist das mit drin, und funzt auch, weil bei manuell alles umstöpseln kann man dich doch leicht verstöpseln.

    Aber warum Datensätze doppelt in der Combo auftauchen versteh ich nicht - ich tippe darauf, dass die Combo falsch eingerichtet ist.
    Könnteste überprüfen, indemde mal auffm MainForm eine gleiche Combo reinbastelst um zu gucken, ob das da auch auftritt.

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

    Das habe ich ja gemacht. Das ist ja das Problem, bzw. die Frage, warum der mir trotzdem die Einträge aus der Datenbank mittlerweile 3mal hintereinander anzeigt.

    //EDIT: hatte ich im Eröffnunspost vergessen zu schreiben, sorry.