Wskazówki: obsługa błędów występujących podczas wprowadzania danych w formancie DataGridView formularzy systemu Windows
Obsługa błędów z bazowego magazynu danych jest wymaganą funkcją aplikacji do wprowadzania danych. Kontrolka Formularze systemu DataGridView Windows ułatwia ujawnienie DataError zdarzenia, które jest wywoływane, gdy magazyn danych wykryje naruszenie ograniczeń lub uszkodzoną regułę biznesową.
W tym przewodniku pobierzesz wiersze z Customers
tabeli w przykładowej bazie danych Northwind i wyświetlisz je w kontrolce DataGridView . Po wykryciu zduplikowanej CustomerID
wartości w nowym wierszu lub edytowanym istniejącym wierszu DataError nastąpi zdarzenie, które zostanie obsłużone przez wyświetlenie wyjątku MessageBox opisującego wyjątek.
Aby skopiować kod w tym temacie jako pojedynczą listę, zobacz Instrukcje: obsługa błędów występujących podczas wprowadzania 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 obsłużyć błędy wprowadzania danych w kontrolce 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); }
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 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 (znanego również jako zabezpieczenia zintegrowane) jest bezpieczniejszym sposobem na kontrolowanie 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, 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 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 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 Sub
DataError Obsłuż zdarzenie w obiekcie DataGridView.
Jeśli kontekstem błędu jest operacja zatwierdzania, wyświetl błąd w pliku 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
Testowanie aplikacji
Teraz możesz przetestować formularz, aby upewnić się, że działa zgodnie z oczekiwaniami.
Aby przetestować formularz
Naciśnij klawisz F5, aby uruchomić aplikację.
Zostanie wyświetlona kontrolka DataGridView wypełniona danymi z tabeli Customers. Jeśli wprowadzisz zduplikowaną wartość i
CustomerID
zatwierdzisz edycję, wartość komórki zostanie przywrócona automatycznie i zostanie wyświetlony MessageBox komunikat o błędzie wprowadzania danych.
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.
Zweryfikuj dane wejściowe użytkownika w kontrolce DataGridView . Aby uzyskać więcej informacji, zobacz Przewodnik: weryfikowanie 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 How to: Customize the Appearance of Cells in the Windows Forms DataGridView Control ( Instrukcje: ustawianie domyślnych stylów komórek dla kontrolki DataGridView formularzy systemu Windows).
Zobacz też
- DataGridView
- BindingSource
- Wprowadzanie danych w kontrolce DataGridView formularzy Windows Forms
- Instrukcje: obsługa błędów występujących podczas wprowadzania danych w kontrolce DataGridView formularzy Windows Forms
- Przewodnik: sprawdzanie poprawności 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