![]() |
Datenbank: XML • Zugriff über: jar nischt.
.Net-Dataset Zugriffsprobleme
Hallo,
ich spiele gerade ein bisschen mit dem databinding in VC# rum. Ich hab ein DataGridView genommen und das an eine Tabelle in einem Dataset gebunden.
Code:
//Datensatz hinzufügen
/* dGVTimes.Rows.Add(tBJob.Text,System.DateTime.Now); //"Zeilen können nicht programmatisch hinzugefügt werden, wenn das Datagridview eine Datenbindung hat" */ CurrRow = dataTable1.Rows.Add(tBJob.Text, System.DateTime.Now, null); //funzt
Code:
Kann mir jemand erklären, warum ich einmal übers dataset und einmal übers datagridview gehen muss?!
//Datensatz ändern
dGVTimes.Rows[dGVTimes.Rows.Count - 1].Cells[2].Value = System.DateTime.Now; //funzt /* //funzt nicht -> nix passiert CurrRow.BeginEdit(); CurrRow.ItemArray.SetValue(System.DateTime.Now,2); CurrRow.EndEdit(); CurrRow.AcceptChanges(); CurrRow.Table.AcceptChanges(); */ |
Re: .Net-Dataset Zugriffsprobleme
Hallo DGL-luke,
Dein entscheidender Fehler dürfte AcceptChanges() sein; das führt häufiger zu Verwirrung. Damit werden nämlich alle Zeilen (insbesondere auch die gerade geänderte) auf DataRowState.Unchanged gesetzt, also alle Änderungen zurückgenommen. Durch EndEdit() wird aber gerade DataRowState.Modified gesetzt; durch einen nachfolgenden Aufruf von DataAdapter.Update(dataSet1) wird dieser Wert genutzt, um die Art der Speicherung (Insert, Update, Delete) zu bestimmen und auszuführen. Weitere Erläuterungen in der SDK-Doku unter Aktualisieren von Datenquellen mit DataAdapters und anderen Stichworten. Viel Erfolg weiterhin! Jürgen |
Re: .Net-Dataset Zugriffsprobleme
Hallo,
welchen DataAdapter meinst du da? Ich hab an datensensitiven Komponenten auf meiner Form nur das Dataset und das datagridview. Ich hab übrigens schon alles ausprobiert, mit oder ohne Acceptchanges, mit oder ohne begin-/endedit etc. PS: Ich hab visual C# Express, deswegen hab ich da auch nicht besonders viel auswahl bei den datenbankkompos ^^ |
Re: .Net-Dataset Zugriffsprobleme
Hallo,
der DbDataAdapter dürfte eigentlich auch bei VSCE vorhanden sein. Der DbDataAdapter ist zuständig für die Verbindung zwischen DataSet/DataTable und Datenbank. Willst Du mit WriteXml() speichern? Dann muss ich mit konkreteren Aussagen passen; DataTable und Xml habe ich bisher nur für das Einlesen vollständiger Daten verwendet. Aber Du solltest immer den Grundgedanken beachten: Trennung zwischen externen Daten (Datenbank oder xml), internen Daten (DataSet und DataTable) und der Eingabe/Anzeige (DataGrid bzw. DataGridView). Änderungen per Programmcode solltest Du niemals am DataGrid(View) vornehmen, sondern immer in DataTable.Rows (wie du es ja auch willst). Gruß Jürgen |
Re: .Net-Dataset Zugriffsprobleme
Die Lösung ist wieder einmal nicht wirklich offensichtlich. Besser gesagt, man weiß es einfach, oder man weiß es eben nicht ;) .
Code:
Hier wird zwar das Item-Array verändert, leider ist dieses aber nur eine Kopie der internen Daten der Row:
CurrRow.ItemArray.SetValue(System.DateTime.Now,2);
Code:
Um die DataRow wirklich zu verändern, kannst du entweder den Setter benutzen oder - wenn es wie in deinem Beispiel nur um einzelne Werte geht -
get
{ int defaultRecord = this.GetDefaultRecord(); object[] objArray = new object[this._columns.Count]; for (int i = 0; i < objArray.Length; i++) { DataColumn column = this._columns[i]; objArray[i] = column[defaultRecord]; } return objArray;
Code:
benutzen.
CurrRow[2] = System.DateTime.Now;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz