Hallo Maximilian,
Post by Maximilian Tescherich bin gerade am überlegen, ob es nicht sinnvoller
wäre alle Änderungen im DataGridView in eine sub
bzw die die Routine eines Ereignises des
DataGridView zu vereinen.
Ich verstehe nicht so recht, welche "Änderungen im DGV"
Du in irgendeiner Sub vereinen möchtest, bzw, wie das
konkret aussehen soll.
Ich denke Du bist überhaupt zu sehr auf die Ereignisse
des DGV fixiert. Änderungen schlagen sich letztlich in
der DataView bzw. der zugehörigen DataTable, an
welches das DGV gebunden ist, nieder und genau
dort kannst Du auch recht einfach feststellen, ob ein
Datensatz geändert, hinzugefügt oder gelöscht worden
ist.
Schau Dir dazu mal das Beispiel unter
www.gssg.de -> Visual Basic -> VB.net
-> DataTable / DataView, RowState
an. In der Sub optView_Click() dieses Beispiels wird
ermittelt welche Datensätze neu, geändert oder gelöscht
sind.
Post by Maximilian TescherIn Spalte 1 und 2 kann der Anwender die Einträge ändern,
um dann prüfen zu können ob es eine Änderung gab,
habe ich beide Spalten zu Beginn nochmals in nicht
sichtbare Spalten abgelegt.
Das ist völlig überflüssig. Ob ein Datensatz im Original-
zustand, neu, geändert oder gelöscht ist, kannst Du an
dessen RowState feststellen (s.oben).
Darüberhinaus kannst Du per
Dim X as Object
X = DataTable.Rows(x).Item(y, DataRRowVersion.Original)
jederzeit, also auch nach einer Änderung dieses Datensatzes
den ursprünglichen Originalwert dieses Datensatzfeldes
auslesen.
Post by Maximilian TescherIst keine Änderung erfolgt, bleibt die Schrift normal, wurde
eine Änderung festgestellt, möchte ich die Inhalt in Fettschrift
(also Bold) formatieren.
Die dritte Spalte ist leer, hier wird nur der Hintergrund in grün
eingefärbt wenn die Daten in Zelle 2 ok sind, andernfalls in rot.
Die vierte Spalte ist wie die dritte Spalte, nur hier wird noch die
Länge der ersten Spalte (Anzahl Zeichen) ausgegeben.
Da ich stets den Inhalt des DataGridView (bzw die dahinter
liegende DataTable) prüfe, sind die Werte ja zu jeder Zeit
verfügbar.
Mit
DataTable.Rows(x).Item(y, DataRowVersion.....)
kannst Du auf 4 für das jeweilige Feld gespeicherte Werte
zurückgreifen; nämlich
DataRowVersion.Current
DataRowVersion.Default
DataRowVersion.Original
DataRowVersion.Proposed
Mehr dazu findest Du in der Online-Hilfe.
Post by Maximilian TescherAlso liegt nun die Idee nahe, doch alles in eine Prozedure
resp. Ereignis abzulegen.
Ist das so sinnvoll? Es würde thematisch ja eigentlich nahe
liegen alles was an der DataGridView gemacht wird in eine
Funktion abzulegen.
So ganz verstehe ich Dein Vorhaben noch nicht und würde
deshalb nochmals vorschlagen, dass Du Dir das o.g. Beispiel
www.gssg.de -> Visual Basic -> VB.net
-> DataTable / DataView, RowState
mal eingehend ansiehst. Ich denke, das wird dann ohnehin
die meisten Deiner Fragen klären.
Post by Maximilian TescherWeiter stellt sich die Frage, wie kann ich abfangen das der
Anwender keine leeren Eingaben macht bzw den Zelleninhalt
löscht und dann nichts mehr eingibt?
Dafür gibt es die Ereignisprozeduren
DGV_CellValidating
DGV_RowValidating
DGV_Validating
In diesen Ereignisprozeduren kannst Du die vom Benutzer
gemachten Änderungen überprüfen und bei Bedarf per
e.Cancel rückgängig machen bzw. unterbinden.
Post by Maximilian TescherIst es weiter möglich wenn ich ErrorText pro Zelle ausgebe,
über die F2-Taste (als Beispiel) eine MessageBox
aufzublenden und den näheren Inhalt der Meldung auszugeben?
DataGridViewRow.ErrorText kannst Du nach Lust und Laune
auslesen und natürlich auch per MsgBox dem Anwender
zeigen. Wo siehst Du dabei ein Problem?
Ansonsten noch der Hinweis auf das Beispiel
www.gssg.de -> Visual Basic -> VB.net
-> DataGridView RowError
Post by Maximilian TescherDa ich bis jetzt mehr oder weniger am experimentieren war,
möchte ich jetzt meine korrekte Version ohne "Schrott"
nochmals schreiben, daher die auch die Fragen :-)
Das DataGridView zusammen mit DataTable, DataView und
dem CurrencyManager bietet eine Vielzahl an Möglichkeiten.
Es ist deshalb schwer, eine ganz bestimmte Vorgehensweise
für irgendeine, nicht sehr genau umrissene Aufgabenstellung
vorzuschlagen.
Die Beispiele zum DataGridView sowie zu DataTable /
DataView unter
www.gssg.de -> Visual Basic -> VB.net
sollten jedoch reichlich Anregungen liefern.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)