Benutzer mit den meisten Antworten
rowState für Update

Frage
-
Hallo zusammen,
ich stehe gerade mal wieder vor einem RIESEN Fragenzeichen, betreffend wo liegt das Problem.Ich möchte im DataGridView_CellContentClick() Event
den Inhalt einer Spalte verändern.Dazu setze ich den Wert der DataGridView Zelle.
TabZeitDataGridView.Rows(e.RowIndex).Cells("dgvcolZeitKorrektur").Value = 195 (alter Wert 180)Ich gehe davon aus, dass sich jetzt auch der Inhalt der gebundenen DataRow ändert.
Also
drv = CType(TabZeitDataGridView.Rows(e.RowIndex).DataBoundItem, DataRowView)
rowZeit = drv.Row
der Inhalt von rowZeit.ZeitKorrektur der Wert von 180 auf 195 ändert, was auch tatsächlich der Fall ist,
und der RowState von Unchanged auf Modified wechselt.
Der RowState bleibt allerdings auf Unchanged.
Nach dem Aufruf von
i = Me.TabZeitTableAdapter.Update(rowZeit)
Return ist i=1,
ist jedoch der Inhalt, nach dem erneuten Starten des Programms der alte.Ein Aufruf von
rowZeit.SetModified()
vor dem Update bringt auch keine Änderung.Hat mir jemand einen Tip bzw. Anregung wie ich zur Lösung? Sodass ich die veränderte Row abspeichern kann?
Gruss Peter
Inzwischen habe ich festgestellt, wenn ich die row auf diese Art verändere
rowZeit.ZeitKorrektur = frmDgvTime._Minuten
rowZeit.SetModified()
beim Aufruf von Modified, der Inhalt der Row, wieder auf den alten zurückgesetzt wird !??
Antworten
-
Inzwischen habe ich festgestellt, das nach dem ändern von Cell.Value ein BindingSource.EndEdit aufgerufen werden muss,
dass die Werte in die gebundene DataRow übernommen werden.Es war Versuch und Irrtum, nicht Durchblick wieso.
Gruss an Alle
Peter- Als Antwort markiert Elmar BoyeEditor Dienstag, 16. August 2011 18:41
-
Hallo Peter,
auch wenn Du die Lösung bereits selbst gefunden hast, eine Erklärung dazu:
Während eine Zeile bearbeitet wird, werden die Werte zunächst als Vorschlag (Proposed) betrachtet,
siehe dazu DataRow.BeginEdit. Dadurch ist es möglich eine Bearbeitung abzubrechen (CancelEdit).Das DataGridView führt diese Aktionen automatisch aus, wenn über die Benutzeroberfläche eine
neue Zeile angesteuert wird, in dem sie die CurrencyManager.EndCurrentEdit-Methode aufruft -
was im Falle einer BindingSource mit dem CurrencyManager identisch wäre.
Das landet wiederum über DataRowView.EndEdit bei DataRow.EndEdit.Manipulierst Du Daten direkt via Code so wird die Methode naturgemäß nicht automatisch ausgeführt,
da kein Wechsel der bearbeiteten Zeile vom DataGridView erkannt werden kann.Gruß Elmar
- Als Antwort markiert peter haus Mittwoch, 17. August 2011 06:34
Alle Antworten
-
Servus Peter,
warum das im einzelnen nicht funzt kann ich nicht sagen aber folgender Code funzt
dataAdapter1 = New OleDb.OleDbDataAdapter("Select * ....", DBCon.ConnectionString) 'Command erstellen für Update, insert und delete Dim commandBuilder1 As New OleDb.OleDbCommandBuilder(dataAdapter1) commandBuilder1.QuotePrefix = "[" commandBuilder1.QuoteSuffix = "]" 'Dim table1 As New DataTable() table1.Locale = System.Globalization.CultureInfo.InvariantCulture ' *** Primärschlüssel-Informationen beim Fill mit übernehmen dataAdapter1.MissingSchemaAction = MissingSchemaAction.AddWithKey dataAdapter1.Fill(table1) bindingSource1.DataSource = table1 DataGridView1.DataSource = bindingSource1 DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader) ' Hier jetzt deine Änderungen durchführen 'Speichern dataAdapter1.Update(CType(bindingSource1.DataSource, DataTable))
-
Inzwischen habe ich festgestellt, das nach dem ändern von Cell.Value ein BindingSource.EndEdit aufgerufen werden muss,
dass die Werte in die gebundene DataRow übernommen werden.Es war Versuch und Irrtum, nicht Durchblick wieso.
Gruss an Alle
Peter- Als Antwort markiert Elmar BoyeEditor Dienstag, 16. August 2011 18:41
-
Hallo Peter,
auch wenn Du die Lösung bereits selbst gefunden hast, eine Erklärung dazu:
Während eine Zeile bearbeitet wird, werden die Werte zunächst als Vorschlag (Proposed) betrachtet,
siehe dazu DataRow.BeginEdit. Dadurch ist es möglich eine Bearbeitung abzubrechen (CancelEdit).Das DataGridView führt diese Aktionen automatisch aus, wenn über die Benutzeroberfläche eine
neue Zeile angesteuert wird, in dem sie die CurrencyManager.EndCurrentEdit-Methode aufruft -
was im Falle einer BindingSource mit dem CurrencyManager identisch wäre.
Das landet wiederum über DataRowView.EndEdit bei DataRow.EndEdit.Manipulierst Du Daten direkt via Code so wird die Methode naturgemäß nicht automatisch ausgeführt,
da kein Wechsel der bearbeiteten Zeile vom DataGridView erkannt werden kann.Gruß Elmar
- Als Antwort markiert peter haus Mittwoch, 17. August 2011 06:34