vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 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

VB.NET - Ein- und Umsteiger
Validierung 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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).

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

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

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

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.


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Re: Validierung bei Wechsel eines Datensatzes 
Autor: ModeratorFZelle (Moderator)
Datum: 16.03.14 12:17

Naja, wenn du z.b. vom DGV auf einen Save-Button clickst, macht das doch sinn, oder?
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