Cómo: Validar datos en el control DataGridView de formularios Windows Forms
En el ejemplo de código siguiente se muestra cómo validar los datos especificados 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 modifica una celda de la columna CompanyName, se prueba la validez de su valor para comprobar que no está vacío. Si el controlador de eventos para el evento CellValidating encuentra 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 obtener una descripción completa de este ejemplo de código, vea Tutorial: Validar datos en el control DataGridView de formularios Windows Forms.
Ejemplo
Imports System
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
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 Sub
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
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 Function
<STAThread()> _
Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
End Class
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)";
}
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 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());
}
}
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 sobre la compilación de este ejemplo desde la línea de comandos de Visual Basic o Visual C#, vea Generar desde la línea de comandos (Visual Basic) o Compilar la línea de comandos con csc.exe. También puede compilar este ejemplo en Visual Studio pegando el código en un proyecto nuevo. Para obtener más información, vea Cómo: Compilar y ejecutar un ejemplo de código completo de formularios Windows Forms utilizando Visual Studio y Cómo: Compilar y ejecutar un ejemplo de código completo de formularios Windows Forms utilizando Visual Studio y Cómo: Compilar y ejecutar un ejemplo de código completo de formularios Windows Forms utilizando Visual Studio y Cómo: Compilar y ejecutar un ejemplo de código completo de Windows Forms en Visual Studio y Cómo: Compilar y ejecutar un ejemplo de código completo de Windows Forms en Visual Studio.
Seguridad
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 (ADO.NET).
Vea también
Tareas
Tutorial: Validar datos en el control DataGridView de formularios Windows Forms
Referencia
Conceptos
Proteger la información de conexión (ADO.NET)
Otros recursos
Entrada de datos en el control DataGridView de formularios Windows Forms