Wechsel der Datasource verursacht Fehler im DGV

  • VB.NET
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Wechsel der Datasource verursacht Fehler im DGV

    Hallo,

    in meiner Form habe ich ein Datagridview (mit Designer erstellt).
    Nun möchte ich gerne dieses DGV für diverse Daten nutzen.

    Vor dem Speichern prüfe ich einige Werte in den Zellen.
    Beim ersten Setzen der Datasource treten keine Probleme auf.

    Wechsel ich nun die Datenquelle (erst die alte löschen, mit datasource = nothing)
    bekomme ich bei dem Versuch der Datenprüfung den Fehler: Ein Ausnahmefehler des Typs "System.NullReferenceException"
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Verzichte ich auf die Überprüfung erhalte ich keine Fehlermeldung und die Daten werden korrekt in die Datenbank übernommen.
    Gruß Markus
    Vorgang:
    - datasource setzen
    - Prüfung
    - Prüfung ok --> Speichern
    - datasource nothing
    - datasource neu setzen
    - Prüfung -> hier kommt der Fehler
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    Westerwälder schrieb:

    Wechsel ich nun die Datenquelle (erst die alte löschen, mit datasource = nothing)
    bekomme ich bei dem Versuch der Datenprüfung den Fehler: Ein Ausnahmefehler des Typs "System.NullReferenceException"
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Verzichte ich auf die Überprüfung erhalte ich keine Fehlermeldung und die Daten werden korrekt in die Datenbank übernommen.
    Sieht so aus, als machest du etwas falsch bei der Überprüfung.
    Guten Morgen.
    Habe den Fehler lokalisiert.

    Nach Übergabe der Datenquelle an das DGV (datasource = ...)
    manipuliere ich einige Columns-Eigenschaft des DGV, wie
    - Visible, HeaderText usw.

    Verzichte ich auf diese Änderungen am DGV erhalte ich keine Fehlermeldung mehr.
    Das DGV macht halt optisch nun nicht mehr viel her.

    Gibt es da vlt. eine andere Möglichkeit?
    Gruß Markus
    Hier der Code

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Setup_Termine_Load(sender As Object, e As EventArgs) Handles Me.Load
    2. Me.Halt = True
    3. ' Mode:
    4. ' 101 - Abfall-Abfuhrtermine
    5. ' 102 - Serientermine
    6. ' 103 - Ultiomotermine
    7. ' 104 - Einzeltermine
    8. ' 105 - Ferientermine
    9. Me.Halt = False
    10. Me.Modus = 102
    11. Me.TS_Terminart.ComboBox.Text = "Serientermine"
    12. End sub
    13. Private Sub TS_Terminart_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TS_Terminart.SelectedIndexChanged
    14. If Me.Halt = True Then Exit Sub
    15. With Me.TS_Terminart.ComboBox
    16. If .Text = "Einzeltermine" Then
    17. ' Me.DTP_Datum.DataBindings.Remove(Me.DatumBinding)
    18. Me.EinzelTermin_104()
    19. Exit Sub
    20. End If
    21. If .Text = "Serientermine" Then
    22. ' Me.DTP_Startdatum.DataBindings.Remove(Me.StartdatumBinding)
    23. Me.SerienTermin_102()
    24. Exit Sub
    25. End If
    26. End With
    27. End Sub
    28. Private Sub SerienTermin_102()
    29. If Me.Halt = True Then Exit Sub
    30. Me.Modus = 102
    31. Me.DTP_Enddatum.Visible = False
    32. Me.DTP_Startdatum.Visible = True
    33. Me.DTP_Datum.Visible = False
    34. ' Me.DTP_Startdatum.DataBindings.Add(Me.StartdatumBinding)
    35. With Me.DGV_Termine 'Datagridview
    36. .EndEdit()
    37. .DataSource = Nothing
    38. .Columns.Clear()
    39. .Rows.Clear()
    40. End With
    41. With Kalender.DataQuelle ' Bindingsource
    42. .CancelEdit()
    43. .Filter = "Type = '" & Me.Modus & "'"
    44. End With
    45.  
    46. With Me.DGV_Termine
    47. .DataSource = Kalender.DataQuelle
    48. .Columns("ID").Visible = False
    49. .Columns("Type").Visible = False
    50. .Columns("TypeName").Visible = False
    51. .Columns("Anwenden").HeaderText = "Ak."
    52. .Columns("Anwenden").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
    53. With .Columns("Bezeichnung")
    54. .HeaderText = "Termin - Bezeichnung"
    55. .AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
    56. End With
    57. .Columns("Datum").Visible = False
    58. With .Columns("Startdatum")
    59. .HeaderText = "Startdatum"
    60. .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
    61. .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
    62. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    63. .DefaultCellStyle.Format = "d"
    64. End With
    65. With .Columns("Enddatum")
    66. .HeaderText = "Enddatum"
    67. .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
    68. .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
    69. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    70. .DefaultCellStyle.Format = "d"
    71. End With
    72. .Columns("Uhrzeit").Visible = False
    73. With .Columns("RT")
    74. .HeaderText = "Takt Type"
    75. .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
    76. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    77. End With
    78. With .Columns("Takt")
    79. .HeaderText = "Takt"
    80. .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
    81. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    82. End With
    83. With .Columns("DBR")
    84. .HeaderText = "Zähler"
    85. .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
    86. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    87. End With
    88. End With
    89. End Sub
    90. Private Sub EinzelTermin_104()
    91. If Me.Halt = True Then Exit Sub
    92. Me.Modus = 104
    93. Me.DTP_Enddatum.Visible = False
    94. Me.DTP_Startdatum.Visible = False
    95. Me.DTP_Datum.Visible = True
    96. ' Me.DTP_Datum.DataBindings.Add(DatumBinding)
    97. With Me.DGV_Termine 'Datagridview
    98. .EndEdit()
    99. .DataSource = Nothing
    100. .Columns.Clear()
    101. .Rows.Clear()
    102. End With
    103. With Kalender.DataQuelle ' Bindingsource
    104. .CancelEdit()
    105. .Filter = "Type = '" & Me.Modus & "'"
    106. End With
    107. With Me.DGV_Termine
    108. .DataSource = Kalender.DataQuelle
    109. .Columns("ID").Visible = False
    110. .Columns("Type").Visible = False
    111. .Columns("TypeName").Visible = False
    112. .Columns("Anwenden").HeaderText = "Ak."
    113. .Columns("Anwenden").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
    114. With .Columns("Bezeichnung")
    115. .HeaderText = "Termin - Bezeichnung"
    116. .AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
    117. End With
    118. With .Columns("Datum")
    119. .HeaderText = "Termindatum"
    120. .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
    121. .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
    122. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    123. .DefaultCellStyle.Format = "d"
    124. End With
    125. With .Columns("Uhrzeit")
    126. .HeaderText = "Uhrzeit"
    127. .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
    128. .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
    129. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    130. .DefaultCellStyle.Format = "d"
    131. End With
    132. .Columns("Startdatum").Visible = False
    133. .Columns("Enddatum").Visible = False
    134. .Columns("RT").Visible = False
    135. .Columns("Takt").Visible = False
    136. .Columns("DBR").Visible = False
    137. End With
    138. End Sub


    Gruß Markus
    hast du schonmal versucht was passiert wenn du

    VB.NET-Quellcode

    1. ​.Filter = "Type = '" & Me.Modus & "'"


    mal weg lässt?

    die columns sind auch alle vorhanden in der datasource?

    ich kenne mich mit dieser, ich nenne es mal manuellen art des databinding nicht aus, ich übergebe immer tabellen aus einem typ ds.
    ist viel einfacher und da lässt sich auch alles im vs designen
    Gruß Hannes