Edytowanie danych w zestawach danych przy użyciu programu .NET Framework

Uwaga

Zestawy danych 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. Są one szczególnie przydatne w przypadku aplikacji, które umożliwiają użytkownikom modyfikowanie danych i utrwalanie zmian z powrotem w bazie danych. Mimo że zestawy danych okazały się bardzo udaną technologią, zalecamy, aby nowe aplikacje platformy .NET używały platformy Entity Framework Core. Program Entity Framework zapewnia bardziej naturalny sposób pracy z danymi tabelarycznymi jako modelami obiektów i ma prostszy interfejs programowania.

Dane można edytować w tabelach danych, podobnie jak w przypadku edytowania danych w tabeli w dowolnej bazie danych. Proces może obejmować wstawianie, aktualizowanie i usuwanie rekordów w tabeli. W formularzu powiązanym z danymi można określić, które pola są edytowalne przez użytkownika. W takich przypadkach infrastruktura powiązania danych obsługuje wszystkie śledzenie zmian, dzięki czemu zmiany mogą być wysyłane z powrotem do bazy danych później. Jeśli programowo dokonasz edycji danych i zamierzasz wysłać te zmiany z powrotem do bazy danych, należy użyć obiektów i metod, które wykonują śledzenie zmian.

Oprócz zmiany rzeczywistych danych można również wykonać zapytanie, DataTable aby zwrócić określone wiersze danych. Można na przykład wykonywać zapytania dotyczące poszczególnych wierszy, określonych wersji wierszy (oryginalnych i proponowanych), wierszy, które uległy zmianie, lub wierszy, które mają błędy.

Aby edytować wiersze w zestawie danych

Aby edytować istniejący wiersz w obiekcie DataTable, należy zlokalizować DataRow , który chcesz edytować, a następnie przypisać zaktualizowane wartości do żądanych kolumn.

Jeśli nie znasz indeksu wiersza, który chcesz edytować, użyj FindBy metody do wyszukiwania według klucza podstawowego:

NorthwindDataSet.CustomersRow customersRow = 
    northwindDataSet1.Customers.FindByCustomerID("ALFKI");

customersRow.CompanyName = "Updated Company Name";
customersRow.City = "Seattle";

Jeśli znasz indeks wiersza, możesz uzyskać dostęp do wierszy i edytować je w następujący sposób:

northwindDataSet1.Customers[4].CompanyName = "Updated Company Name";
northwindDataSet1.Customers[4].City = "Seattle";

Aby wstawić nowe wiersze do zestawu danych

Aplikacje korzystające z kontrolek powiązanych z danymi zwykle dodaj nowe rekordy za pomocą przycisku Dodaj nowy w kontrolce BindingNavigator.

Aby ręcznie dodać nowe rekordy do zestawu danych, utwórz nowy wiersz danych, wywołując metodę w tabeli DataTable. Następnie dodaj wiersz do DataRow kolekcji (Rows) elementu DataTable:

NorthwindDataSet.CustomersRow newCustomersRow = 
    northwindDataSet1.Customers.NewCustomersRow();

newCustomersRow.CustomerID = "ALFKI";
newCustomersRow.CompanyName = "Alfreds Futterkiste";

northwindDataSet1.Customers.Rows.Add(newCustomersRow);

Aby zachować informacje, które zestaw danych musi wysyłać aktualizacje do źródła danych, użyj Delete metody , aby usunąć wiersze w tabeli danych. Jeśli na przykład aplikacja używa metody TableAdapter (lub DataAdapter), metoda TableAdapter Update usuwa wiersze w bazie danych z wartością RowStateDeleted.

Jeśli aplikacja nie musi wysyłać aktualizacji z powrotem do źródła danych, można usunąć rekordy, bezpośrednio korzystając z kolekcji wierszy danych (Remove).

Aby usunąć rekordy z tabeli danych

  • Wywołaj metodę Delete klasy DataRow.

    Ta metoda nie powoduje fizycznego usunięcia rekordu. Zamiast tego oznacza rekord do usunięcia.

    Uwaga

    Jeśli uzyskasz właściwość DataRowCollectioncount elementu , wynikowa liczba zawiera rekordy, które zostały oznaczone do usunięcia. Aby uzyskać dokładną liczbę rekordów, które nie są oznaczone do usunięcia, możesz wykonać pętlę w kolekcji, przeglądając RowState właściwość każdego rekordu. (Rekordy oznaczone do usunięcia mają RowState znak Deleted.) Alternatywnie możesz utworzyć widok danych zestawu danych, który filtruje na podstawie stanu wiersza i pobrać właściwość count z tego miejsca.

W poniższym przykładzie pokazano, jak wywołać metodę Delete , aby oznaczyć pierwszy wiersz w Customers tabeli jako usunięty:

northwindDataSet1.Customers.Rows[0].Delete();

Określanie, czy istnieją zmienione wiersze

Po wprowadzeniu zmian w rekordach w zestawie danych informacje o tych zmianach są przechowywane do momentu ich zatwierdzenia. Zmiany są zatwierdzane podczas wywoływania AcceptChanges metody zestawu danych lub tabeli danych albo podczas wywoływania Update metody tableAdapter lub karty danych.

Zmiany są śledzone na dwa sposoby w każdym wierszu danych:

  • Każdy wiersz danych zawiera informacje związane z jego RowState elementami (na przykład Added, , Modified, Deletedlub Unchanged).

  • Każdy zmieniony wiersz danych zawiera wiele wersji tego wiersza (), oryginalną wersję (DataRowVersionprzed zmianami) i bieżącą wersję (po zmianach). W okresie oczekiwania na zmianę (czas odpowiedzi na RowChanging zdarzenie) dostępna jest również trzecia wersja — proponowana wersja .

Metoda HasChanges zestawu danych zwraca true , czy zmiany zostały wprowadzone w zestawie danych. Po określeniu, że zmienione wiersze istnieją, można wywołać GetChanges metodę obiektu DataSet lub DataTable , aby zwrócić zestaw zmienionych wierszy.

Aby określić, czy zmiany zostały wprowadzone w wierszach

  • Wywołaj metodę HasChanges zestawu danych, aby sprawdzić, czy nie zmieniono wierszy.

W poniższym przykładzie pokazano, jak sprawdzić wartość zwracaną z metody w HasChanges celu wykrycia, czy w zestawie danych o nazwie NorthwindDataset1istnieją jakieś zmienione wiersze:

if (northwindDataSet1.HasChanges()) 
{
    // Changed rows were detected, add appropriate code.
}
else
{
    // No changed rows were detected, add appropriate code.
}

Określanie typu zmian

Możesz również sprawdzić, jaki typ zmian wprowadzono w zestawie danych, przekazując wartość z DataRowState wyliczenia do HasChanges metody .

Aby określić, jakiego typu zmiany zostały wprowadzone w wierszu

W poniższym przykładzie pokazano, jak sprawdzić zestaw danych o nazwie NorthwindDataset1 w celu określenia, czy do niego zostały dodane nowe wiersze:

if (northwindDataSet1.HasChanges(DataRowState.Added)) 
{
    // New rows have been added to the dataset, add appropriate code.
}
else
{
    // No new rows have been added to the dataset, add appropriate code.
}

Aby zlokalizować wiersze z błędami

Podczas pracy z poszczególnymi kolumnami i wierszami danych mogą wystąpić błędy. Właściwość można sprawdzić, HasErrors aby określić, czy błędy istnieją w DataSetobiekcie , DataTablelub DataRow.

  1. Sprawdź właściwość, HasErrors aby sprawdzić, czy w zestawie danych występują błędy.

  2. HasErrors Jeśli właściwość ma truewartość , wykonuje iteracje po kolekcjach tabel, a następnie przez wiersze, aby znaleźć wiersz z błędem.

private void FindErrors() 
{
    if (dataSet1.HasErrors)
    {
        foreach (DataTable table in dataSet1.Tables)
        {
            if (table.HasErrors)
            {
                foreach (DataRow row in table.Rows)
                {
                    if (row.HasErrors)
                    {
                        // Process error here.
                    }
                }
            }
        }
    }
}