Gewusst wie: Hinzufügen von Validierungen zu einem N-Tier-DataSet
Veröffentlicht: Juli 2016
Validierungen werden einem DataSet, das in eine N-Tier-Projektmappe aufgeteilt ist, grundsätzlich auf die gleiche Art hinzugefügt wie einem DataSet in einer einzelnen Datei (in einem einzelnen Projekt). Es wird empfohlen, die Datenvalidierung während des ColumnChanging-Ereignisses und/oder des RowChanging-Ereignisses einer Datentabelle auszuführen.
Vom Erstellen und Bearbeiten von typisierten Datasets wird die Funktionalität zum Erstellen von partiellen Klassen bereitgestellt, zu denen Sie Benutzercode für Spalten- und Zeilenänderungsereignisse der Datentabellen im DataSet hinzufügen können. Weitere Informationen über das Hinzufügen von Code zu einem Dataset in einer N-Tier-Projektmappe finden Sie unter Gewusst wie: Hinzufügen von Code zu DataSets in N-Tier-Anwendungen und Gewusst wie: Hinzufügen von Code zu TableAdapters in N-Tier-Anwendungen. Weitere Informationen zu partiellen Klassen finden Sie unter How to: Split a Class into Partial Classes (Class Designer) und unter Partielle Klassen und Methoden.
Hinweis
Bei einer Abtrennung der DataSets von TableAdapters (durch Festlegen der DataSet-Projekt-Eigenschaft) werden vorhandene partielle DataSet-Klassen in dem Projekt nicht automatisch verschoben. Vorhandene partielle DataSet-Klassen müssen manuell in das DataSet-Projekt verschoben werden.
Hinweis
Vom DataSet-Designer werden in C# nicht automatisch Ereignishandler für das ColumnChanging-Ereignis und das RowChanging-Ereignis erstellt. Sie müssen manuell einen Ereignishandler erstellen und ihn mit dem zugrunde liegenden Ereignis verknüpfen. Das folgende Verfahren erläutert die Schritte, um die erforderlichen Ereignishandler sowohl in Visual Basic als auch in C# zu erstellen.
Validieren von Änderungen in einzelnen Spalten
Validieren Sie die Werte in einzelnen Spalten durch Behandeln des ColumnChanging-Ereignisses. Das ColumnChanging-Ereignis wird ausgelöst, wenn der Wert in einer Spalte geändert wird. Erstellen Sie einen Ereignishandler für das ColumnChanging-Ereignis, indem Sie auf die gewünschte Spalte im Erstellen und Bearbeiten von typisierten Datasets doppelklicken.
Beim ersten Doppelklicken auf eine Spalte wird vom Designer ein Ereignishandler für das ColumnChanging-Ereignis erstellt. Außerdem wird zusätzlich zum ColumnChanging-Ereignis eine If…Then
-Anweisung erstellt, von der Tests für die spezifische Spalte ausführt. Der folgende Code wird beispielsweise erstellt, wenn Sie auf die RequiredDate-Spalte der Tabelle Northwind Orders doppelklicken:
Private Sub OrdersDataTable_ColumnChanging(ByVal sender As System.Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles Me.ColumnChanging
If (e.Column.ColumnName = Me.RequiredDateColumn.ColumnName) Then
' Add validation code here.
End If
End Sub
Hinweis
In C#-Projekten werden vom DataSet-Designer nur partielle Klassen für das DataSet sowie einzelne Tabellen im DataSet erstellt. Vom DataSet-Designer werden in C#, im Gegensatz zu Visual Basic, nicht automatisch Ereignishandler für das ColumnChanging-Ereignis und das RowChanging-Ereignis erstellt. In C#-Projekten müssen Sie manuell eine Methode erstellen, um das Ereignis zu behandeln und die Methode mit dem zugrunde liegenden Ereignis zu verknüpfen. Das folgende Verfahren erläutert die Schritte, um die erforderlichen Ereignishandler sowohl in Visual Basic als auch in C# zu erstellen.
Hinweis
Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Personalisieren der IDE.
So fügen Sie Validierungen bei Änderung einzelner Spaltenwerte hinzu
Öffnen Sie das Dataset im Erstellen und Bearbeiten von typisierten Datasets durch Doppelklicken auf die XSD-Datei im Projektmappen-Explorer. Weitere Informationen finden Sie unter Gewusst wie: Öffnen eines Datasets im DataSet-Designer.
Doppelklicken Sie auf die zu validierende Spalte. Durch diese Aktion wird der ColumnChanging-Ereignishandler erstellt.
Hinweis
Der Dataset-Designer erstellt den Ereignishandler für das C#-Ereignis nicht automatisch. Der zum Behandeln des Ereignisses in C# erforderliche Code wird unten aufgeführt.
SampleColumnChangingEvent
wird erstellt, und dann wird es in das ColumnChanging-Ereignis in der EndInit-Methode eingebunden.Fügen Sie Code hinzu, mit dem überprüft wird, ob die Daten in
e.ProposedValue
den Anforderungen der Anwendung entsprechen. Wenn der vorgeschlagene Wert unzulässig ist, legen Sie für die Spalte fest, dass ein Fehler angezeigt wird.Das folgende Codebeispiel überprüft, ob die Mengenspalte einen Wert größer 0 enthält. Wenn die Menge kleiner oder gleich 0 ist, wird die Spalte auf einen Fehler festgelegt. Die
Else
-Klausel löscht den Fehler, wenn die Menge größer 0 ist. Der Code im spaltenändernden Ereignishandler sollte etwa folgendermaßen aussehen:If (e.Column.ColumnName = Me.QuantityColumn.ColumnName) Then If CType(e.ProposedValue, Short) <= 0 Then e.Row.SetColumnError(e.Column, "Quantity must be greater than 0") Else e.Row.SetColumnError(e.Column, "") End If End If
// C# // Add this code to the DataTable // partial class. public override void EndInit() { base.EndInit(); // Hook up the ColumnChanging event // to call the SampleColumnChangingEvent method. ColumnChanging += SampleColumnChangingEvent; } public void SampleColumnChangingEvent(object sender, System.Data.DataColumnChangeEventArgs e) { if (e.Column.ColumnName == QuantityColumn.ColumnName) { if ((short)e.ProposedValue <= 0) { e.Row.SetColumnError("Quantity", "Quantity must be greater than 0"); } else { e.Row.SetColumnError("Quantity", ""); } } }
Validieren von Änderungen an ganzen Zeilen
Überprüfen Sie Werte in ganzen Zeilen durch Behandeln des RowChanging-Ereignisses. Das RowChanging-Ereignis wird ausgelöst, wenn ein Commit für die Werte in allen Spalten ausgeführt wird. Wenn der Wert in einer Spalte von dem Wert in einer anderen Spalte abhängt, ist es erforderlich, dies im RowChanging-Ereignis zu überprüfen. Betrachten Sie beispielsweise OrderDate und RequiredDate in der Tabelle Orders in Northwind. Wenn die Bestellungen eingegeben werden, wird durch die Validierung sichergestellt, dass keine Bestellung mit einem RequiredDate eingegeben wird, das vor dem OrderDate liegt oder mit diesem übereinstimmt. In diesem Beispiel müssen die Werte für die Spalten RequiredDate und OrderDate verglichen werden, es ist daher nicht sinnvoll, eine einzelne Spaltenänderung zu überprüfen.
Erstellen Sie einen Ereignishandler für das RowChanging-Ereignis, indem Sie im Erstellen und Bearbeiten von typisierten Datasets in der Titelleiste der Tabelle auf den Tabellennamen doppelklicken.
So fügen Sie Validierungen bei Änderung ganzer Zeilen hinzu
Öffnen Sie das Dataset im Erstellen und Bearbeiten von typisierten Datasets durch Doppelklicken auf die XSD-Datei im Projektmappen-Explorer. Weitere Informationen finden Sie unter Gewusst wie: Öffnen eines Datasets im DataSet-Designer.
Doppelklicken Sie im Designer auf die Titelleiste der Datentabelle.
Eine partielle Klasse wird mit einem
RowChanging
-Ereignishandler erstellt und im Code-Editor geöffnet.Hinweis
Vom DataSet-Designer wird in C#-Projekten nicht automatisch ein Ereignishandler für das RowChanging-Ereignis erstellt. Sie müssen eine Methode erstellen, mit der Sie das RowChanging-Ereignis behandeln und Code ausführen können, um das Ereignis mit der Initialisierungsmethode der Tabelle zu verknüpfen.
Fügen Sie Benutzercode innerhalb der Deklaration der partiellen Klasse hinzu.
Im folgenden Code wird für Visual Basic dargestellt, an welcher Stelle während des RowChanging-Ereignisses Benutzercode zur Validierung hinzugefügt werden kann:
Partial Class OrdersDataTable Private Sub OrdersDataTable_OrdersRowChanging(ByVal sender As System.Object, ByVal e As OrdersRowChangeEvent) Handles Me.OrdersRowChanging ' Add logic to validate columns here. If e.Row.RequiredDate <= e.Row.OrderDate Then ' Set the RowError if validation fails. e.Row.RowError = "Required Date cannot be on or before the OrderDate" Else ' Clear the RowError when validation passes. e.Row.RowError = "" End If End Sub End Class
Im folgenden Code wird für C# dargestellt, wie der
RowChanging
-Ereignishandler erstellt wird und an welcher Stelle während des RowChanging-Ereignisses Benutzercode zur Validierung hinzugefügt werden kann:partial class OrdersDataTable { public override void EndInit() { base.EndInit(); // Hook up the event to the // RowChangingEvent method. OrdersRowChanging += RowChangingEvent; } public void RowChangingEvent(object sender, OrdersRowChangeEvent e) { // Perfom the validation logic. if (e.Row.RequiredDate <= e.Row.OrderDate) { // Set the row to an error when validation fails. e.Row.RowError = "Required Date cannot be on or before the OrderDate"; } else { // Clear the RowError if validation passes. e.Row.RowError = ""; } } }
Siehe auch
Übersicht über N-Tier-Datenanwendungen
Exemplarische Vorgehensweise: Erstellen einer N-Tier-Datenanwendung
Überprüfen von Daten in Datasets