Поделиться через


Пример. Обработка ошибок, связанных с вводом данных с помощью элемента управления DataGridView, в Windows Forms

Обновлен: Ноябрь 2007

Обработка ошибок для базового хранилища данных является обязательной функцией приложения ввода данных. Элемент управления Windows Forms DataGridView упрощает обработку ошибок путем предоставления события DataError, инициируемого при обнаружении нарушения ограничения или бизнес-правила в хранилище данных.

В этом пошаговом руководстве будут извлечены строки из таблицы Customers в примере базы данных "Northwind", которые затем будут выведены в элементе управления DataGridView. При обнаружении повторяющегося значения CustomerID в новой строке или измененной существующей строке произойдет событие DataError, которое будет обработано отображением MessageBox с описанием исключения.

Чтобы скопировать весь текст кода из этой темы, см. раздел Практическое руководство. Обработка ошибок, связанных с вводом данных в элемент управления DataGridView, в Windows Forms.

Обязательные компоненты

Для выполнения этого пошагового руководства потребуется:

  • Доступ к серверу с примером базы данных SQL Server под именем "Northwind".

Создание формы

Обработка ошибок ввода данных в элементе управления DataGridView

  1. Создайте производный от Form класс, который содержит элемент управления DataGridView и компонент BindingSource.

    В следующем примере кода представлена базовая реализация и включен метод Main.

    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)
    
        End Sub
    
    
    ...
    
    
        <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);
        }
    
    
    ...
    
    
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }
    
    }
    
  2. Реализуйте метод в определении класса формы для обработки подробных сведений для подключения к базе данных.

    В этом примере кода используется метод GetData , возвращающий заполненный объект DataTable. Переменной connectionString следует присвоить значение, подходящее для базы данных.

    t4a23xx4.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

    Хранение в строке подключения конфиденциальных сведений, таких как пароль, может привести к снижению уровня защиты приложения. Использование проверки подлинности Windows (также называемой встроенными средствами безопасности) — более безопасный способ управления доступом к базе данных. Дополнительные сведения см. в разделе Защита сведений о соединении (ADO.NET).

    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 Function
    
    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. Реализуйте обработчик для события Load формы, инициализирующий DataGridView и BindingSource и устанавливающий привязку данных.

    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 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. Обработайте событие DataError в DataGridView.

    Если контекстом ошибки является операция фиксации, выведите ошибку в MessageBox.

    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
    
    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.");
        }
    }
    

Тестирование приложения

Теперь можно проверить форму, чтобы убедиться, что она работает так, как ожидалось.

Чтобы проверить форму, выполните следующие действия:

  • Нажмите клавишу F5 для запуска приложения.

    Появится элемент управления DataGridView с данными из таблицы Customers. При вводе повторяющегося значения CustomerID и фиксации изменения, значение в ячейке будет автоматически восстановлено и на экране появится MessageBox с указанием ошибки ввода данных.

Следующие действия

Это приложение позволяет в общем понять возможности элемента управления DataGridView. Внешний вид и поведение элемента управления DataGridView можно контролировать несколькими способами.

См. также

Задачи

Практическое руководство. Обработка ошибок, связанных с вводом данных в элемент управления DataGridView, в Windows Forms

Пример. Проверка данных элемента управления DataGridView в Windows Forms

Основные понятия

Защита сведений о соединении (ADO.NET)

Ссылки

DataGridView

BindingSource

Другие ресурсы

Ввод данных с помощью элемента управления DataGridView в Windows Forms