| |
ADO.NET / DatenbankenAufbau und Funktion der DataTable | | | Autor: spatzimatzi | Datum: 05.05.15 19:36 |
| Hallo,
den grundsätzlichen Aufbau einer Tabelle kenne ich schon.
Die Tabelle besteht aus Spalten und Reihen
Auslesen aller Daten kann ich auch, in dem ich zu jeder Reihe jede Spalte auslesen.
Jetzt wollte ich mich etwas näher mit der Materie beschäftigen und schon stellen sich viele Fragen.
Und das Nachlesen in den Büchern hat keine Antworten auf meine Fragen ergeben.
Mein Problem:
Bei einer DataTable gibt es zusätzliche Spalten wie:
- Current
- Original
- Proposed und
- Default
Zusätzlich gibt es noch den RowState
Annahme:
Nehmen wir an, wir haben eine Tabelle mit 3 Spalten mit den Werten A, B und C
S1 S2 S3
A...B...C
Meine Fragen:
Es wird immer davon geschrieben, dass die Daten, abhängig von ihrem Verarbeitungszustnad in unterschiedlichen Spalten stehen und das es dann jeweils einen festdefinierten Zustand gibt.
Und hier ist der erste Knackpunkt:
1. Gibt es die Bearbeitungsspalten (Current, Original, ...) für jedes Feld
S1 ->..............................................S2 -> ...
Current Original Proposed Default Current Original ...
A...........?...........?..............?...........B...
2. Steht jeweils der komplette Datensatz mit den 3 Feldern in den einzelnen Bearbeitungsspalten
Current Original Proposed Default...
ABC.......?...........?..............?.........
3. Oder sind die Felder komplett anders organisiert
4. Gilt der RowState jeweils für die einzelnen Spalten oder für die ganze Zeile
5. Wenn die Daten frisch von der DB geladen wurden, in welcher Bearbeitungsspalte stehen die Daten
6. Was geschieht nach BeginEdit
Wo landen die künftigen Änderungen
7. Was geschieht bei EndEdit
Werden die Daten verschoben? Wenn ja, wohin?
8. Habe in der Vergangenheit die Tabelle mit HasChanges auf Änderungen abgefragt.
Da es bei RichTextBoxen damit Probleme gab (es wurden immer Änderungen erkannt),
würde ich gerne selber die Tabelle auf Änderungen untersuchen
9. Welche Aspekte sollte man als Anwender noch grundsätzlich berücksichtigen?
Ich weiß, es sind viele Fragen. Aber ich möchte endlich mal verstehen,
wie die DataTable funktioniert
Habe auch schon viele Bücher gelesen. Aber so richtig erklärende Beispiele
habe ich nicht gefunden.
Würde mich riesig freuen, wenn ihr helfen würdet!!
Viele Grüße
spatzimatzi | |
Re: Aufbau und Funktion der DataTable | | | Autor: Manfred X | Datum: 05.05.15 20:32 |
| Hallo!
Sind die Fach-Bücher wirklich so unverständlich ????
Die Datatable besteht aus einem Tabellenschema
(im wesentlichen sind das die Definitionen der Columns)
und Zeilen (DataRow), die nach diesem Schema mit Daten gefüllt sind.
Wie der Name schon sagt, bezieht sich "RowState"-Eigenschaft
der "DataRow"-Klasse auf die einzelnen Zeilen in einer Table.
[I]Der Wert von RowState hängt von zwei Faktoren ab:
der Art des Vorgangs, der an der Zeile ausgeführt wurde,
und ob AcceptChanges für die DataRow aufgerufen wurde.[/I]
DataRowState-Enumeration
Die Datatable kann Änderungen wieder rückgängig machen und zwar durch die
RejectChanges-Methode.
Die DataTable-"AcceptChanges"-Methode sollte man im Code für eine Table,
die aus der DB gefüllt worden ist, nicht aufrufen, weil danach für den Adapter
nicht mehr erkennbar ist, ob ein Update der modifizierten Zeilen erforderlich wird.
Was ist am Mechanismus von BeginEdit/CancelEdit/EndEdit einer Datarow unklar?
Er bietet die Möglichkeit, Änderungen an den Werten zurück zu nehmen.
[I]Versetzen Sie eine DataRow mit der BeginEdit-Methode in den Bearbeitungsmodus.
In diesem Modus werden [B]Ereignisse vorübergehend unterbrochen, so dass der Benutzer
Änderungen an einer Reihe von Zeilen vornehmen kann, ohne dass dabei Validierungsregeln
ausgelöst werden.
Wenn Sie z. B. sicherstellen müssen, dass der Wert der Spalte für einen Gesamtbetrag
den Werten der Spalten Soll und Haben in einer Zeile entspricht, können Sie jede Zeile
in den Bearbeitungsmodus versetzen und so die Validierung der Zeilenwerte unterbrechen,
bis der Benutzer einen Commit für die Werte ausführt.
Die BeginEdit-Methode wird implizit aufgerufen, wenn der Benutzer den Wert eines
datengebundenen Steuerelements ändert.
Die EndEdit-Methode wird implizit aufgerufen, wenn die AcceptChanges-Methode für das
DataTable-Objekt aufgerufen wird.
Im Bearbeitungsmodus speichert die DataRow Darstellungen der ursprünglichen und neu
vorgeschlagenen Werte.
Solange die EndEdit-Methode nicht aufgerufen wurde, können Sie daher die ursprüngliche
oder die vorgeschlagene Version abrufen, indem Sie DataRowVersion.Original oder
DataRowVersion.Proposed für den version-Parameter der Item-Eigenschaft übergeben.
Sie können an dieser Stelle auch alle Bearbeitungsvorgänge abbrechen, indem Sie die
CancelEdit-Methode aufrufen.
Um anzuzeigen, ob die Zeile einen ursprünglichen oder einen vorgeschlagenen Wert enthält,
rufen Sie die HasVersion-Methode auf.[/I]
Es findet keine "Verschiebung" von Daten statt, sondern es werden die geänderten und
die ursprünglichen Werte in den modifizierten Datarow-Spalten während des Edit-Vorgangs
gespeichert. Beide Werte können währenddessen abgerufen werden (Version).
Nach dem Abschluß des Editier-Vorgangs wird der "RowState" der Zeile auf "Modifiziert"
gesetzt - falls Werte in mindestens einer Spalte seit "AcceptChanges" geändert worden
sind.
Der Richtext, der einem RTF-Control zugewiesen ist, wird - falls erforderlich -
automatisch mit den entsprechenden Einstellungen des Control kombiniert.
Deshalb sind die Zeilen einer Datatable bei Bindung an die RTF-Eigenschaft
oft als geändert markiert, obwohl der Benutzer nichts geändert hat.
Beitrag wurde zuletzt am 05.05.15 um 20:52:48 editiert. | |
Kleines Beispiel | | | Autor: Manfred X | Datum: 05.05.15 22:31 |
| Manchmal hilft ein kleines Beispiel ....
Dim cvo, cvc, cvp As String 'Versionen der Spaltenwerte
Dim dt As New DataTable
dt.Columns.Add("A")
Dim r As DataRow = dt.NewRow
r(0) = "A1" 'rowstate DeTached
cvp = CType(r(0, DataRowVersion.Proposed), String) 'A1 (Default)
dt.Rows.Add(r) 'rowstate Added
cvc = CType(dt.Rows(0)(0, DataRowVersion.Current), String) 'A1 ab hier Default
dt.AcceptChanges() 'Rowstate wird von Added auf Unchanged gesetzt
cvc = CType(dt.Rows(0)(0, DataRowVersion.Current), String) 'A1
cvo = CType(dt.Rows(0)(0, DataRowVersion.Original), String) 'A1 (AcceptChanges)
dt.Rows(0)(0) = "B1" 'Rowstate wird auf Modified gesetzt
cvc = CType(dt.Rows(0)(0, DataRowVersion.Current), String) 'B1 'neuer Wert
cvo = CType(dt.Rows(0)(0, DataRowVersion.Original), String) 'A1
dt.Rows(0).BeginEdit()
dt.Rows(0)(0) = "C1"
cvc = CType(dt.Rows(0)(0, DataRowVersion.Current), String) 'B1
cvo = CType(dt.Rows(0)(0, DataRowVersion.Original), String) 'A1
cvp = CType(dt.Rows(0)(0, DataRowVersion.Proposed), String) 'C1
dt.Rows(0).EndEdit()
cvc = CType(dt.Rows(0)(0, DataRowVersion.Current), String) 'C1 'neuer Wert
cvo = CType(dt.Rows(0)(0, DataRowVersion.Original), String) 'A1
dt.AcceptChanges() 'Rowstate wird Unchanged
cvc = CType(dt.Rows(0)(0, DataRowVersion.Current), String) 'C1
cvo = CType(dt.Rows(0)(0, DataRowVersion.Original), String) 'C1
Beitrag wurde zuletzt am 05.05.15 um 23:00:10 editiert. | |
**** Nachtrag **** | | | Autor: Manfred X | Datum: 05.05.15 23:09 |
| Während des Editierens (nach BeginEdit)
wird die Proposed-Version zur Default-Version.
| |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|