Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   C# .Net-Dataset Zugriffsprobleme (https://www.delphipraxis.net/89499-net-dataset-zugriffsprobleme.html)

DGL-luke 1. Apr 2007 10:38

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:
//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();
*/
Kann mir jemand erklären, warum ich einmal übers dataset und einmal übers datagridview gehen muss?!

Jürgen Thomas 1. Apr 2007 12:36

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

DGL-luke 1. Apr 2007 13:03

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 ^^

Jürgen Thomas 1. Apr 2007 13:25

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

Khabarakh 1. Apr 2007 16:03

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:
CurrRow.ItemArray.SetValue(System.DateTime.Now,2);
Hier wird zwar das Item-Array verändert, leider ist dieses aber nur eine Kopie der internen Daten der Row:
Code:
    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;
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 -
Code:
CurrRow[2] = System.DateTime.Now;
benutzen.


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