Hallo,
also mit folgendem Code habe ich eine
Die Logik ist, dass nur die Datenquelle keine Änderungen übernimmt, die getätigt wurden während der Haken nicht gesetzt war. Ist diese Lösung daher sinnvoll?
------------------------
Außerdem ist mir aufgefallen, dass
Was passiert da in diesem Fall genau? Werden aufgrund des Primärschlüssels die Einträge durch ein erneutes
Desweiteren geht
Viele Grüße
also mit folgendem Code habe ich eine
Datenquelle
und ein DataGridView
miteinander verknüpft. Fill
, Update
und Änderungen machen funktioniert alles. Ich möchte aber, das Änderungen nicht generell übernommen werden. Dafür also die CheckBox als Dummy-Absicherung. Trotzdem sollen im DGV jederzeit Änderungen gemacht werden können.Die Logik ist, dass nur die Datenquelle keine Änderungen übernimmt, die getätigt wurden während der Haken nicht gesetzt war. Ist diese Lösung daher sinnvoll?
VB.NET-Quellcode
- Option Strict On
- Public Class Form1
- Private da As New SqlDataAdapter
- Private a As SqlCommandBuilder
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
- Dim DBZ As New DBZugriff("Select * from DasIstEinTest", DBZugriff.Server.Servername, DBZugriff.DataBase.Databasename)
- Dim cmd = DBZ.CreateCommand
- da.SelectCommand = cmd
- a = New SqlCommandBuilder(da)
- End Sub
- Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
- If chkEdit.Checked Then
- DS1.DasIstEinTest.AcceptChanges()
- da.Update(DS1, "DasIstEinTest")
- Else
- If MessageBox.Show(Me, "Änderungsmodus war inaktiv", "Änderungsmodus muss vor den Änderungen freigeschaltet werden, Änderungen zurücksetzen?", MessageBoxButtons.YesNo) = DialogResult.Yes Then
- DS1.DasIstEinTest.RejectChanges()
- End If
- End If
- End Sub
- Private Sub btnLoad_Click(sender As Object, e As EventArgs) Handles btnLoad.Click
- da.Fill(DS1, "DasIstEinTest")
- End Sub
- Private Sub chkEdit_CheckedChanged(sender As Object, e As EventArgs) Handles chkEdit.CheckedChanged
- If Not chkEdit.Checked Then DS1.DasIstEinTest.RejectChanges()
- End Sub
- End Class
------------------------
Außerdem ist mir aufgefallen, dass
.Fill
in diesem Fall keine Multi-Einträge erzeugt. Ich habe einen Primärschlüssel auf der DasIstEinTest Tabelle, was ich sonst nie benutzt habe, ich schätze es liegt daran. (Musste sonst die Tabelle vor dem Fill
immer Clear
en)Was passiert da in diesem Fall genau? Werden aufgrund des Primärschlüssels die Einträge durch ein erneutes
Fill
überschrieben oder werden die Einträge geblockt? Wenn sich die Datenquelle ändert, dann bekomme ich bei erneutem Fill
auch die Änderungen mit. Fill
ich stattdessen nur mit einer Teilmenge, behalte ich trotzdem alle Einträge. Es sieht aus als überschreibt er nur die Zeilen, die den gleichen PK haben? In MSSQL wird stattdessen der Eintrag ja eigentlich geblockt, wenn ein PK bereits vorhanden ist.Desweiteren geht
Fill
offenbar an RejectChanges
vorbei. RejectChanges kann Änderungen vor dem Fill zurücksetzen aber der Fill bleibt Viele Grüße
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()