AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken C# .Net-Dataset Zugriffsprobleme
Thema durchsuchen
Ansicht
Themen-Optionen

.Net-Dataset Zugriffsprobleme

Ein Thema von DGL-luke · begonnen am 1. Apr 2007 · letzter Beitrag vom 1. Apr 2007
Antwort Antwort
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

.Net-Dataset Zugriffsprobleme

  Alt 1. Apr 2007, 11:38
Datenbank: XML • Zugriff über: jar nischt.
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?!
Lukas Erlacher
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: .Net-Dataset Zugriffsprobleme

  Alt 1. Apr 2007, 13:36
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: .Net-Dataset Zugriffsprobleme

  Alt 1. Apr 2007, 14:03
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 ^^
Lukas Erlacher
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: .Net-Dataset Zugriffsprobleme

  Alt 1. Apr 2007, 14:25
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: .Net-Dataset Zugriffsprobleme

  Alt 1. Apr 2007, 17:03
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz