Benutzer mit den meisten Antworten
Datagridview ändern und an Datasource weitergeben

Frage
-
Hallo Leute,
ich stehe hier vor einem Problem und komme einfach nicht weiter.
Ich haben eine Datagridview (DGVTask) und lasse mir in einer RTFbox einen Wert anzeigen (ungebunden). Wenn ich die RTFbox ändere führe ich folgende Funktion aus damit der aktuelle Inhalt in die Zelle zurückgeschrieben wird.
Private Sub RtfZusatzinfo_LostFocus(sender As Object, e As EventArgs) Handles RtfZusatzinfo.LostFocus DGVTask.CurrentRow.Cells(GridCol.Zusatzinfo).Value = RtfZusatzinfo.Rtf End Sub
Das alles funktioniert.
Wenn ich jetzt die Zeile im DGVTask wechsle, dann ändert sich auch der DataRowState in der zugrundeliegenden Tabelle, so dass ich alle geänderten Rows speichern kann.
Private Sub BtnSave_Click(sender As Object, e As EventArgs) Handles BtnSave.Click Dim strSQL As String = "" Dim dRow As Data.DataRow Try For Each dRow In DSet_Atom.Tables("tblTask").GetChanges.Rows If dRow.RowState = DataRowState.Modified Then strSQL = "UPDATE tblTask SET " & "tblTask.olSubject = ?" & " , tblTask.olBody = ?" & " , tblTask.olCompanies = ?" & " , tblTask.olDueDate = ?" & " , tblTask.olStartDate = ?" & " , tblTask.olRemindertime = ?" & " , tblTask.olReminderset = ?" & " , tblTask.MitarbeiterID = ?" & " , tblTask.Dateiname = ?" & " , tblTask.Taskliste = ?" & " , tblTask.IsComplete = ?" & " , tblTask.Flag = ?" & " , tblTask.Kategorie = ?" & " , tblTask.Zusatzinfo = ?" & " WHERE (((tblTask.olEntryID)=" & dRow("olEntryID") & "));" ElseIf dRow.RowState = DataRowState.Added Then strSQL = "INSERT INTO tblTask (olSubject, olBody, olCompanies, olDueDate" & ", olStartDate, olRemindertime, olReminderset, MitarbeiterID, Dateiname, Taskliste, IsComplete, " & "Flag, Kategorie, Zusatzinfo) VALUES (@olSubject, @olBody, olCompanies, @olDueDate" & ", @olStartDate, @olRemindertime, @olReminderset, @MitarbeiterID, @Dateiname, @Taskliste, @IsComplete, " & "@Flag, @Kategorie, @Zusatzinfo)" End If Dim cmdUpdate As New OleDbCommand(strSQL, oledb_Notizen) With cmdUpdate.Parameters .Add("@olSubject", OleDbType.Char).Value = dRow("olSubject") .Add("@olBody", OleDbType.Char).Value = dRow("olBody") .Add("@olCompanies", OleDbType.Char).Value = dRow("olCompanies") .Add("@olDueDate", OleDbType.Date).Value = If(IsDBNull(dRow("olDueDate")), DBNull.Value, CDate(dRow("olDueDate"))) .Add("@olStartDate", OleDbType.Date).Value = If(IsDBNull(dRow("olStartDate")), DBNull.Value, CDate(dRow("olStartDate"))) 'd=Short Date .Add("@olRemindertime", OleDbType.Date).Value = If(IsDBNull(dRow("olRemindertime")), DBNull.Value, CDate(dRow("olRemindertime"))) 't=Short Time .Add("@olReminderset", OleDbType.Boolean).Value = dRow("olReminderset") .Add("@MitarbeiterID", OleDbType.Integer).Value = dRow("MitarbeiterID") .Add("@Dateiname", OleDbType.Char).Value = dRow("Dateiname") .Add("@Taskliste", OleDbType.Boolean).Value = dRow("Taskliste") .Add("@IsComplete", OleDbType.Boolean).Value = dRow("IsComplete") .Add("@Flag", OleDbType.Integer).Value = dRow("Flag") .Add("@Kategorie", OleDbType.Char).Value = dRow("Kategorie") .Add("@Zusatzinfo", OleDbType.Char).Value = dRow("Zusatzinfo") End With cmdUpdate.ExecuteNonQuery() Next DSet_Atom.Tables("tblTask").AcceptChanges() Catch ex As System.Exception 'System.Windows.Forms.MessageBox.Show("Error " & Err.Number & ": (" & Err.Description & ") in Prozedur BtnSave_Click von Modul Notiz_Desktop.FrmTaskliste", "Fehler in Zeile: " & Erl()) End Try End Sub
Wenn ich jetzt aber direkt aus der RTFbox die Speicherung durchführe, dann ändert sich nicht der DataRowState in der zugrundeliegenden Tabelle.
Meine Frage ist nun, wie kann ich das DGVTask veranlassen, den RowState zu ändern, ohne das ich einen Zeilenwechsel durchführen muss.
Ich bin mir sicher, dass ist ruckzuck erledigt, aber ich komme einfach nicht darauf.
Vielen Dank im Voraus.
Gruß Ahmed
Antworten
-
Hi Ahmed,
Du musst Dir den aktuellen für die Bindung zuständigen CurrencyManager besorgen und ein EndCurrentEdit auslösen.Ich finde diese Arbeitsweise aber unpassend. Besser ist es, die Änderungen in die Datenquelle zu schreiben. Wenn Du ein passende Datenquelle nutzt (z.B. DataTable), dann werden die Änderungen auch sofort angezeigt. Mit dem Schreiben in die DataRow wird auch der RowState auf modified gesetzt.
--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks- Als Antwort markiert Ahmed Martens Sonntag, 20. Januar 2019 09:51
Alle Antworten
-
Hi Ahmed,
Du musst Dir den aktuellen für die Bindung zuständigen CurrencyManager besorgen und ein EndCurrentEdit auslösen.Ich finde diese Arbeitsweise aber unpassend. Besser ist es, die Änderungen in die Datenquelle zu schreiben. Wenn Du ein passende Datenquelle nutzt (z.B. DataTable), dann werden die Änderungen auch sofort angezeigt. Mit dem Schreiben in die DataRow wird auch der RowState auf modified gesetzt.
--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks- Als Antwort markiert Ahmed Martens Sonntag, 20. Januar 2019 09:51