Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Al mostrar la funcionalidad de entrada de datos a los usuarios, con frecuencia tiene que validar los datos especificados en el formulario. La DataGridView clase 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 gestionando el evento CellValidating, el cual es generado por el DataGridView cuando cambia la celda actual.
En este tutorial, recuperará filas de la tabla de la Customers base de datos de ejemplo Northwind y las mostrará en un DataGridView control . Cuando un usuario edita una celda de la CompanyName columna e intenta salir de la celda, el CellValidating controlador de eventos examinará la nueva cadena de 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 salga de la celda hasta que se escriba una cadena no vacía.
Para copiar el código de este tema como una sola lista, vea How to: Validate Data in the Windows Forms DataGridView Control.
Prerrequisitos
Para completar este tutorial, necesitará lo siguiente:
- Acceso a un servidor que tenga la base de datos de ejemplo Northwind SQL Server.
Crear el formulario
Para validar los datos especificados en dataGridView
Cree una clase que derive de Form y contenga un DataGridView control y un BindingSource componente.
En el ejemplo de código siguiente se proporciona inicialización básica e incluye un
Mainmétodo .using System; using System.Data; using System.Data.SqlClient; using 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)"; }Imports System.Data Imports System.Data.SqlClient Imports System.Windows.Forms Public Class Form1 Inherits System.Windows.Forms.Form Private WithEvents dataGridView1 As New DataGridView() Private bindingSource1 As New BindingSource() Public Sub New() ' Initialize the form. Me.dataGridView1.Dock = DockStyle.Fill Me.Controls.Add(dataGridView1) Me.Text = "DataGridView validation demo (disallows empty CompanyName)" End Sub[STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }<STAThread()> _ Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End ClassImplemente un método en la definición de clase del formulario para controlar los detalles de la conexión a la base de datos.
En este ejemplo de código se usa un
GetDatamétodo que devuelve un objeto rellenado DataTable . Asegúrese de establecer laconnectionStringvariable en un valor adecuado para la base de datos.Importante
Almacenar información confidencial, como una contraseña, dentro de la cadena de conexión puede afectar a la seguridad de la aplicación. El uso de la autenticación de Windows, también conocido como seguridad integrada, es una manera más segura de controlar el acceso a una base de datos. Para obtener más información, consulte Protección de la información de conexió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; }Private Shared Function GetData(ByVal selectCommand As String) As DataTable Dim connectionString As String = _ "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. Dim adapter As New SqlDataAdapter(selectCommand, connectionString) Dim data As New DataTable() data.Locale = System.Globalization.CultureInfo.InvariantCulture adapter.Fill(data) Return data End FunctionImplemente un controlador para el evento del Load formulario que inicialice DataGridView y BindingSource, y configure el enlace de datos.
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); }Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Me.Load ' Initialize the BindingSource and bind the DataGridView to it. bindingSource1.DataSource = GetData("select * from Customers") Me.dataGridView1.DataSource = bindingSource1 Me.dataGridView1.AutoResizeColumns( _ DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader) End SubImplemente controladores para los eventos DataGridView y CellValidating del control CellEndEdit.
El CellValidating controlador de eventos es donde se determina si el valor de una celda de la
CompanyNamecolumna está vacío. Si el valor de celda no pasa la validación, establezca la propiedad Cancel de la clase System.Windows.Forms.DataGridViewCellValidatingEventArgs atrue. Esto hace que el DataGridView control impida que el cursor salga de la celda. Configurar la propiedad ErrorText en la fila como una cadena explicativa. Esto muestra un icono de error con una información sobre herramientas que contiene el texto del error. En el CellEndEdit controlador de eventos, establezca la propiedad ErrorText de la fila en la cadena vacía. El CellEndEdit evento solo se produce cuando la celda sale del modo de edición; esto no puede ocurrir si no supera la validación.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 Sub dataGridView1_CellValidating(ByVal sender As Object, _ ByVal e As DataGridViewCellValidatingEventArgs) _ Handles dataGridView1.CellValidating Dim headerText As String = _ dataGridView1.Columns(e.ColumnIndex).HeaderText ' Abort validation if cell is not in the CompanyName column. If Not headerText.Equals("CompanyName") Then Return ' Confirm that the cell is not empty. If (String.IsNullOrEmpty(e.FormattedValue.ToString())) Then dataGridView1.Rows(e.RowIndex).ErrorText = _ "Company Name must not be empty" e.Cancel = True End If End Sub Private Sub dataGridView1_CellEndEdit(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _ Handles dataGridView1.CellEndEdit ' Clear the row error in case the user presses ESC. dataGridView1.Rows(e.RowIndex).ErrorText = String.Empty End Sub
Probar la aplicación
Ahora puede probar el formulario para asegurarse de que se comporta según lo previsto.
Para probar el formulario
Compile y ejecute la aplicación.
Verá un DataGridView relleno con datos de la
Customerstabla. Al hacer doble clic en una celda de laCompanyNamecolumna, puede editar el valor. Si elimina todos los caracteres y presiona la tecla TAB para salir de la celda, el DataGridView le impide salir. Al escribir una cadena no vacía en la celda, el DataGridView control le permite salir de la celda.
Pasos siguientes
Esta aplicación te da una comprensión básica de las capacidades del control DataGridView. Puede personalizar la apariencia y el comportamiento del DataGridView control de varias maneras:
Cambie los estilos de borde y encabezado. Para obtener más información, vea Cómo: Cambiar los estilos de borde y líneas de cuadrícula en el control DataGridView de Windows Forms.
Habilite o restrinja la entrada del usuario al DataGridView control. Para obtener más información, vea Cómo: Prevenir la adición y eliminación de filas en el control DataGridView de Windows Forms y Cómo: Hacer columnas Read-Only en el control DataGridView de Windows Forms.
Compruebe la entrada del usuario para ver si hay errores relacionados con la base de datos. Para obtener más información, vea Tutorial: Control de errores que se producen durante la entrada de datos en el control DataGridView de formularios Windows Forms.
Controle conjuntos de datos muy grandes mediante el modo virtual. Para obtener más información, vea Tutorial: Implementación del modo virtual en el control DataGridView de formularios Windows Forms.
Personalice la apariencia de las celdas. Para obtener más información, vea How to: Customize the Appearance of Cells in the Windows Forms DataGridView Control y How to: Set Font and Color Styles in the Windows Forms DataGridView Control.
Consulte también
- DataGridView
- BindingSource
- Entrada de datos en el control DataGridView de Windows Forms
- Cómo: Validar datos en el control DataGridView de los formularios de Windows Forms
- Guía paso a paso: Manejo de los errores que se producen durante la entrada de datos en el control DataGridView de formularios de Windows Forms
- Proteger la información de conexión
.NET Desktop feedback