Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O tratamento de erros do armazenamento de dados subjacente é um recurso necessário para um aplicativo de entrada de dados. O controle DataGridView do Windows Forms torna isso fácil ao expor o evento DataError, que é disparado quando o armazenamento de dados detecta uma violação de restrição ou uma violação de regra de negócios.
Neste 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 valor CustomerID duplicado for detectado em uma nova linha ou em uma linha existente editada, o evento DataError ocorrerá, que será tratado exibindo um MessageBox que descreve a exceção.
Para copiar o código neste tópico como uma única listagem, consulte Como manipular erros que ocorrem durante a entrada de dados no controle DataGridView do Windows Forms.
Pré-requisitos
Para concluir este passo a passo, você precisará de:
- Acesso a um servidor que tem o banco de dados de exemplo do Northwind SQL Server.
Criando o formulário
Para lidar com erros de entrada de dados no controle 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); }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) 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 populado. Defina a variávelconnectionStringcomo um valor apropriado para seu banco de dados.Importante
Armazenar informações confidenciais, como uma senha, dentro da cadeia de conexão pode afetar a segurança do 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 informações 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, 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; }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, including the ' schema information that contains the CustomerID column ' constraint. Dim adapter As New SqlDataAdapter(selectCommand, connectionString) Dim data As New DataTable() data.Locale = System.Globalization.CultureInfo.InvariantCulture adapter.Fill(data) adapter.FillSchema(data, SchemaType.Source) Return data End FunctionImplemente um manipulador para o evento Load do formulário que inicializa o DataGridView e BindingSource e configura a associação de dados.
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 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 SubManipule o evento DataError no DataGridView.
Se o contexto do erro for uma operação de confirmação, exiba o erro em um MessageBox.
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."); } }Private Sub dataGridView1_DataError(ByVal sender As Object, _ ByVal e As DataGridViewDataErrorEventArgs) _ Handles dataGridView1.DataError ' If the data source raises an exception when a cell value is ' commited, display an error message. If e.Exception IsNot Nothing AndAlso _ e.Context = DataGridViewDataErrorContexts.Commit Then MessageBox.Show("CustomerID value must be unique.") End If 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
Pressione F5 para executar o aplicativo.
Você verá um controle DataGridView preenchido com dados da tabela Clientes. Se você inserir um valor duplicado para
CustomerIDe confirmar a edição, o valor da célula será revertido automaticamente e você verá um MessageBox que exibe o erro de entrada de dados.
Próximas etapas
Este aplicativo fornece uma compreensão básica dos recursos do controle DataGridView. Você pode personalizar a aparência e o comportamento do controle DataGridView de várias maneiras:
Alterar 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 ao controle DataGridView. Para obter mais informações, consulte Como impedir a adição e exclusão de linha no controle DataGridView do Windows Formse Como fazer colunas Read-Only no controle DataGridView do Windows Forms.
Valide a entrada do usuário para o controle DataGridView. Para obter mais informações, consulte Passo a passo: validando 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 dos Windows Forms e Como definir estilos de célula padrão para o controle DataGridView dos Windows Forms.
Consulte também
.NET Desktop feedback