Agregar validación a un conjunto de datos con n nivelesAdd validation to an n-tier dataset

Agregar validación a un conjunto de datos separado en una solución de n niveles es básicamente igual que agregar validación a un conjunto de datos de un solo archivo (un conjunto de datos en un único proyecto).Adding validation to a dataset that is separated into an n-tier solution is basically the same as adding validation to a single-file dataset (a dataset in a single project). La ubicación sugerida para realizar la validación en datos está durante ColumnChanging y/o los eventos RowChanging de una tabla de datos.The suggested location for performing validation on data is during the ColumnChanging and/or RowChanging events of a data table.

El conjunto de datos proporciona la funcionalidad para crear clases parciales a los que puede agregar código de usuario a los eventos de cambio de columna y fila de las tablas de datos en el conjunto de datos.The dataset provides the functionality to create partial classes to which you can add user code to column- and row-changing events of the data tables in the dataset. Para obtener más información sobre cómo agregar código a un conjunto de datos en una solución con n niveles, vea agregar código a conjuntos de datos en aplicaciones de n niveles, y agregar código a TableAdapters en aplicaciones de n niveles.For more information about adding code to a dataset in an n-tier solution, see Add code to datasets in n-tier applications, and Add code to TableAdapters in n-tier applications. Para obtener más información acerca de las clases parciales, consulte Cómo: dividir una clase en clases parciales (Diseñador de clases) o clases y métodos parciales.For more information about partial classes, see How to: Split a Class into Partial Classes (Class Designer) or Partial Classes and Methods.

Nota

Al separar conjuntos de datos de los TableAdapters (estableciendo la DataSet Project propiedad), las clases de conjunto de datos parciales existentes en el proyecto no se traslada automáticamente.When you separate datasets from TableAdapters (by setting the DataSet Project property), existing partial dataset classes in the project won't be moved automatically. Clases de conjunto de datos parciales existentes se deberán trasladar manualmente al proyecto de conjunto de datos.Existing partial dataset classes must be moved manually to the dataset project.

Nota

El Diseñador de dataset no crea automáticamente los controladores de eventos en C# para el ColumnChanging y RowChanging eventos.The dataset Designer does not automatically create event handlers in C# for the ColumnChanging and RowChanging events. Tendrá que crear un controlador de eventos manualmente y enlazar el controlador de eventos para el evento subyacente.You have to manually create an event handler and hook up the event handler to the underlying event. Los procedimientos siguientes describen cómo crear los controladores de eventos necesarios en Visual Basic y C#.The following procedures describe how to create the required event handlers in both Visual Basic and C#.

Validar cambios para columnas individualesValidate changes to individual columns

Valide los valores en columnas individual administrando el evento ColumnChanging.Validate values in individual columns by handling the ColumnChanging event. El ColumnChanging evento se desencadena cuando se modifica un valor en una columna.The ColumnChanging event is raised when a value in a column is modified. Crear un controlador de eventos para el ColumnChanging eventos haciendo doble clic en la columna que desee en el Diseñador de Dataset.Create an event handler for the ColumnChanging event by double-clicking the desired column on the Dataset Designer.

La primera vez que se hace doble clic en una columna, el diseñador genera un controlador de eventos para el evento ColumnChanging.The first time that you double-click a column, the designer generates an event handler for the ColumnChanging event. Un If...Then instrucción también se crea que comprueba la columna específica.An If...Then statement is also created that tests for the specific column. Por ejemplo, el código siguiente se genera cuando se hace doble clic en la columna RequiredDate de la tabla Orders de Northwind:For example, the following code is generated when you double-click the RequiredDate column on the Northwind Orders table:

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  

Nota

En proyectos C#, el Diseñador de DataSet crea únicamente las clases parciales para el conjunto de datos y las tablas individuales en el conjunto de datos.In C# projects, the Dataset Designer only creates partial classes for the dataset and individual tables in the dataset. El Diseñador de DataSet no crea automáticamente los controladores de eventos para los eventos ColumnChanging y RowChanging en C#, como lo hace en Visual Basic.The Dataset Designer does not automatically create event handlers for the ColumnChanging and RowChanging events in C# like it does in Visual Basic. En los proyectos de C#, tiene que construir manualmente un método para controlar el evento y enlazar el método para el evento subyacente.In C# projects, you have to manually construct a method to handle the event and hook up the method to the underlying event. El procedimiento siguiente proporciona los pasos para crear los controladores de eventos necesarios tanto en Visual Basic como en C#.The following procedure provides the steps to create the required event handlers in both Visual Basic and C#.

Nota

Es posible que tu equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones.Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos.The Visual Studio edition that you have and the settings that you use determine these elements. Para obtener más información, vea Personalizar el IDE.For more information, see Personalizing the IDE.

Para agregar la validación durante los cambios a los valores de columna individualesTo add validation during changes to individual column values

  1. Para abrir el conjunto de datos, haga doble clic en el .xsd en el archivo el Explorador de soluciones.Open the dataset by double-clicking the .xsd file in Solution Explorer. Para obtener más información, consulte Tutorial: crear un conjunto de datos en el Diseñador de Dataset.For more information, see Walkthrough: Creating a Dataset in the Dataset Designer.

  2. Haga doble clic en la columna que desee validar.Double-click the column you want to validate. Esta acción crea el controlador de eventos ColumnChanging.This action creates the ColumnChanging event handler.

    Nota

    El Diseñador de DataSet no crea ningún controlador de eventos automáticamente para el evento de C#.The Dataset Designer does not automatically create an event handler for the C# event. El código que es necesario para controlar el evento en C# se incluye en la sección siguiente.The code that's necessary to handle the event in C# is included in the next section. SampleColumnChangingEventse crea y, a continuación, se enlaza a la ColumnChanging evento en el EndInit método.SampleColumnChangingEvent is created and then hooked up to the ColumnChanging event in the EndInit method.

  3. Agregue el código para comprobar que e.ProposedValue contiene datos que son compatibles con los requisitos de la aplicación.Add code to verify that e.ProposedValue contains data that meets the requirements of your application. Si el valor propuesto no es aceptable, establezca la columna para indicar que contiene un error.If the proposed value is unacceptable, set the column to indicate that it contains an error.

    En el ejemplo de código siguiente se valida que el cantidad columna contiene un valor mayor que 0.The following code example validates that the Quantity column contains a value greater than 0. Si cantidad es menor o igual a 0, la columna se establece en un error.If Quantity is less than or equal to 0, the column is set to an error. El Else cláusula borra el error si cantidad es mayor que 0.The Else clause clears the error if Quantity is more than 0. El código del controlador de eventos de la columna que cambia debe presentar un aspecto similar al siguiente:The code in the column-changing event handler should resemble the following:

    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  
    
    // 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", "");  
            }  
        }  
    }  
    

Validar cambios para filas completasValidate changes to whole rows

Valide los valores en filas completas administrando el evento RowChanging.Validate values in whole rows by handling the RowChanging event. Se produce el evento RowChanging cuando se confirman los valores en todas las columnas.The RowChanging event is raised when the values in all columns are committed. Esto es necesario para validar en el evento RowChanging cuando el valor en una columna depende del valor en otra columna.It is necessary to validate in the RowChanging event when the value in one column relies on the value in another column. Por ejemplo, tenga en cuenta OrderDate y RequiredDate en la tabla Orders en Northwind.For example, consider OrderDate and RequiredDate in the Orders table in Northwind.

Cuando se incluyen los pedidos, la validación garantiza que un pedido no se escribe en la fecha requerida (RequiredDate) ni antes de la fecha de pedido (OrderDate).When orders are being entered, validation makes sure that an order is not entered with a RequiredDate that is on or before the OrderDate. En este ejemplo, los valores para ambas columnas RequiredDate y OrderDate necesitan compararse, por ello no tiene sentido validar un cambio en una columna individual.In this example, the values for both the RequiredDate and OrderDate columns need to be compared, so validating an individual column change does not make sense.

Crear un controlador de eventos para el RowChanging eventos haciendo doble clic en el nombre de tabla en la barra de título de la tabla en la Diseñador de Dataset.Create an event handler for the RowChanging event by double-clicking the table name in the title bar of the table on the Dataset Designer.

Para agregar la validación durante los cambios en las filas completasTo add validation during changes to whole rows

  1. Para abrir el conjunto de datos, haga doble clic en el .xsd en el archivo el Explorador de soluciones.Open the dataset by double-clicking the .xsd file in Solution Explorer. Para obtener más información, consulte Tutorial: crear un conjunto de datos en el Diseñador de Dataset.For more information, see Walkthrough: Creating a Dataset in the Dataset Designer.

  2. Haga doble clic en la barra de título de la tabla de datos en el diseñador.Double-click the title bar of the data table on the designer.

    Se crea una clase parcial con un controlador de eventos RowChanging y se abre en el Editor de código.A partial class is created with a RowChanging event handler and opens in the Code Editor.

    Nota

    El Diseñador de DataSet no crea automáticamente un controlador para el evento RowChanging en proyectos escritos en C#.The Dataset Designer does not automatically create an event handler for the RowChanging event in C# projects. Debe crear un método para controlar la RowChanging eventos y el código de ejecución, a continuación, enlazar el evento en el método de inicialización de la tabla.You have to create a method to handle the RowChanging event and run code then hook up the event in the table's initialization method.

  3. Agregue el código de usuario dentro de la declaración de clase parcial.Add user code inside the partial class declaration.

  4. El código siguiente muestra dónde agregar el código de usuario para validar durante el RowChanging eventos.The following code shows where to add user code to validate during the RowChanging event. El ejemplo de C# también incluye código para enlazar el método de controlador de eventos hasta el OrdersRowChanging eventos.The C# example also includes code to hook the event handler method up to the OrdersRowChanging event.

    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  
    
    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)  
        {  
            // Perform 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 = "";  
            }  
        }  
    }  
    

Vea tambiénSee Also

Información general sobre aplicaciones de datos con N niveles N-Tier Data Applications Overview
Tutorial: Crear una aplicación de datos con N niveles Walkthrough: Creating an N-Tier Data Application
Validar los datos en conjuntos de datosValidate data in datasets