Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Quando você exibe a funcionalidade de entrada de dados para os usuários, frequentemente precisa validar os dados inseridos em seu formulário. A classe DataGridView fornece uma maneira conveniente de executar a validação antes que os dados sejam confirmados no armazenamento de dados. Você pode validar dados manipulando o evento CellValidating, que é gerado pelo DataGridView quando a célula atual é alterada.
Nesta explicação passo a passo, você recuperará linhas da tabela Customers no banco de dados de exemplo Northwind e as exibirá em um controle DataGridView. Quando um usuário edita uma célula na coluna CompanyName e tenta sair da célula, o manipulador de eventos CellValidating examinará a nova cadeia de caracteres de nome da empresa para garantir que ela não esteja vazia; Se o novo valor for uma cadeia de caracteres vazia, o DataGridView impedirá que o cursor do usuário saia da célula até que uma cadeia de caracteres não vazia seja inserida.
Para copiar o código neste tópico como uma única listagem, consulte Como validar dados no controle DataGridView do Windows Forms.
Pré-requisitos
Para concluir este passo a passo, você precisará:
- Acesso a um servidor que tenha o banco de dados de exemplo Northwind SQL Server.
Criando o formulário
Para validar dados inseridos em um DataGridView
Crie uma classe que deriva de Form e contém um controle DataGridView e um componente BindingSource.
O exemplo de código a seguir fornece inicialização básica e inclui um método
Main.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 um método na definição de classe do formulário para lidar com os detalhes da conexão com o banco de dados.
Este exemplo de código usa um método
GetDataque retorna um objeto DataTable preenchido. Certifique-se de definir a variávelconnectionStringpara um valor apropriado para seu banco de dados.Importante
O armazenamento de informações confidenciais, como uma senha, na cadeia de conexão pode afetar a segurança do seu aplicativo. Usar a Autenticação do Windows, também conhecida como segurança integrada, é uma maneira mais segura de controlar o acesso a um banco de dados. Para obter mais informações, consulte Protegendo dados de conexão.
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 um manipulador para o evento Load do formulário que inicializa o DataGridView e o BindingSource e configura a associação de dados.
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 manipuladores para os eventos DataGridView e CellValidating do controle CellEndEdit.
O manipulador de eventos CellValidating é onde você determina se o valor de uma célula na coluna
CompanyNameestá vazio. Se o valor da célula falhar na validação, defina a propriedade Cancel da classe System.Windows.Forms.DataGridViewCellValidatingEventArgs comotrue. Isso faz com que o controle DataGridView impeça que o cursor saia da célula. Defina a propriedade ErrorText na linha como uma cadeia de caracteres explicativa. Isso exibe um ícone de erro com um tooltip que contém o texto de erro. No manipulador de eventos CellEndEdit, defina a propriedade ErrorText na linha como a cadeia de caracteres vazia. O evento CellEndEdit ocorre somente quando a célula sai do modo de edição, o que não pode ser feito se falhar na validação.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
Testando o aplicativo
Agora você pode testar o formulário para garantir que ele se comporte conforme o esperado.
Para testar o formulário
Compile e execute o aplicativo.
Você verá um DataGridView preenchido com dados da tabela
Customers. Ao clicar duas vezes em uma célula na colunaCompanyName, você pode editar o valor. Se você excluir todos os caracteres e pressionar a tecla TAB para sair da célula, o DataGridView impedirá que você saia. Quando você digita uma cadeia de caracteres não vazia na célula, o controle DataGridView permite que você saia da célula.
Próximas Etapas
Esta aplicação dá-lhe uma compreensão básica das capacidades do controlo DataGridView. Você pode personalizar a aparência e o comportamento do controle de DataGridView de várias maneiras:
Altere os estilos de borda e cabeçalho. Para obter mais informações, consulte Como alterar os estilos de borda e linha de grade no controle DataGridView do Windows Forms.
Habilite ou restrinja a entrada do usuário para o controle DataGridView. Para obter mais informações, consulte Como impedir a adição e exclusão de linhas no controlo DataGridView do Windows Forms, e Como criar colunas Read-Only no controlo DataGridView do Windows Forms.
Verifique se há erros relacionados ao banco de dados na entrada do usuário. Para obter mais informações, consulte Passo a passo: manipulando erros que ocorrem durante a entrada de dados no controle DataGridView do Windows Forms.
Manipule conjuntos de dados muito grandes usando o modo virtual. Para obter mais informações, consulte Passo a passo: Implementando o modo virtual no controle DataGridView do Windows Forms.
Personalize a aparência das células. Para obter mais informações, consulte Como personalizar a aparência das células no controle DataGridView do Windows Forms e Como definir estilos de fonte e cor no controle DataGridView do Windows Forms.
Ver também
.NET Desktop feedback