| |
VB.NET - Ein- und UmsteigerValidierung bei Wechsel eines Datensatzes | | | Autor: spatzimatzi | Datum: 12.03.14 10:17 |
| Hallo Forenmitglieder,
es gibt Tage, da glaubt man, man hat die Materie so einigermassen verstanden.
Und dann kommen Tage, ...
Heute ist so ein Tag
Habe eine Form mit einem DataGridView und einige Text-Feldern.
Sowohl das DataGridView, wie auch die Textfelder sind alle am selben DataTable über BindingSource
gebunden.
Wechsel ich den Datensatz, wechseln auch die Informationen in den Textfeldern. Klappt prima!
Jetzt der nächste Schritt und damit die Probleme.
Werden jedoch die Daten in den Textfeldern geändert und ich wechsele in einen anderen Datensatz, dann sollen zunächst die neuen Daten überprüft und bei einem Fehler der Wechsel auf den neuen Satz unterbunden werden.
Für mein Problem bin ich auf das Ereignis RowValidating des DataGridViews gestossen.
Leider komme ich damit nicht klar. Habe den Ablauf meines Programmes auch gebuggt, verstehe das Verhalten aber nicht.
Mein Script in Kurzform
' Jedesmal, wenn der Record wechselt, soll die
' Aktion ausgeführt werden
'------------------------------------------------
Sub dgv_RowValidating ...
If Aktion() Then
e.Cancel = True
End If
...
...
End Sub
' Nur wenn es Änderungen gegeben hat, soll die
' Validierung stattfinden
'------------------------------------------------
Function Aktion() As Boolean
BindingSource.EndEdit()
If DataSet.HasChanges Then
If Validierung() Then
Return True
End If
...
DataAdapter(DataSet, "Tabelle")
Return False
...
End If
End Function
' Wenn Fehler auftreten, dann soll True zurückgeliefert werden
'-------------------------------------------------------------
Function Validierung() As Boolean
If Fehler Then
Messagebox.Show(...)
Textfeld.Focus()
Return True
End If
Return False
End Function Meine Fragen:
Bin ich hier auf dem Holzweg
Wie würdet ihr das machen und mit welchen Ereignis
Kann man den Focus so setzen
Zusätzliche Informationen gebe ich jederzeit gerne.
spatzimatzi | |
Re: Validierung bei Wechsel eines Datensatzes | | | Autor: Manfred X | Datum: 12.03.14 11:17 |
| Wo werden die Daten eingegeben? Grid? Box?
Welche Validierungsoperationen werden wie durchgeführt?
Gewöhnlich erfolgt die Überprüfung der Daten einer
Zelle bereits nach Eingabe der Änderungen (EndEdit)
in die gebundene Textbox - anhand der Vorgaben aus
der Datenquelle (DataTable).
| |
Re: Validierung bei Wechsel eines Datensatzes | | | Autor: spatzimatzi | Datum: 12.03.14 11:24 |
| Hallo Manfred X,
das DataGridView ist ReadOnly = True, Daten werden somit alle nur über die Boxen eingegeben.
Es wird in der Regel nur abgefragt, ob ein Wert eingetragen und wenn, ob er ein bestimmtes Format hat.
Z.B. Postleitzahl
Ist das Feld belegt?
Ist das Feld 5 stellig?
Ist das Feld numerisch?
spatzimatzi | |
Re: Validierung bei Wechsel eines Datensatzes | | | Autor: Manfred X | Datum: 12.03.14 12:39 |
|
Warum verwendest Du nicht das Validating-Event der gebundenen Textbox?
| |
Re: Validierung bei Wechsel eines Datensatzes | | | Autor: spatzimatzi | Datum: 12.03.14 12:53 |
| Hallo Manfred X,
natürlich könnte ich das machen. Evtl. im Zusammenhang mit einem Error-Provider.
Aber es gibt auch Validierung, die müssen global ablaufen.
In diesem Fall müssen Orte verwaltet werden mit Plz, Ortsbezeichnung und Land
Wenn ich einen neuen Ort aufnehmen will, dann muss ich überprüfen, ob ein identischer Ort schon vorhanden ist. Und die Abfrage muss über alle Felder erfolgen.
Grundsätzlich ist mir auch wichtig, ob mein Vorgehen bzw. Ablauf grundsätzlich so zu verwenden ist.
Es wäre schön, dass ich ein Ereignis habe, mit dem ich einen Datensatzwechsel verhindern kann.
Was ist eigentlich mit dem Ereignis RowDeleting und RowChanging der DataTable?
spatzimatzi | |
Re: Validierung bei Wechsel eines Datensatzes | | | Autor: Manfred X | Datum: 12.03.14 13:40 |
|
Bei der Überprüfung der Textbox-Eingaben z.B. im ClickEvent des
Buttons, der in der Liste zur nächsten Zeile wechselt, kannst Du
die SetColumnErrors-Methode verwenden, um Spalten als
fehlerhaft zu kennzeichnen und den Wechsel des Datensatzes verhindern.
| |
Re: Validierung bei Wechsel eines Datensatzes | | | Autor: ErfinderDesRades | Datum: 14.03.14 18:52 |
| naja, wenn du Eingaben der Textbox validieren willst, ist das DatagridView_RowValidating wohl nicht unbedingt das richtige Event.
Du kannst das Textbox_Validating nehmen, aber auch das Panel-Validating, wo evtl. alle Controls drauf sind. So kann man eine ganze Gruppe von Controls gemeinsam validieren.
Ein professionellerer Ansatz ist, die Validierung in die DataTable selbst zu verlegen. Dort kannst du das DataTable_ColumnChanged-Event verarbeiten, und die Daten auf Gültigkeit prüfen, und ggfs. ein e.Row.SetError("deine Fehlermeldung") reinhauen.
Das nenne ich die "weiche Validierung", weils daraufhin keinen Fehler gibt, sondern zB im DGV wird ein ErrorProvider angezeigt, der die Fehleingabe bemängelt.
Also die Eingabe ist angenommen, aber als Falsch markiert.
Mit Dataset.HasErrors kann man vorm Abspeichern nochmal sicher gehen, dass man keine solche Gurken inne Daten drinne hat.
Ist aber recht umfangreich, sich da einzuarbeiten.
vlt. darf ich ja auf mycsharp verlinken, das ist zwar auch eine Webpräsenz, aber manche Webpräsenzen sind mir ja erlaubt, und andere nicht - so scheint es jedenfalls
http://www.mycsharp.de/wbb2/thread.php?postid=3510291#post3510291
(Rechtschreibfehler urheberrechtlich geschützt) | |
Re: Validierung bei Wechsel eines Datensatzes | | | Autor: spatzimatzi | Datum: 15.03.14 10:56 |
| Hallo ErfinderDesRades,
RowValidating beim DataGridView habe ich genommen, weil ich es abbrechen kann.
Grundsätzlich funktioniert dieses Ereignis sehr gut. Beim Debuggen hatte mich das Verhalten
des Ereignisses verunsichert.
Wenn man dieses Ereignis einsetzt sollte man wissen, dass es nicht nur ausführt, wenn man im DGV den Datensatz wechselt, sondern auch, wenn man das DGV verlässt oder wieder hineinspringt.
Das hat sicherlich Gründe, die mir aber fremd sind.
Gruß
spatzimatzi | |
Re: Validierung bei Wechsel eines Datensatzes | | | Autor: FZelle (Moderator) | Datum: 16.03.14 12:17 |
| Naja, wenn du z.b. vom DGV auf einen Save-Button clickst, macht das doch sinn, oder? | |
| 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! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... 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
|