Wskazówki: sprawdzanie poprawności danych w formancie DataGridView formularzy systemu Windows
Podczas wyświetlania użytkownikom funkcji wprowadzania danych często trzeba zweryfikować dane wprowadzone w formularzu. Klasa DataGridView zapewnia wygodny sposób przeprowadzania walidacji przed zatwierdzeniem danych w magazynie danych. Dane można zweryfikować, obsługując CellValidating zdarzenie, które jest wywoływane przez DataGridView czas zmiany bieżącej komórki.
W tym przewodniku pobierzesz wiersze z Customers
tabeli w przykładowej bazie danych Northwind i wyświetlisz je w kontrolce DataGridView . Gdy użytkownik edytuje komórkę w CompanyName
kolumnie i próbuje opuścić komórkę, procedura obsługi zdarzeń zbada nowy ciąg nazwy firmy, aby upewnić się, CellValidating że nie jest pusta. Jeśli nowa wartość jest pustym ciągiem, DataGridView kursor użytkownika uniemożliwi pozostawienie komórki do momentu wprowadzenia niepustego ciągu.
Aby skopiować kod w tym temacie jako pojedynczą listę, zobacz How to: Validate Data in the Windows Forms DataGridView Control (Instrukcje: weryfikowanie danych w kontrolce DataGridView formularzy systemu Windows).
Wymagania wstępne
Aby ukończyć ten przewodnik, potrzebne są następujące elementy:
- Dostęp do serwera z przykładową bazą danych Northwind SQL Server.
Tworzenie formularza
Aby zweryfikować dane wprowadzone w obiekcie DataGridView
Utwórz klasę, która pochodzi z Form i zawiera kontrolkę DataGridViewBindingSource i składnik.
Poniższy przykład kodu zawiera podstawowe inicjowanie i zawiera metodę
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
Zaimplementuj metodę w definicji klasy formularza do obsługi szczegółów nawiązywania połączenia z bazą danych.
W tym przykładzie kodu użyto
GetData
DataTable metody zwracającej wypełniony obiekt. Upewnij się, że zmiennaconnectionString
jest ustawiona na wartość odpowiednią dla bazy danych.Ważne
Przechowywanie poufnych informacji, takich jak hasło, w parametry połączenia może mieć wpływ na bezpieczeństwo aplikacji. Korzystanie z uwierzytelniania systemu Windows, nazywanego również zintegrowanymi zabezpieczeniami, to bezpieczniejszy sposób kontrolowania dostępu do bazy danych. Aby uzyskać więcej informacji, zobacz Ochrona informacji o Połączenie ion.
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
Zaimplementuj procedurę obsługi dla zdarzenia formularzaLoad, które inicjuje element i BindingSource konfiguruje DataGridView powiązanie danych.
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
Zaimplementuj DataGridView programy obsługi dla zdarzeń i CellEndEdit kontrolekCellValidating.
Procedura CellValidating obsługi zdarzeń określa, czy wartość komórki w kolumnie
CompanyName
jest pusta. Jeśli walidacja wartości komórki zakończy się niepowodzeniem, ustaw Cancel właściwość System.Windows.Forms.DataGridViewCellValidatingEventArgs klasy natrue
. Powoduje to, że kontrolka DataGridView uniemożliwia pozostawienie komórki kursora. ErrorText Ustaw właściwość w wierszu na ciąg objaśniający. Spowoduje to wyświetlenie ikony błędu z etykietką narzędzia zawierającą tekst błędu. W procedurze obsługi zdarzeń CellEndEdit ustaw ErrorText właściwość w wierszu na pusty ciąg. Zdarzenie CellEndEdit występuje tylko wtedy, gdy komórka kończy tryb edycji, którego nie może zrobić, jeśli zakończy się niepowodzeniem walidacji.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
Testowanie aplikacji
Teraz możesz przetestować formularz, aby upewnić się, że działa zgodnie z oczekiwaniami.
Aby przetestować formularz
Skompiluj i uruchom aplikację.
Zobaczysz DataGridView wypełnione dane z
Customers
tabeli. Po dwukrotnym kliknięciu komórki w kolumnieCompanyName
możesz edytować wartość. Jeśli usuniesz wszystkie znaki i naciśnij klawisz TAB, aby zamknąć komórkę, DataGridView funkcja uniemożliwia wyjście z komórki. Podczas wpisywania ciągu niepustego do komórki kontrolka DataGridView umożliwia wyjście z komórki.
Następne kroki
Ta aplikacja zapewnia podstawową wiedzę na temat DataGridView możliwości kontrolki. Wygląd i zachowanie kontrolki DataGridView można dostosować na kilka sposobów:
Zmień style obramowania i nagłówka. Aby uzyskać więcej informacji, zobacz How to: Change the Border and Gridline Styles in the Windows Forms DataGridView Control (Instrukcje: zmienianie stylów obramowania i linii siatki w kontrolce DataGridView formularzy systemu Windows).
Włącz lub ogranicz dane wejściowe użytkownika do kontrolki DataGridView . Aby uzyskać więcej informacji, zobacz Instrukcje: zapobieganie dodawaniu i usuwaniu wierszy w kontrolce DataGridView formularzy systemu Windows oraz Instrukcje: ustawianie kolumn tylko do odczytu w kontrolce DataGridView formularzy systemu Windows.
Sprawdź dane wejściowe użytkownika pod kątem błędów związanych z bazą danych. Aby uzyskać więcej informacji, zobacz Przewodnik: obsługa błędów występujących podczas wprowadzania danych w kontrolce DataGridView formularzy systemu Windows.
Obsługa bardzo dużych zestawów danych przy użyciu trybu wirtualnego. Aby uzyskać więcej informacji, zobacz Przewodnik: implementowanie trybu wirtualnego w kontrolce DataGridView formularzy systemu Windows.
Dostosuj wygląd komórek. Aby uzyskać więcej informacji, zobacz Jak dostosować wygląd komórek w kontrolce DataGridView formularzy systemu Windows oraz Instrukcje: ustawianie stylów czcionek i kolorów w kontrolce DataGridView formularzy systemu Windows.
Zobacz też
- DataGridView
- BindingSource
- Wprowadzanie danych w kontrolce DataGridView formularzy Windows Forms
- Instrukcje: sprawdzanie poprawności danych w kontrolce DataGridView formularzy Windows Forms
- Przewodnik: obsługa błędów występujących podczas wprowadzania danych w kontrolce DataGridView formularzy Windows Forms
- Ochrona informacji o połączeniu
.NET Desktop feedback
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla