vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Aufbau 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

**** Nachtrag **** 
Autor: Manfred X
Datum: 05.05.15 23:09

Während des Editierens (nach BeginEdit)
wird die Proposed-Version zur Default-Version.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel