Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При отображении функций записи данных пользователям часто приходится проверять данные, введенные в форму. Класс DataGridView предоставляет удобный способ проверки перед фиксацией данных в хранилище данных. Данные можно проверить, обрабатывая событие CellValidating, которое вызывается DataGridView при изменении текущей ячейки.
В этом пошаговом руководстве вы получите строки из таблицы Customers в примере базы данных Northwind и отобразите их в элементе управления DataGridView. Когда пользователь изменяет ячейку в столбце CompanyName и пытается оставить ячейку, обработчик событий CellValidating проверяет новую строку имени компании, чтобы убедиться, что она не пуста; Если новое значение является пустой строкой, DataGridView не позволит пользователю покидать ячейку, пока не будет введена непустая строка.
Чтобы скопировать код в этом разделе в виде одного списка, см. раздел How to: Validate Data in the Windows Forms DataGridView Control.
Предпосылки
Для выполнения этого пошагового руководства вам потребуется:
- Доступ к серверу с примером базы данных SQL Server Northwind.
Создание формы
Проверка данных, введенных в DataGridView
Создайте класс, производный от Form и содержащий элемент управления DataGridView и компонент BindingSource.
В следующем примере кода реализована базовая инициализация и включается метод
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 ClassРеализуйте метод в определении класса формы для обработки сведений о подключении к базе данных.
В этом примере кода используется метод
GetData, который возвращает заполненный объект DataTable. Убедитесь, что переменнаяconnectionStringимеет значение, соответствующее вашей базе данных.Это важно
Хранение конфиденциальных данных, таких как пароль, в строке подключения может повлиять на безопасность приложения. Использование проверки подлинности Windows, также известной как встроенная безопасность, является более безопасным способом управления доступом к базе данных. Дополнительные сведения см. в разделе Защита данных о подключении.
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 FunctionРеализуйте обработчик для события Load формы, который инициализирует DataGridView и BindingSource и настраивает привязку данных.
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 SubРеализуйте обработчики для событий DataGridView и CellValidating элемента управления CellEndEdit.
Обработчик событий CellValidating определяет, пусто ли значение ячейки в столбце
CompanyName. Если значение ячейки не проходит проверку, задайте для свойства Cancel класса System.Windows.Forms.DataGridViewCellValidatingEventArgs значениеtrue. Это приводит к тому, что элемент управления DataGridView предотвращает выход курсора из ячейки. Задайте для свойства ErrorText на строке пояснительную строку. Откроется значок ошибки со подсказкой, содержащей текст ошибки. В обработчике событий CellEndEdit задайте свойство ErrorText строки пустой строке. Событие CellEndEdit происходит только тогда, когда ячейка выходит из режима редактирования, что невозможно, если она не проходит проверку.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
Тестирование приложения
Теперь вы можете протестировать форму, чтобы убедиться, что она работает должным образом.
Тестирование формы
Скомпилируйте и запустите приложение.
Вы увидите DataGridView, заполненный данными из таблицы
Customers. При двойном щелчке ячейки в столбцеCompanyNameможно изменить значение. При удалении всех символов и нажатии клавиши TAB для выхода из ячейки DataGridView запрещает выход. При вводе непустой строки в ячейку элемент управления DataGridView позволяет выйти из ячейки.
Дальнейшие шаги
Это приложение дает базовое представление о возможностях элемента управления DataGridView. Внешний вид и поведение элемента управления DataGridView можно настроить несколькими способами:
Изменение стилей границ и заголовков. Дополнительные сведения смотрите в разделе Как изменить стили границ и линий сетки в элементе управления Windows Forms DataGridView.
Разрешите или ограничьте ввод пользователей в элемент управления DataGridView. Дополнительные сведения см. в статье Практическое руководство: предотвращение добавления и удаления строк в элементе управления DataGridView в Windows Formsи Практическое руководство: создание столбцов Read-Only в элементе управления DataGridView в Windows Forms.
Проверьте входные данные пользователя для ошибок, связанных с базой данных. Дополнительные сведения см. в пошаговом руководстве: Обработка ошибок, возникающих во время ввода данных в элементе управления DataGridView Windows Forms.
Обработка очень больших наборов данных с помощью виртуального режима. Дополнительные сведения см. в пошаговом руководстве : Реализация виртуального режима в элементе управления DataGridView Windows Forms.
Настройте внешний вид ячеек. Дополнительные сведения см. в статье Практическое руководство. Настройка внешнего вида ячеек в элементе управления DataGridView Windows Forms и Практическое руководство. Настройка стилей шрифта и цвета в элементе управления DataGridView Windows Forms.
См. также
- DataGridView
- BindingSource
- Ввод данных в элемент управления DataGridView в Windows Forms
- Как проверить данные в элементе управления DataGridView в Windows Forms
- Пошаговое руководство: Обработка ошибок, возникающих при вводе данных в элементе управления Windows Forms DataGridView
- Защита сведений о подключении
.NET Desktop feedback