Mi colección Validar datos en el control DataGridView de formularios Windows Forms Tutorial: Validar datos en el control DataGridView de formularios Windows Forms .NET Framework 4.5 Cuando muestra funciones de entrada de datos a los usuarios, a menudo tiene que validar los datos escritos en el formulario.La clase DataGridView proporciona una manera cómoda de realizar la validación antes de que los datos se confirmen en el almacén de datos.Puede validar los datos controlando el evento CellValidating, que lo provoca DataGridView cuando cambia la celda actual. En este tutorial, recuperará filas de la tabla Customers de la base de datos de ejemplo Northwind y las mostrará en un control DataGridView.Cuando un usuario edita una celda de la columna CompanyName e intenta abandonar la celda, el controlador de eventos CellValidating examinará la cadena del nuevo nombre de empresa para asegurarse de que no está vacía; si el nuevo valor es una cadena vacía, DataGridView impedirá que el cursor del usuario abandone la celda hasta que no se especifique una cadena que no esté vacía. Para copiar el código de este tema como un listado sencillo, vea Cómo: Validar datos en el control DataGridView de formularios Windows Forms. Requisitos previos Para poder completar este tutorial, necesitará: Acceso a un servidor con la base de datos de ejemplo Northwind de SQL Server. http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección Crear el formulario Para validar datos escritos en un DataGridView 1. Cree una clase que deriva de Form y contiene un control DataGridView y un componente BindingSource. En el ejemplo de código siguiente se proporciona la inicialización básica y se incluye un método Main. C# using using using using System; System.Data; System.Data.SqlClient; System.Windows.Forms; public class Form1 : System.Windows.Forms.Form { private DataGridView dataGridView1 = new DataGridView(); private BindingSource bindingSource1 = new BindingSource(); public Form1() { // Initialize the form. this.dataGridView1.Dock = DockStyle.Fill; this.Controls.Add(dataGridView1); this.Load += new EventHandler(Form1_Load); this.Text = "DataGridView validation demo (disallows empty CompanyName)"; } C# [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } } 2. Implemente un método en la definición de clase del formulario para controlar los detalles de conexión con la base de datos. En este ejemplo de código se utiliza un método GetData que devuelve un objeto DataTable rellenado.Asegúrese de establecer la variable connectionString en un valor que sea adecuado para la base de datos. Seguridad Nota El hecho de almacenar información confidencial, como una contraseña, en la cadena de conexión puede afectar a la seguridad de la aplicación.El uso de la autenticación de Windows, también conocida como seguridad integrada, es un modo más seguro de controlar el acceso a una base de datos.Para obtener más información, vea Proteger la información de conexión. C# http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección private static DataTable GetData(string selectCommand) { string connectionString = "Integrated Security=SSPI;Persist Security Info=False;" + "Initial Catalog=Northwind;Data Source=localhost;Packet Size=4096"; // Connect to the database and fill a data table. SqlDataAdapter adapter = new SqlDataAdapter(selectCommand, connectionString); DataTable data = new DataTable(); data.Locale = System.Globalization.CultureInfo.InvariantCulture; adapter.Fill(data); } return data; 3. Implemente un controlador para el evento Load del formulario que inicializa DataGridView y BindingSource y configura el enlace de datos. C# private void Form1_Load(System.Object sender, System.EventArgs e) { // Attach DataGridView events to the corresponding event handlers. this.dataGridView1.CellValidating += new DataGridViewCellValidatingEventHandler(dataGridView1_CellValidating); this.dataGridView1.CellEndEdit += new DataGridViewCellEventHandler(dataGridView1_CellEndEdit); } // Initialize the BindingSource and bind the DataGridView to it. bindingSource1.DataSource = GetData("select * from Customers"); this.dataGridView1.DataSource = bindingSource1; this.dataGridView1.AutoResizeColumns( DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader); 4. Implemente los controladores para los eventos CellValidating y CellEndEdit del control DataGridView. El controlador de eventos CellValidating es donde se determina si el valor de una celda de la columna CompanyName está vacío.Si el valor de celda no supera la validación, establezca la propiedad Cancel de la clase System.Windows.Forms.DataGridViewCellValidatingEventArgs en true.Esto hace que el control DataGridView evite que el cursor abandone la celda.Establezca la propiedad ErrorText en la fila en una cadena explicativa.Esto muestra un icono de error con la información sobre herramientas que contiene el texto del error.En el controlador de eventos CellEndEdit, establezca la propiedad ErrorText en la fila en la cadena vacía.El evento CellEndEdit sólo aparece cuando la celda sale del modo de edición, que no puede hacerlo si no se supera la validación. C# private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { string headerText = dataGridView1.Columns[e.ColumnIndex].HeaderText; // Abort validation if cell is not in the CompanyName column. if (!headerText.Equals("CompanyName")) return; http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección } // Confirm that the cell is not empty. if (string.IsNullOrEmpty(e.FormattedValue.ToString())) { dataGridView1.Rows[e.RowIndex].ErrorText = "Company Name must not be empty"; e.Cancel = true; } void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { // Clear the row error in case the user presses ESC. dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty; } Probar la aplicación Puede comprobar el formulario para asegurarse de que se comporta de la forma prevista. Para comprobar el formulario Compile y ejecute la aplicación. Verá un DataGridView rellenado con datos de la tabla Customers.Si hace doble clic en una celda de la columna CompanyName, puede editar el valor.Si elimina todos los caracteres y presiona la tecla TAB para salir de la celda, DataGridView impide que salga.Cuando escribe una cadena no vacía en la celda, el control DataGridView le permite salir de la celda. Pasos siguientes Esta aplicación proporciona conocimientos básicos sobre las funciones del control DataGridView.Puede personalizar la apariencia y el comportamiento del control DataGridView de varias formas: Cambie los estilos de borde y encabezado.Para obtener más información, vea Cómo: Cambiar los estilos de borde y línea de la cuadrícula en el control DataGridView de formularios Windows Forms. Permita o restringa los datos proporcionados por el usuario al control DataGridView.Para obtener más información, vea Cómo: Impedir la adición y eliminación de filas en el control DataGridView de formularios Windows Forms y Cómo: Crear columnas de sólo lectura en el control DataGridView de formularios Windows Forms. Compruebe si los datos proporcionados por el usuario tienen errores relacionados con base de datos.Para obtener más información, vea Tutorial: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms. Controle conjuntos de grandes volúmenes de datos utilizando el modo virtual.Para obtener más información, vea Tutorial: Implementar el modo virtual en el control DataGridView de formularios Windows Forms. Personalice la apariencia de las celdas.Para obtener más información, vea Cómo: Personalizar la apariencia de las celdas en el control DataGridView de formularios Windows Forms y Cómo: Establecer estilos de colores y fuentes en el control DataGridView de formularios Windows Forms. http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección Vea también DataGridView BindingSource Entrada de datos en el control DataGridView de formularios Windows Forms Cómo: Validar datos en el control DataGridView de formularios Windows Forms Tutorial: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms Proteger la información de conexión © 2016 Microsoft Cómo: Validar datos en el control DataGridView de formularios Windows Forms .NET Framework 4.5 El ejemplo de código siguiente muestra cómo validar datos introducidos por un usuario en un control DataGridView.En este ejemplo, DataGridView se rellena con filas de la tabla Customers de la base de datos de ejemplo Northwind.Cuando el usuario edita una celda en la columna CompanyName, se comprueba la validez de su valor verificando que no está vacío.Si el controlador de eventos del evento CellValidating detecta que el valor es una cadena vacía, DataGridView impide que el usuario salga de la celda hasta que se especifique una cadena que no esté vacía. Para una explicación más completa de este ejemplo de código, consulte Tutorial: Validar datos en el control DataGridView de formularios Windows Forms. C# using using using using System; System.Data; System.Data.SqlClient; System.Windows.Forms; public class Form1 : System.Windows.Forms.Form { private DataGridView dataGridView1 = new DataGridView(); private BindingSource bindingSource1 = new BindingSource(); public Form1() { // Initialize the form. this.dataGridView1.Dock = DockStyle.Fill; this.Controls.Add(dataGridView1); this.Load += new EventHandler(Form1_Load); this.Text = "DataGridView validation demo (disallows empty CompanyName)"; } private void Form1_Load(System.Object sender, System.EventArgs e) { // Attach DataGridView events to the corresponding event handlers. http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección this.dataGridView1.CellValidating += new DataGridViewCellValidatingEventHandler(dataGridView1_CellValidating); this.dataGridView1.CellEndEdit += new DataGridViewCellEventHandler(dataGridView1_CellEndEdit); } // Initialize the BindingSource and bind the DataGridView to it. bindingSource1.DataSource = GetData("select * from Customers"); this.dataGridView1.DataSource = bindingSource1; this.dataGridView1.AutoResizeColumns( DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader); private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { string headerText = dataGridView1.Columns[e.ColumnIndex].HeaderText; // Abort validation if cell is not in the CompanyName column. if (!headerText.Equals("CompanyName")) return; } // Confirm that the cell is not empty. if (string.IsNullOrEmpty(e.FormattedValue.ToString())) { dataGridView1.Rows[e.RowIndex].ErrorText = "Company Name must not be empty"; e.Cancel = true; } void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { // Clear the row error in case the user presses ESC. dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty; } private static DataTable GetData(string selectCommand) { string connectionString = "Integrated Security=SSPI;Persist Security Info=False;" + "Initial Catalog=Northwind;Data Source=localhost;Packet Size=4096"; // Connect to the database and fill a data table. SqlDataAdapter adapter = new SqlDataAdapter(selectCommand, connectionString); DataTable data = new DataTable(); data.Locale = System.Globalization.CultureInfo.InvariantCulture; adapter.Fill(data); } return data; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } } http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección Compilar el código Para este ejemplo se necesita: Referencias a los ensamblados System, System.Data, System.Windows.Forms y System.XML. Para obtener información acerca de cómo generar este ejemplo desde la línea de comandos para Visual Basic o Visual C#, consulte Compilar desde la línea de comandos (Visual Basic) o Command-line Building With csc.exe.También puede compilar este ejemplo en Visual Studio pegando el código en un nuevo proyecto.Consulte también Cómo: Compilar y ejecutar un ejemplo de código completo de Windows Forms en Visual Studio. Seguridad de .NET Framework Almacenar información confidencial, como una contraseña, en la cadena de conexión puede afectar a la seguridad de la aplicación.El uso de la autenticación de Windows (también conocida como seguridad integrada) es un modo más seguro de controlar el acceso a una base de datos.Para obtener más información, consulte Proteger la información de conexión. Vea también DataGridView BindingSource Tutorial: Validar datos en el control DataGridView de formularios Windows Forms Entrada de datos en el control DataGridView de formularios Windows Forms Tutorial: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms Proteger la información de conexión © 2016 Microsoft Tutorial: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms .NET Framework 4.5 Una característica necesaria para una aplicación de entrada de datos es el control de errores del almacén de datos subyacente.El control DataGridView de formularios Windows Forms facilita ésto exponiendo el evento DataError, que se produce cuando el almacén de datos detecta una infracción de restricción o de regla empresarial. En este tutorial, recuperará filas de la tabla Customers de la base de datos de ejemplo Northwind y las mostrará en un control DataGridView.Si se detecta un valor de CustomerID duplicado en una nueva fila o una fila existente editada, se producirá el evento DataError, que se puede controlar mostrando un MessageBox que describe la excepción. Para copiar el código de este tema como un listado sencillo, vea Cómo: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms. http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección Requisitos previos Para poder completar este tutorial, necesitará: Acceso a un servidor con la base de datos de ejemplo Northwind de SQL Server. Crear el formulario Para controlar los errores de entrada de datos del control DataGridView 1. Cree una clase que deriva de Form y contiene un control DataGridView y un componente BindingSource. En el ejemplo de código siguiente se proporciona la inicialización básica y se incluye un método Main. C# using using using using System; System.Data; System.Data.SqlClient; System.Windows.Forms; public class Form1 : System.Windows.Forms.Form { private DataGridView dataGridView1 = new DataGridView(); private BindingSource bindingSource1 = new BindingSource(); public Form1() { // Initialize the form. this.dataGridView1.Dock = DockStyle.Fill; this.Controls.Add(dataGridView1); this.Load += new EventHandler(Form1_Load); } C# [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } } 2. Implemente un método en la definición de clase del formulario para controlar los detalles de conexión con la base de datos. En este ejemplo de código se utiliza un método GetData que devuelve un objeto DataTable rellenado.Asegúrese de establecer la variable connectionString en un valor que sea adecuado para la base de datos. Seguridad Nota http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección El hecho de almacenar información confidencial, como una contraseña, en la cadena de conexión puede afectar a la seguridad de la aplicación.El uso de la autenticación de Windows (también conocida como seguridad integrada) es un modo más seguro de controlar el acceso a una base de datos.Para obtener más información, vea Proteger la información de conexión. C# private static DataTable GetData(string selectCommand) { string connectionString = "Integrated Security=SSPI;Persist Security Info=False;" + "Initial Catalog=Northwind;Data Source=localhost;Packet Size=4096"; // Connect to the database and fill a data table, including the // schema information that contains the CustomerID column // constraint. SqlDataAdapter adapter = new SqlDataAdapter(selectCommand, connectionString); DataTable data = new DataTable(); data.Locale = System.Globalization.CultureInfo.InvariantCulture; adapter.Fill(data); adapter.FillSchema(data, SchemaType.Source); } return data; 3. Implemente un controlador para el evento Load del formulario que inicializa DataGridView y BindingSource y configura el enlace de datos. C# private void Form1_Load(System.Object sender, System.EventArgs e) { // Attach the DataError event to the corresponding event handler. this.dataGridView1.DataError += new DataGridViewDataErrorEventHandler(dataGridView1_DataError); } // Initialize the BindingSource and bind the DataGridView to it. bindingSource1.DataSource = GetData("select * from Customers"); this.dataGridView1.DataSource = bindingSource1; this.dataGridView1.AutoResizeColumns( DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader); 4. Controle el evento DataError en DataGridView. Si el contexto del error es una operación de confirmación, muestre el error en MessageBox. C# private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { // If the data source raises an exception when a cell value is // commited, display an error message. if (e.Exception != null && e.Context == DataGridViewDataErrorContexts.Commit) { MessageBox.Show("CustomerID value must be unique."); http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección } } Probar la aplicación Puede comprobar el formulario para asegurarse de que se comporta de la forma prevista. Para comprobar el formulario Presione F5 para ejecutar la aplicación. Aparecerá un control DataGridView rellenado con datos de la tabla Customers.Si especifica un valor duplicado para CustomerID y confirma la edición, se invertirá automáticamente el valor de la celda y aparecerá un MessageBox que muestra el error de la entrada de datos. Pasos siguientes Esta aplicación proporciona conocimientos básicos sobre las funciones del control DataGridView.Puede personalizar la apariencia y el comportamiento del control DataGridView de varias formas: Cambie los estilos de borde y encabezado.Para obtener más información, vea Cómo: Cambiar los estilos de borde y línea de la cuadrícula en el control DataGridView de formularios Windows Forms. Permita o restringa los datos proporcionados por el usuario al control DataGridView.Para obtener más información, vea Cómo: Impedir la adición y eliminación de filas en el control DataGridView de formularios Windows Forms y Cómo: Crear columnas de sólo lectura en el control DataGridView de formularios Windows Forms. Valide los datos proporcionados por el usuario al control DataGridView.Para obtener más información, vea Tutorial: Validar datos en el control DataGridView de formularios Windows Forms. Controle conjuntos de grandes volúmenes de datos utilizando el modo virtual.Para obtener más información, vea Tutorial: Implementar el modo virtual en el control DataGridView de formularios Windows Forms. Personalice la apariencia de las celdas.Para obtener más información, vea Cómo: Personalizar la apariencia de las celdas en el control DataGridView de formularios Windows Forms y Cómo: Establecer estilos de celda predeterminados para el control DataGridView de formularios Windows Forms. Vea también DataGridView BindingSource Entrada de datos en el control DataGridView de formularios Windows Forms Cómo: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms Tutorial: Validar datos en el control DataGridView de formularios Windows Forms Proteger la información de conexión © 2016 Microsoft http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección Cómo: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms .NET Framework 4.5 En el ejemplo de código siguiente, se muestra cómo utilizar el control DataGridView para informar de errores de entrada de datos al usuario. Para una explicación más completa de este ejemplo de código, consulte Tutorial: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms. C# using using using using System; System.Data; System.Data.SqlClient; System.Windows.Forms; public class Form1 : System.Windows.Forms.Form { private DataGridView dataGridView1 = new DataGridView(); private BindingSource bindingSource1 = new BindingSource(); public Form1() { // Initialize the form. this.dataGridView1.Dock = DockStyle.Fill; this.Controls.Add(dataGridView1); this.Load += new EventHandler(Form1_Load); } private void Form1_Load(System.Object sender, System.EventArgs e) { // Attach the DataError event to the corresponding event handler. this.dataGridView1.DataError += new DataGridViewDataErrorEventHandler(dataGridView1_DataError); } // Initialize the BindingSource and bind the DataGridView to it. bindingSource1.DataSource = GetData("select * from Customers"); this.dataGridView1.DataSource = bindingSource1; this.dataGridView1.AutoResizeColumns( DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader); private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { // If the data source raises an exception when a cell value is // commited, display an error message. if (e.Exception != null && e.Context == DataGridViewDataErrorContexts.Commit) http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección { } } MessageBox.Show("CustomerID value must be unique."); private static DataTable GetData(string selectCommand) { string connectionString = "Integrated Security=SSPI;Persist Security Info=False;" + "Initial Catalog=Northwind;Data Source=localhost;Packet Size=4096"; // Connect to the database and fill a data table, including the // schema information that contains the CustomerID column // constraint. SqlDataAdapter adapter = new SqlDataAdapter(selectCommand, connectionString); DataTable data = new DataTable(); data.Locale = System.Globalization.CultureInfo.InvariantCulture; adapter.Fill(data); adapter.FillSchema(data, SchemaType.Source); } return data; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } } Compilar el código Para este ejemplo se necesita: Referencias a los ensamblados System, System.Data, System.Windows.Forms y System.XML. Para obtener información acerca de cómo generar este ejemplo desde la línea de comandos para Visual Basic o Visual C#, consulte Compilar desde la línea de comandos (Visual Basic) o Command-line Building With csc.exe.También puede compilar este ejemplo en Visual Studio pegando el código en un nuevo proyecto.Consulte también Cómo: Compilar y ejecutar un ejemplo de código completo de Windows Forms en Visual Studio. Seguridad de .NET Framework Almacenar información confidencial, como una contraseña, en la cadena de conexión puede afectar a la seguridad de la aplicación.El uso de la autenticación de Windows (también conocida como seguridad integrada) es un modo más seguro de controlar el acceso a una base de datos.Para obtener más información, consulte Proteger la información de conexión. Vea también DataGridView BindingSource Tutorial: Controlar los errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.] Mi colección Entrada de datos en el control DataGridView de formularios Windows Forms Tutorial: Validar datos en el control DataGridView de formularios Windows Forms Proteger la información de conexión © 2016 Microsoft http://pabprod.blob.core.windows.net/books/49777a9b-51ea-424c-8528-d924f0e3de18.html[06/02/2016 2:22:30 p. m.]