Gewusst wie: Hinzufügen von Validierungen zu einem N-Tier-DataSet
Aktualisiert: November 2007
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 DataSet-Designer 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 Gewusst wie: Aufteilen einer Klasse in partielle Klassen und unter Partielle Klassen und Methoden (C#-Programmierhandbuch).
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 DataSet-Designer 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: |
---|
Ihr Computer zeigt möglicherweise für einige der Elemente der Visual Studio-Benutzeroberfläche in der folgenden Anleitung andere Namen oder Standorte an. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Visual Studio-Einstellungen. |
So fügen Sie Validierungen bei Änderung einzelner Spaltenwerte hinzu
Öffnen Sie das DataSet im DataSet-Designer, indem Sie im Projektmappen-Explorer auf die .xsd-Datei doppelklicken. 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. Im Folgenden finden Sie den zur Behandlung des Ereignisses in C# erforderlichen Code. Ein SampleColumnChangingEvent wird erstellt und anschließend mit dem ColumnChanging-Ereignis in der EndInit-Methode verknüpft.
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.
Im folgenden Codebeispiel wird überprüft, ob die Quantity-Spalte einen Wert größer als 0 (null) enthält. Wenn die Menge kleiner/gleich 0 (null) ist, wird für die Spalte ein Fehler ausgelöst. Die Else-Klausel löscht den Fehler, wenn die Menge größer als 0 (null) ist. Der Code im Ereignishandler für Spaltenänderungen 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 DataSet-Designer in der Titelleiste der Tabelle auf den Tabellennamen doppelklicken.
So fügen Sie Validierungen bei Änderung ganzer Zeilen hinzu
Öffnen Sie das DataSet im DataSet-Designer, indem Sie im Projektmappen-Explorer auf die .xsd-Datei doppelklicken. 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
Aufgaben
Exemplarische Vorgehensweise: Erstellen einer N-Tier-Datenanwendung
Konzepte
Erstellen von Datenanwendungen mit Visual Studio