Probleme mit SelectedIndex

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von habunus.

    Probleme mit SelectedIndex

    Hallo,

    habe folgenden Code womit ich die Anzahl der Vertragsarten aufzähle und in einer Combobox ausgebe.
    Nun will ich die Combobox selektieren wenn Vertrag1Vertrag_id gleich dem Datensatz aus der Datenbank vom Kunde übereinstimmt.

    VB.NET-Quellcode

    1. cmd.CommandText = "select vertragsart from vertrag"
    2. reader = cmd.ExecuteReader()
    3. Do While reader.Read()
    4. ComboBoxVertrag1VertragAufzaehlung.Items.AddRange((New Object() {reader.Item("vertragsart")})) 'Dropdown von Vertrag1 Aufzählung der Vertragsarten einfüllen
    5. If Vertrag1Vertrag_id = reader.Item("vertragsart") Then
    6. ComboBoxVertrag1VertragAufzaehlung.SelectedIndex = Vertrag1Vertrag_id
    7. End If
    8. Loop
    9. reader.Close()
    10. Catch myerror As MySqlException
    11. MsgBox(myerror.Message)
    12. End Try


    Wenn ich das nun durchlaufen lasse bekomme ich in Zeile 9 folgenden Fehler:

    ArgumentOutOfRangeException wurde nicht behandelt
    InvalidArgument=Value mit dem Wert 2 ist für SelectedIndex ungültig.
    Parametername: SelectedIndex

    Wo muß ich da ansetzten????

    Habunus
    weldhe ID hat die vertrags ID?
    der Index bei einer Combobox fängt mit 0 an ;)

    probier mal Vertrag1Vertrags_id - 1

    VB.NET-Quellcode

    1. ComboBoxVertrag1VertragAufzaehlung.SelectedIndex = Vertrag1Vertrag_id -1


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

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

    Hallo Fichz,

    vielen Dank es funktioniert ;)
    Habe aber nun einen folge Fehler durch diese Änderung, die wie folgt lautet:

    There is alleady an open DataReader associated whit this Connection which must be close first

    Wenn ich ComboBoxVertrag1VertragAufzaehlung.SelectedIndex = Vertrag1Vertrag_id -1 auskommentiere dann ist der Fehler weg.

    Hast du da ein Plan woran das liegen könnte??

    habunus
    Hallo,

    der Code wird direkt in der Haupform ausgeführt, habe hier kein Event hinterlegt.

    hier mal mein Code

    VB.NET-Quellcode

    1. Imports MySql
    2. Imports MySql.Data
    3. Imports MySql.Data.MySqlClient
    4. Imports MySql.Data.Types
    5. Imports System
    6. Imports Microsoft.Win32
    7. Imports System.Text
    8. Public Class kunden_bearbeiten
    9. Dim kundegruppe_id As Integer = 0
    10. Dim Vertrag1Vertrag_id As Integer = 0
    11. 'Jahr ermitteln
    12. Dim Jahr As String = DateTime.Now.ToString("yyyy")
    13. Dim knd_id As String = kunden_suchen.DataGridView_suche_Kunde.Item(1, kunden_suchen.DataGridView_suche_Kunde.CurrentRow.Index).Value
    14. Private Sub kunden_bearbeiten_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    15. 'Hauptform
    16. 'Datenbanverbindung erstellen
    17. Dim cmd As New MySqlCommand
    18. Dim reader As MySqlDataReader
    19. cmd.Connection = mysql_con.conn
    20. 'Kundendaten auslesen von der Tabelle Kunden
    21. cmd.CommandText = "select id,freischaltung,userlevel,passwort,login_datum,knd,anrede,vorname,nachname,strasse,hausnummer,plz,ort,telefon,telefongesch,fax,email,geburtstag,datenschutz,infos_werbung,kundengruppe,bemerkung from kunden Where knd = " & knd_id & ""
    22. Try
    23. reader = cmd.ExecuteReader()
    24. Do While reader.Read()
    25. kundegruppe_id = reader.Item("kundengruppe")
    26. 'Anrede
    27. Dim anrede As String = ""
    28. If reader.Item("anrede") = 1 Then
    29. anrede = "Herr"
    30. Else
    31. anrede = "Frau"
    32. End If
    33. 'Benutzerlevel
    34. Dim userlevel As String = ""
    35. If reader.Item("userlevel") = 0 Then
    36. userlevel = "Benutzer"
    37. Else
    38. End If
    39. 'Login
    40. Dim freischaltung As String = ""
    41. If reader.Item("freischaltung") = 0 Then
    42. freischaltung = "Login verweigern"
    43. Else
    44. freischaltung = "Login erlauben"
    45. End If
    46. ComboBoxAllgemeinAnrede.SelectedText = anrede 'Füge hier die anrede ein vom Kunden
    47. TextBoxAllgemeinKnd.Text = reader.Item("knd") 'Füge hier die Knd ein vom Kunden
    48. TextBoxVertrag1Knd.Text = reader.Item("knd") 'Füge hier die knd ein vom Kunden
    49. TextBoxAllgemeinVorname.Text = reader.Item("vorname") 'Füge hier die vorname ein vom Kunden
    50. TextBoxAllgemeinNachname.Text = reader.Item("nachname") 'Füge hier die nachname ein vom Kunden
    51. TextBoxAllgemeinStrasse.Text = reader.Item("strasse") 'Füge hier die strasse ein vom Kunden
    52. TextBoxAllgemeinHausnummer.Text = reader.Item("hausnummer") 'Füge hier die hausnummer ein vom Kunden
    53. TextBoxAllgemeinPlz.Text = reader.Item("plz") 'Füge hier die plz ein vom Kunden
    54. TextBoxAllgemeinOrt.Text = reader.Item("ort") 'Füge hier die hausnummer ein vom Kunden
    55. TextBoxAllgemeinTel.Text = reader.Item("telefon") 'Füge hier die telefon ein vom Kunden
    56. TextBoxAllgemeinTelgesch.Text = reader.Item("telefongesch") 'Füge hier die telefon geschäftlich ein vom Kunden
    57. TextBoxAllgemeinFax.Text = reader.Item("fax") 'Füge hier die fax ein vom Kunden
    58. TextBoxAllgemeinEmail.Text = reader.Item("email") 'Füge hier die email ein vom Kunden
    59. MaskedTextBoxAllgemeinGeburtstag.Text = reader.Item("geburtstag") 'Füge hier das geburtdatum ein vom Kunden
    60. TextBoxAllgemeinPasswort.Text = reader.Item("passwort") 'Füge hier das passwort ein vom Kunden
    61. ComboBoxAllgemeinUserlevel.SelectedText = userlevel 'Füge hier den Benutzerlevel ein vom Kunden
    62. ComboBoxAllgemeinFreischaltung.SelectedText = freischaltung 'Füge hier die Freischalten ein vom Kunden
    63. TextBoxBemerkungBemerkung.Text = reader.Item("bemerkung") 'Füge hier die bemerkung ein vom Kunden
    64. Loop
    65. reader.Close()
    66. Catch myerror As MySqlException
    67. MsgBox(myerror.Message)
    68. End Try
    69. '###################################################
    70. cmd.CommandText = "select id,knd_gruppe1,knd_gruppe_text1,knd_gruppe2,knd_gruppe_text2,knd_gruppe3,knd_gruppe_text3,knd_gruppe4,knd_gruppe_text4,knd_gruppe5,knd_gruppe_text5,knd_gruppe6,knd_gruppe_text6,knd_gruppe7,knd_gruppe_text7,knd_gruppe8,knd_gruppe_text8,knd_gruppe9,knd_gruppe_text9,knd_gruppe10,knd_gruppe_text10 from kundengruppen"
    71. Try
    72. Dim counter As Integer = 1 'Zähler für die Schleife
    73. Dim x As Integer = 0 'Zähler für combobox select
    74. Dim i As Integer ' für for schleife
    75. reader = cmd.ExecuteReader()
    76. reader.Read()
    77. For i = 0 To 9 Step 1
    78. ComboBoxAllgemeinKundengruppe.Items.AddRange((New Object() {reader.Item("knd_gruppe_text" & counter)}))
    79. If x = kundegruppe_id Then
    80. ComboBoxAllgemeinKundengruppe.SelectedIndex = x
    81. End If
    82. counter = counter + 1
    83. x = x + 1
    84. Next i
    85. reader.Close()
    86. Catch myerror As MySqlException
    87. MsgBox(myerror.Message)
    88. End Try
    89. '###################################################
    90. 'Kundendaten auslesen von der Kunden_Vertrag1
    91. cmd.CommandText = "select vertrag,vertrag_erhalten_am,lastschriftverfahren,kunde_angeschlossen_am,vertrags_ende,gekuendigt_am,inkasso,demontiert,demontiert_am,buchungsintervall,vertrags_bruttopreis,bemerkung from kunden_vertrag1 Where knd = " & knd_id & ""
    92. Try
    93. reader = cmd.ExecuteReader()
    94. Do While reader.Read()
    95. Dim lastschriftverfahren_vertrag1 As String = ""
    96. If reader.Item("lastschriftverfahren") = 0 Then
    97. lastschriftverfahren_vertrag1 = "Nein"
    98. Else
    99. lastschriftverfahren_vertrag1 = "Ja"
    100. End If
    101. ComboBoxAllgemeinLastschriftVertrag1.SelectedText = lastschriftverfahren_vertrag1
    102. Vertrag1Vertrag_id = reader.Item("vertrag")
    103. MaskedTextBoxVertrag1erhaltenam.Text = reader.Item("vertrag_erhalten_am")
    104. MaskedTextBoxVertrag1Kundeangeschlossenam.Text = reader.Item("kunde_angeschlossen_am")
    105. MaskedTextBoxVertrag1Gekuendigtam.Text = reader.Item("gekuendigt_am")
    106. TextBoxVertrag1Vertragssumme.Text = reader.Item("vertrags_bruttopreis")
    107. Loop
    108. reader.Close()
    109. 'Zähle mir die vertragsart aus vertrag
    110. cmd.CommandText = "select vertragsart from vertrag"
    111. reader = cmd.ExecuteReader()
    112. Do While reader.Read()
    113. ComboBoxVertrag1VertragAufzaehlung.Items.AddRange((New Object() {reader.Item("vertragsart")}))
    114. 'ComboBoxVertrag2VertragAufzaehlung.Items.AddRange((New Object() {reader.Item("vertragsart")}))
    115. If Vertrag1Vertrag_id = reader.Item("vertragsart") Then
    116. ComboBoxVertrag1VertragAufzaehlung.SelectedIndex = Vertrag1Vertrag_id - 1
    117. End If
    118. Loop
    119. reader.Close()
    120. Catch myerror As MySqlException
    121. MsgBox(myerror.Message)
    122. End Try
    123. '###################################################
    124. 'Kundendaten auslesen von der Kunden_Vertrag2
    125. cmd.CommandText = "select vertrag,vertrag_erhalten_am,lastschriftverfahren,kunde_angeschlossen_am,vertrags_ende,gekuendigt_am,inkasso,demontiert,buchungsintervall,vertrags_bruttopreis,bemerkung,telefonnr1,telefonnr2,telefonnr3,telefonnr4,telefonnr5,user1,user2,user3,user4,user5,pass1,pass2,pass3,pass4,pass5 from kunden_vertrag2 Where knd = " & knd_id & ""
    126. Try
    127. reader = cmd.ExecuteReader()
    128. Do While reader.Read()
    129. Dim lastschriftverfahren_vertrag2 As String = ""
    130. If reader.Item("lastschriftverfahren") = 0 Then
    131. lastschriftverfahren_vertrag2 = "Nein"
    132. Else
    133. lastschriftverfahren_vertrag2 = "Ja"
    134. End If
    135. ComboBoxAllgemeinLastschriftVertrag2.SelectedText = lastschriftverfahren_vertrag2
    136. Loop
    137. reader.Close()
    138. Catch myerror As MySqlException
    139. MsgBox(myerror.Message)
    140. End Try
    141. '###################################################
    142. End Sub
    143. public Sub ComboBoxVertrag1VertragAufzaehlung_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxVertrag1VertragAufzaehlung.SelectedIndexChanged
    144. Dim cmd As New MySqlCommand
    145. Dim reader As MySqlDataReader
    146. cmd.Connection = mysql_con.conn
    147. cmd.CommandText = "select * from vertrag Where vertragsart=" & ComboBoxVertrag1VertragAufzaehlung.SelectedItem & ""
    148. Try
    149. reader = cmd.ExecuteReader()
    150. Do While reader.Read()
    151. TextBoxVertrag1TextAusgabe.Text = reader.Item("vertrags_kurzbezeichnung")
    152. TextBoxVertrag1Vertragssumme.Text = reader.Item("vertrags_bruttopreis")
    153. Loop
    154. reader.Close()
    155. Catch myerror As MySqlException
    156. MsgBox(myerror.Message)
    157. End Try
    158. '#############################################################
    159. End Sub
    160. '#############################################################
    161. Private Sub schließen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles schließen.Click
    162. Close() 'Fenster schließen
    163. End Sub
    164. End Class


    Habunus

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

    VB.NET-Quellcode

    1. public Sub ComboBoxVertrag1VertragAufzaehlung_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxVertrag1VertragAufzaehlung.SelectedIndexChanged
    2. Dim cmd As New MySqlCommand
    3. Dim reader As MySqlDataReader
    4. cmd.Connection = mysql_con.conn
    5. cmd.CommandText = "select * from vertrag Where vertragsart=" & ComboBoxVertrag1VertragAufzaehlung.SelectedItem & ""
    6. Try
    7. reader = cmd.ExecuteReader()
    8. Do While reader.Read()
    9. TextBoxVertrag1TextAusgabe.Text = reader.Item("vertrags_kurzbezeichnung")
    10. TextBoxVertrag1Vertragssumme.Text = reader.Item("vertrags_bruttopreis")
    11. Loop
    12. reader.Close()
    13. Catch myerror As MySqlException
    14. MsgBox(myerror.Message)
    15. End Try
    16. '#############################################################
    17. End Sub

    dieses event wird aufgerufen wenn du den index setzt.
    da will er erneut eine Verbindung aufbauen welche aber bereits geöffnet ist. ;)

    EDIT: Siehste schön wennst mitn Debugger im Einzelschritt durchlaufst

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    im debugger wirst es sehen.
    wenn die zeile

    VB.NET-Quellcode

    1. ComboBoxVertrag1VertragAufzaehlung.SelectedIndex = Vertrag1Vertrag_id - 1

    ausgeführt wird hüpft er in das selectedindexchanged event
    dort baust du eine erneute verbindung auf.
    die verbindung würde erst dann geschlossen werden, wenn das selectedindexchanged event fertig ist.

    da tritt aber halt der fehler auf.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten