Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga / Notatka
Klasy DataSet i powiązane klasy to starsze technologie .NET Framework z początku 2000 roku, które umożliwiają aplikacjom pracę z danymi w pamięci, gdy aplikacje są odłączone od bazy danych. Technologie te są szczególnie przydatne w przypadku aplikacji, które umożliwiają użytkownikom modyfikowanie danych i utrwalanie zmian w bazie danych. Mimo że zestawy danych są sprawdzoną pomyślną technologią, zalecaną metodą dla nowych aplikacji platformy .NET jest użycie platformy Entity Framework Core. Program Entity Framework zapewnia bardziej naturalny sposób pracy z danymi tabelarycznymi jako modelami obiektów i ma bardziej prosty interfejs programowania.
Weryfikowanie danych to proces potwierdzania, że wartości wprowadzane do obiektów danych są zgodne z ograniczeniami w schemacie zestawu danych. Proces weryfikacji potwierdza również, że te wartości są następujące zgodnie z regułami, które zostały ustanowione dla aplikacji. Dobrym rozwiązaniem jest zweryfikowanie danych przed wysłaniem aktualizacji do bazowej bazy danych. Zmniejsza to błędy, a także potencjalną liczbę rund między aplikacją a bazą danych.
Możesz potwierdzić, że dane zapisywane w zestawie danych są prawidłowe, tworząc sprawdzanie poprawności w samym zestawie danych. Zestaw danych może sprawdzać dane niezależnie od tego, jak jest wykonywana aktualizacja — czy bezpośrednio przez kontrolki w formularzu, w składniku, czy w inny sposób. Ponieważ zestaw danych jest częścią aplikacji (w przeciwieństwie do zaplecza bazy danych), jest to logiczne miejsce do kompilowania weryfikacji specyficznej dla aplikacji.
Najlepszym miejscem do dodania walidacji do aplikacji jest częściowy plik klasy zestawu danych. W języku Visual Basic lub Visual C# otwórz projektanta zestawów danych i kliknij dwukrotnie kolumnę lub tabelę, dla której chcesz utworzyć walidację. Ta akcja powoduje otwarcie pliku kodu, w którym można utworzyć ColumnChanging program obsługi zdarzeń lub RowChanging .
Weryfikowanie danych
Walidacja w zestawie danych jest realizowana w następujący sposób:
Tworząc własną walidację specyficzną dla aplikacji, która może sprawdzać wartości w poszczególnych kolumnach danych podczas zmian. Aby uzyskać więcej informacji, zobacz How to: Validate data during column changes (Instrukcje: weryfikowanie danych podczas zmian kolumn).
Tworząc własną walidację specyficzną dla aplikacji, która może porównywać dane z wartościami podczas zmiany całego wiersza danych. Aby uzyskać więcej informacji, zobacz How to: Validate data during row changes (Instrukcje: weryfikowanie danych podczas zmian wierszy).
Tworząc klucze, unikatowe ograniczenia i tak dalej w ramach rzeczywistej definicji schematu zestawu danych.
Ustawiając właściwości DataColumn obiektu, takie jak MaxLength, AllowDBNulli Unique.
Kilka zdarzeń jest zgłaszanych przez DataTable obiekt, gdy zmiana występuje w rekordzie:
- Zdarzenia ColumnChanging i ColumnChanged są wywoływane podczas i po każdej zmianie w pojedynczej kolumnie. Zdarzenie ColumnChanging jest przydatne, gdy chcesz zweryfikować zmiany w określonych kolumnach. Informacje o proponowanej zmianie są przekazywane jako argument w zdarzeniu.
- Zdarzenia RowChanging i RowChanged są wywoływane podczas i po każdej zmianie w wierszu. Wydarzenie RowChanging jest bardziej ogólne. Wskazuje, że zmiana następuje w którymś miejscu w wierszu, ale nie wiadomo, która kolumna uległa zmianie.
Domyślnie każda zmiana kolumny powoduje wywołanie czterech zdarzeń. Pierwszy to zdarzenia ColumnChanging i ColumnChanged dla określonej kolumny, która jest zmieniana. Następnie znajdują się zdarzenia RowChanging i RowChanged . Jeśli w wierszu zostanie wprowadzonych wiele zmian, zdarzenia będą generowane dla każdej zmiany.
Uwaga / Notatka
Metoda wiersza danych BeginEdit wyłącza zdarzenia RowChanging i RowChanged po każdej zmianie poszczególnej kolumny. W takim przypadku zdarzenie nie jest wywoływane do momentu wywołania metody EndEdit, a zdarzenia RowChanging i RowChanged są wywoływane tylko raz. Aby uzyskać więcej informacji, zobacz Wyłączanie ograniczeń podczas wypełniania zestawu danych.
Wybrane zdarzenie zależy od stopnia szczegółowości weryfikacji. Jeśli ważne jest, aby przechwycić błąd natychmiast po zmianie kolumny, utwórz walidację przy użyciu zdarzenia ColumnChanging. W przeciwnym razie użyj RowChanging zdarzenia, co może spowodować przechwycenie kilku błędów jednocześnie. Ponadto jeśli dane są ustrukturyzowane tak, aby wartość jednej kolumny została zweryfikowana na podstawie zawartości innej kolumny, przeprowadź walidację podczas RowChanging zdarzenia.
Po zaktualizowaniu rekordów obiekt DataTable zgłasza zdarzenia, na które można reagować w trakcie ich występowania i po wprowadzeniu zmian.
Jeśli aplikacja używa typizowanego zestawu danych, możesz utworzyć silnie typizowane programy obsługi zdarzeń. Spowoduje to dodanie czterech dodatkowych typowanych zdarzeń, dla których można tworzyć programy obsługi: dataTableNameRowChanging
, dataTableNameRowChanged
, dataTableNameRowDeleting
i dataTableNameRowDeleted
. Te typizowane programy obsługi zdarzeń przekazują argument zawierający nazwy kolumn tabeli, które ułatwiają pisanie i odczytywanie kodu.
Zdarzenia aktualizacji danych
Zdarzenie | Opis |
---|---|
ColumnChanging | Wartość w kolumnie jest zmieniana. Zdarzenie przekazuje wiersz i kolumnę użytkownikowi wraz z proponowaną nową wartością. |
ColumnChanged | Wartość w kolumnie została zmieniona. Zdarzenie przekazuje wiersz i kolumnę do Ciebie wraz z proponowaną wartością. |
RowChanging | Zmiany wprowadzone w DataRow obiekcie mają zostać zatwierdzone z powrotem do zestawu danych. Jeśli nie wywołano metody BeginEdit, zdarzenie RowChanging jest zgłaszane dla każdej zmiany w kolumnie natychmiast po zgłoszeniu zdarzenia ColumnChanging. Jeśli wywołano BeginEdit metodę przed wprowadzeniem zmian, RowChanging zdarzenie jest zgłaszane tylko podczas wywoływania EndEdit metody. Zdarzenie przekazuje wiersz użytkownikowi wraz z wartością wskazującą, jaki rodzaj akcji (zmianę, wstawianie i tym podobne) jest wykonywany. |
RowChanged | Wiersz został zmieniony. Zdarzenie przekazuje użytkownikowi wiersz wraz z wartością wskazującą, jaki typ akcji (taki jak zmiana, wstawienie itd.) jest wykonywany. |
RowDeleting | Wiersz jest usuwany. Zdarzenie przekazuje wiersz do Ciebie wraz z wartością wskazującą, jaki typ akcji (usuwanie) jest wykonywany. |
RowDeleted | Wiersz został usunięty. Zdarzenie przekazuje wiersz do Ciebie wraz z wartością wskazującą, jaki typ akcji (usuwanie) jest wykonywany. |
Zdarzenia ColumnChanging, RowChanging i RowDeleting są wywoływane podczas procesu aktualizacji. Za pomocą tych zdarzeń można weryfikować dane lub wykonywać inne typy przetwarzania. Ponieważ aktualizacja jest przetwarzana podczas tych zdarzeń, można ją anulować, zgłaszając wyjątek, co uniemożliwia zakończenie aktualizacji.
Zdarzenia ColumnChanged, RowChanged i RowDeleted to zdarzenia powiadomień, które są zgłaszane po pomyślnym zakończeniu aktualizacji. Te zdarzenia są przydatne, gdy chcesz podjąć dalsze działania na podstawie pomyślnej aktualizacji.
Weryfikowanie danych podczas zmian w kolumnie
Uwaga / Notatka
Projektant zestawów danych tworzy klasę częściową, w której można dodać logikę walidacji do zestawu danych. Zestaw danych wygenerowany przez projektanta nie usuwa ani nie zmienia żadnego kodu w klasie częściowej.
Dane można zweryfikować, gdy wartość w kolumnie danych ulegnie zmianie, odpowiadając na ColumnChanging zdarzenie. Kiedy to zdarzenie jest wywoływane, przekazuje argument zdarzenia (ProposedValue), który zawiera proponowaną wartość dla bieżącej kolumny. Na podstawie zawartości e.ProposedValue
elementu można wykonywać następujące czynności:
Zaakceptuj proponowaną wartość, nic nie robiąc.
Odrzuć proponowaną wartość, ustawiając błąd kolumny (SetColumnError) w procedurze obsługi zdarzenia zmiany kolumny.
Opcjonalnie użyj kontrolki ErrorProvider , aby wyświetlić użytkownikowi komunikat o błędzie. Aby uzyskać więcej informacji, zobacz ErrorProvider component (Składnik ErrorProvider).
Walidację można również przeprowadzić podczas zdarzenia RowChanging.
Weryfikowanie danych podczas zmian wierszy
Możesz napisać kod, aby sprawdzić, czy każda kolumna, którą chcesz zweryfikować, zawiera dane spełniające wymagania aplikacji. Zrób to, ustawiając kolumnę, aby wskazać, że zawiera błąd, jeśli proponowana wartość jest niedopuszczalna. Poniższe przykłady ustawiają błąd kolumny, gdy kolumna Quantity
ma wartość 0 lub mniejszą. Procedury obsługi zdarzeń zmieniające wartości w wierszach powinny przypominać poniższe przykłady.
Aby zweryfikować dane po zmianie wiersza (Visual Basic)
Otwórz zestaw danych w projektancie zestawów danych . Aby uzyskać więcej informacji, zobacz Przewodnik: tworzenie zestawu danych w Projektancie zestawów danych.
Kliknij dwukrotnie pasek tytułu tabeli, którą chcesz zweryfikować. Ta akcja automatycznie tworzy procedurę obsługi zdarzenia RowChanging dla DataTable w pliku częściowej klasy zestawu danych.
Wskazówka
Kliknij dwukrotnie na lewo od nazwy tabeli, aby utworzyć procedurę obsługi zdarzenia zmiany wiersza. Jeśli klikniesz dwukrotnie nazwę tabeli, możesz ją edytować.
Private Sub Order_DetailsDataTable_Order_DetailsRowChanging( ByVal sender As System.Object, ByVal e As Order_DetailsRowChangeEvent ) Handles Me.Order_DetailsRowChanging If CType(e.Row.Quantity, Short) <= 0 Then e.Row.SetColumnError("Quantity", "Quantity must be greater than 0") Else e.Row.SetColumnError("Quantity", "") End If End Sub
Aby zweryfikować dane po zmianie wiersza (C#)
Otwórz zestaw danych w projektancie zestawów danych . Aby uzyskać więcej informacji, zobacz Przewodnik: tworzenie zestawu danych w Projektancie zestawów danych.
Kliknij dwukrotnie pasek tytułu tabeli, którą chcesz zweryfikować. Ta akcja powoduje utworzenie pliku klasy częściowej dla elementu DataTable.
Uwaga / Notatka
Projektant zestawów danych nie tworzy automatycznie procedury obsługi zdarzeń dla RowChanging zdarzenia. Musisz utworzyć metodę do obsługi RowChanging zdarzenia i uruchomić kod, aby powiązać zdarzenie w metodzie inicjowania tabeli.
Skopiuj następujący kod do klasy częściowej:
public override void EndInit() { base.EndInit(); Order_DetailsRowChanging += TestRowChangeEvent; } public void TestRowChangeEvent(object sender, Order_DetailsRowChangeEvent e) { if ((short)e.Row.Quantity <= 0) { e.Row.SetColumnError("Quantity", "Quantity must be greater than 0"); } else { e.Row.SetColumnError("Quantity", ""); } }
Aby pobrać zmienione wiersze
Każdy wiersz w tabeli danych ma właściwość RowState, która śledzi bieżący stan tego wiersza przy użyciu wartości w wyliczeniu DataRowState. Można zwrócić zmienione wiersze z zestawu danych lub tabeli danych, wywołując metodę GetChanges
obiektu DataSet lub DataTable. Możesz sprawdzić, czy zmiany istnieją przed wywołaniem GetChanges
, wywołując metodę HasChanges zestawu danych.
Uwaga / Notatka
Po zatwierdzeniu zmian w zestawie danych lub tabeli danych (wywołując metodę AcceptChanges ), GetChanges
metoda nie zwraca żadnych danych. Jeśli aplikacja musi przetworzyć zmienione wiersze, należy przetworzyć zmiany przed wywołaniem AcceptChanges
metody .
GetChanges Wywołanie metody zestawu danych lub tabeli danych zwraca nowy zestaw danych lub tabelę danych, która zawiera tylko rekordy, które zostały zmienione. Jeśli chcesz uzyskać określone rekordy — na przykład tylko nowe rekordy lub tylko zmodyfikowane rekordy — możesz przekazać wartość z DataRowState wyliczenia jako parametr do GetChanges
metody .
DataRowVersion Użyj wyliczenia, aby uzyskać dostęp do różnych wersji wiersza (na przykład oryginalnych wartości, które znajdowały się w wierszu przed jego przetworzeniem).
Aby pobrać wszystkie zmienione rekordy z zestawu danych
Wywołaj metodę GetChanges zestawu danych.
Poniższy przykład tworzy nowy zestaw danych o nazwie
changedRecords
i wypełnia go wszystkimi zmienionymi rekordami z innego zestawu danych o nazwiedataSet1
.
Aby pobrać wszystkie zmienione rekordy z tabeli danych
Wywołaj metodę GetChanges obiektu DataTable.
Poniższy przykład tworzy nową tabelę danych o nazwie
changedRecordsTable
i wypełnia ją wszystkimi zmienionymi rekordami z innej tabeli danych o nazwiedataTable1
.
Aby pobrać wszystkie rekordy, które mają określony stan wiersza
Wywołaj metodę
GetChanges
zestawu danych lub tabeli danych i przekaż DataRowState wartość wyliczenia jako argument.W poniższym przykładzie pokazano, jak utworzyć nowy zestaw danych o nazwie
addedRecords
i wypełnić go tylko rekordami, które zostały dodane dodataSet1
zestawu danych.W poniższym przykładzie pokazano, jak zwrócić wszystkie rekordy, które zostały ostatnio dodane do
Customers
tabeli:
Uzyskaj dostęp do oryginalnej wersji DataRow
Po wprowadzeniu zmian w wierszach danych zestaw danych zachowuje zarówno oryginalne (Original) jak i noweCurrent wersje wiersza. Na przykład przed wywołaniem AcceptChanges
metody aplikacja może uzyskać dostęp do różnych wersji rekordu (zgodnie z definicją w wyliczeniu DataRowVersion) i odpowiednio przetworzyć zmiany.
Uwaga / Notatka
Różne wersje wiersza istnieją dopiero po jego edycji i przed wywołaniam AcceptChanges
metody. Po wywołaniu metody AcceptChanges
, bieżące i oryginalne wersje są takie same.
Przekazanie wartości DataRowVersion wraz z indeksem kolumny (lub nazwą kolumny jako ciąg znakowy) zwraca wartość z wersji wiersza tej kolumny. Zmieniona kolumna jest identyfikowana podczas zdarzeń ColumnChanging i ColumnChanged . Jest to dobry moment na sprawdzenie różnych wersji wierszy do celów weryfikacji. Jeśli jednak ograniczenia zostały tymczasowo zawieszone, te zdarzenia nie zostaną zgłoszone i trzeba będzie programowo określić, które kolumny uległy zmianie. Można to zrobić, iterując za pomocą Columns kolekcji i porównując różne DataRowVersion wartości.
Aby uzyskać oryginalną wersję rekordu
Aby uzyskać dostęp do wartości kolumny, przekaż DataRowVersion wiersza, który chcesz zwrócić.
W poniższym przykładzie pokazano, jak przy użyciu wartości DataRowVersion uzyskać oryginalną wartość pola
CompanyName
w DataRow.
Uzyskiwanie dostępu do bieżącej wersji elementu DataRow
Aby uzyskać bieżącą wersję rekordu
Uzyskaj dostęp do wartości kolumny, a następnie dodaj parametr do indeksu, który wskazuje, która wersja wiersza ma zostać zwrócona.
W poniższym przykładzie pokazano, jak użyć wartości DataRowVersion do uzyskania bieżącej wartości pola
CompanyName
w DataRow.