[erledigt] DataSet aktualisieren



  • Ich habe Daten aus einer Datenbank in ein dataset geladen und gebe sie mit Hilfe des bindingNavigators aus. Ziel meines Programmes ist es, ein Feld zu ändern und auch nur dieses zu aktualisieren, was ich durch eine SQL-Anweisung (statt der Update-Methode) auch bewergstelligt habe.
    Allerdings tritt ein Proglem auf: Ich habe meinem DataSet ein Feld "isModified" hinzugefügt, das anzeigt, ob ein Datensatz bearbeitet wurde. Dieses Feld wird aber erst aktualisiert, wenn ich den Datensatz wechsle:

    String ^Befehl;
    Befehl = L"UPDATE Abfr_Texttabelle_" + label7->Text + " SET " 
    + label4->Text + " = '" + textBox2->Text +"' WHERE Symbol = '" + label5->Text + "';";
    connect = nullptr;
    befehl = nullptr;
    leser = nullptr;
    connect = gcnew OleDbConnection(verbindungsstr);
    connect->Open();
    befehl = connect->CreateCommand();
    befehl->CommandText = Befehl;
    leser = befehl->ExecuteReader();
    label8->Text = L"Datensatz geaendert";
    

    Da die Anzeige durch die Zuweisung "Label8->..." direkt geändert wurde, ist mir der Fehler erst aufgefallen, als ich meine Ergebnisse in eine Datei ausgegeben habe, da dort nur noch die noch nicht geänderten Zeilen ausgegeben werden sollen.

    Eine Wertzuweisung a la:
    dataset2->Tabels["Fehler"]->Rows[...
    hab ich leider auch nicht hin bekommen, da ich nicht wußte, die ich auf die aktuelle Zeile und bestimmte Spalte (isModified) zugreifen kann.



  • Hi,

    Eine DataRow hat die Property RowState, daran kannst Du erkennen, ob sich die Zeile geändert hat, gelöscht oder eingefügt wurde. Du musst das nicht manuell pflegen.
    Mit DataRow.ItemArray bekommst Du ein object[] der Spalteninhalte der Row, welches Du anpassen kannst und wieder in das ItemArray zurückschreiben kannst. Wenn Du ein strong typed dataset verwendest, sollten auch entsprechende Properties erzeugt worden sein.
    Verwendest Du eine BindingSource? Wenn ja kannst Du Dir mal BindingSource.EndEdit anschauen. Sie weiß auch welche Zeile Deiner DataTable die gerade dargestellte ist, wenn Du die Controls über sie angebunden hast.



  • witte schrieb:

    Hi,

    Eine DataRow hat die Property RowState, daran kannst Du erkennen, ob sich die Zeile geändert hat, gelöscht oder eingefügt wurde. Du musst das nicht manuell pflegen.
    Mit DataRow.ItemArray bekommst Du ein object[] der Spalteninhalte der Row, welches Du anpassen kannst und wieder in das ItemArray zurückschreiben kannst. Wenn Du ein strong typed dataset verwendest, sollten auch entsprechende Properties erzeugt worden sein.
    Verwendest Du eine BindingSource? Wenn ja kannst Du Dir mal BindingSource.EndEdit anschauen. Sie weiß auch welche Zeile Deiner DataTable die gerade dargestellte ist, wenn Du die Controls über sie angebunden hast.

    danke witte,
    mit EndEdit funktioniert es wunderbar:

    String ^Befehl;
    Befehl = L"UPDATE Abfr_Texttabelle_" + label7->Text + " SET " 
    + label4->Text + " = '" + textBox2->Text +"' WHERE Symbol = '" + label5->Text + "';";
    connect = nullptr;
    befehl = nullptr;
    leser = nullptr;
    connect = gcnew OleDbConnection(verbindungsstr);
    connect->Open();
    befehl = connect->CreateCommand();
    befehl->CommandText = Befehl;
    leser = befehl->ExecuteReader();
    label8->Text = L"Datensatz geaendert";
    bindingNavigator1->BindingSource->EndEdit()
    

Anmelden zum Antworten