Пример. Проверка данных элемента управления DataGridView в Windows Forms
Обновлен: Ноябрь 2007
При отображении функциональных возможностей ввода данных на экране для пользователя введенные в форму данные можно, как правило, проверить. С помощью класса DataGridView можно легко проверить данные, прежде чем они будут записаны в хранилище данных. Для проверки данных можно обработать событие CellValidating, вызываемое DataGridView при изменении текущей ячейки.
В этом пошаговом руководстве будут извлечены строки из таблицы Customers в примере базы данных "Northwind", которые затем будут выведены в элементе управления DataGridView. Когда пользователь изменяет ячейку в столбце CompanyName и пытается выйти из нее, обработчик событий CellValidating проверяет новую строку наименования компании на наличие данных в ней; если значение в строке отсутствует, DataGridView, не позволяет курсору перемещаться их ячейки до тех пор, пока значение в ячейке не будет указано.
Чтобы скопировать весь текст кода из этой темы, см. раздел Практическое руководство. Проверка данных элемента управления DataGridView в Windows Forms.
Обязательные компоненты
Для выполнения этого пошагового руководства потребуется:
- Доступ к серверу с примером базы данных SQL Server под именем "Northwind".
Создание формы
Проверка данных, введенных в элемент управления DataGridView
Создайте производный от 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) Me.Text = "DataGridView validation demo (disallows empty CompanyName)" 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); this.Text = "DataGridView validation demo (disallows empty CompanyName)"; } ... [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }
Реализуйте метод в определении класса формы для обработки подробных сведений для подключения к базе данных.
В этом примере кода используется метод GetData , возвращающий заполненный объект DataTable. Переменной connectionString следует присвоить значение, подходящее для базы данных.
Примечание о безопасности. Хранение в строке подключения конфиденциальных сведений, таких как пароль, может привести к снижению уровня защиты приложения. Использование проверки подлинности 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. 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
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; }
Реализуйте обработчик для события 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 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); }
Реализуйте обработчики для событий CellValidating и CellEndEdit элемента управления DataGridView.
В обработчике событий CellValidating определяется, будет ли значение ячейки в столбце CompanyName пустым. Если ячейка не проходит проверку, свойству Cancel класса System.Windows.Forms.DataGridViewCellValidatingEventArgs необходимо присвоить значение true. В этом случае элемент управления DataGridView заставит курсор остаться в ячейке. Свойству ErrorText в строке присвойте пояснительную строку. В этом случае на экране появится значок ошибки с ToolTip с текстом ошибки. В обработчике событий CellEndEdit свойству ErrorText строки присвойте пустую строку. Событие CellEndEdit происходит только при выходе ячейки из режима редактирования, и если ячейка не проходит проверку, режим редактирования не отключается.
Private Sub dataGridView1_CellValidating(ByVal sender As Object, _ ByVal e As DataGridViewCellValidatingEventArgs) _ Handles dataGridView1.CellValidating ' Validate the CompanyName entry by disallowing empty strings. If dataGridView1.Columns(e.ColumnIndex).Name = "CompanyName" Then If e.FormattedValue IsNot Nothing AndAlso _ String.IsNullOrEmpty(e.FormattedValue.ToString()) Then dataGridView1.Rows(e.RowIndex).ErrorText = _ "Company Name must not be empty" e.Cancel = True End If 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 void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { // Validate the CompanyName entry by disallowing empty strings. if (dataGridView1.Columns[e.ColumnIndex].Name == "CompanyName") { if (e.FormattedValue == null && 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; }
Тестирование приложения
Теперь можно проверить форму, чтобы убедиться, что она работает так, как ожидалось.
Чтобы проверить форму, выполните следующие действия:
Скомпилируйте и запустите приложение.
Появится элемент управления DataGridView с данными из таблицы Customers. Если дважды щелкнуть ячейку в столбце CompanyName, значение можно будет изменить. Если удалить все символы и нажать клавишу TAB для выхода из ячейки, DataGridView не позволит выйти из нее. Если в ячейку ввести непустое строковое значение, элемент управления DataGridView позволит выйти из ячейки.
Следующие действия
Это приложение позволяет в общем понять возможности элемента управления DataGridView. Внешний вид и поведение элемента управления DataGridView можно контролировать несколькими способами.
Изменение стилей границ и заголовка. Дополнительные сведения см. в разделе Практическое руководство. Изменение внешнего вида границ и линий сетки элемента управления DataGridView в Windows Forms.
Разрешение или ограничение пользовательского ввода в элемент управления DataGridView. Дополнительные сведения см. в разделах Практическое руководство. Запрет добавления и удаления строк элемента управления DataGridView в Windows Forms и Практическое руководство. Определение столбцов элемента управления DataGridView как доступных только для чтения в Windows Forms.
Проверка ввода пользователя на наличие ошибок, связанных с базой данных. Дополнительные сведения см. в разделе Пример. Обработка ошибок, связанных с вводом данных с помощью элемента управления DataGridView, в Windows Forms.
Обработка очень больших наборов данных в виртуальном режиме. Дополнительные сведения см. в разделе Пример. Реализация виртуального режима для элемента управления DataGridView в Windows Forms.
Настройка внешнего вида ячеек. Дополнительные сведения см. в разделах Практическое руководство. Настройка внешнего вида ячеек элемента управления DataGridView в Windows Forms и Практическое руководство. Настройка шрифтов и цветов в элементе управления DataGridView в Windows Forms.
См. также
Задачи
Практическое руководство. Проверка данных элемента управления DataGridView в Windows Forms
Основные понятия
Защита сведений о соединении (ADO.NET)
Ссылки
Другие ресурсы
Ввод данных с помощью элемента управления DataGridView в Windows Forms