Aktualisieren von Dataset und Datasource VS2005

23/07/2009 - 14:37 von Stefan Lindenstruth | Report spam
Hallo,
ich habe eine form in der ich ein DatagridView (DG1) mit einer Tabelle einer
Access-DB verbunden habe. Die Daten werden auch alle dargestellt. Um die
Daten zu àndern, habe ich die Textfelder an die Datatable gebunden. Wenn ich
in einem Datensatz in einem Textfeld eine Änderung durchführe und diese mit
der Schaltflàche btnAkzept quittiere, mache ich in der Routine ein
Ds.AcceptChanges. In dem DataGridView wird diese Änderung auch angezeigt.
Aber DS.HasChanges ist false, und damit wird natürlich auch meine Tabelle
nicht aktualisiert.
Was mache ich falsch?
Danke im Voraus
Stefan


Private Cn As OleDbConnection
Private Cmd As OleDbCommand
Private Da As OleDbDataAdapter
Private Ds As DataSet
Private Dt As DataTable
Private Dv As DataView
Private Bs As BindingSource

Private mMSGClick As MsgBoxResult


Private Sub DatenLaden()

Dim strCNN As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\tmp\db1.mdb"

Try

Cn = New OleDbConnection(strCNN)
Cmd = New OleDbCommand("Personen", Cn)
Cmd.CommandType = CommandType.TableDirect
Da = New OleDbDataAdapter(Cmd)
Ds = New DataSet
Da.Fill(Ds, "Personen")
Dt = New DataTable
Dt = Ds.Tables(0)

Bs = New BindingSource
Bs.DataSource = Dt

Dt.DefaultView.Sort = "Name"
DG1.DataSource = Dt

Me.txtName.DataBindings.Add("text", Dt, "Name")
Me.txtVorname.DataBindings.Add("text", Dt, "Vorname")
Me.txtAusweisnummer.DataBindings.Add("text", Dt, "Ausweisnummer")
Me.txtFirma.DataBindings.Add("text", Dt, "Firma")
Me.DTPick.DataBindings.Add("text", Dt, "Geburtsdatum")

Catch ex As OleDbException
MessageBox.Show("OLEDB-Error: " & ex.Message)
Finally
Cn.Close()
End Try

End Sub

Private Sub DatenFiltern()

Dim Ta As DataTable = Bs.DataSource

If Me.optName.Checked Then
Ta.DefaultView.RowFilter = "Name Like '" & txtSQL.Text.ToUpper &
"%'"
Else
Ta.DefaultView.RowFilter = "Ausweisnummer Like '" &
txtSQL.Text.ToUpper & "%'"
End If
Ta.DefaultView.Sort = "Name"
If Ta.DefaultView.Count > 0 Then
Dim Drv As DataRowView = Ta.DefaultView(0)
Else
Ta.DefaultView.RowFilter = ""
MsgBox("Keine Daten gefunden, setze Filter zurück")
txtSQL.Text = ""
txtSQL.Focus()
End If
DG1.CurrentCell = DG1.Rows(0).Cells(0)

End Sub

Private Sub txtSQL_TextChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles txtSQL.TextChanged
DatenFiltern()
End Sub

Private Sub optName_CheckedChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles optName.CheckedChanged

If optName.Checked Then

Dim p As New Point(Me.txtSQL.Location.X, Me.optName.Location.Y)
Me.txtSQL.Location = p

Else
Dim p As New Point(Me.txtSQL.Location.X,
Me.optAusweisNr.Location.Y)
Me.txtSQL.Location = p
End If
End Sub


Private Sub btnAktzept_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnAktzept.Click

Ds.AcceptChanges()

If Ds.HasChanges Then
MsgBox("Datensatz wurde geàndert")
End If

Bs.EndEdit()
Da.Update(Ds, "Personen")

Call FelderAktivieren(False)
End Sub
 

Lesen sie die antworten

#1 Ralf Schmidt
23/07/2009 - 15:22 | Warnen spam
Stefan Lindenstruth <Stefan schrieb:

ich habe eine form in der ich ein DatagridView (DG1) mit einer Tabelle einer
Access-DB verbunden habe. Die Daten werden auch alle dargestellt. Um die
Daten zu àndern, habe ich die Textfelder an die Datatable gebunden. Wenn ich
in einem Datensatz in einem Textfeld eine Änderung durchführe und diese mit
der Schaltflàche btnAkzept quittiere, mache ich in der Routine ein
Ds.AcceptChanges. In dem DataGridView wird diese Änderung auch angezeigt.
Aber DS.HasChanges ist false, und damit wird natürlich auch meine Tabelle
nicht aktualisiert.
Was mache ich falsch?



Beim àndern von Daten wird die Row auf Modified gesetzt.
Bei einem Update sucht der DataAtapter danach um sie zurück in die Tabelle zu schreiben.
Durch das AcceptChanges wird diese Modified aber wieder zurückgesetzt und die Daten "Akzeptiert".
Und da ja nix mehr Modified ist gibt HasChange auch ein False zurück.

Ähnliche fragen