Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
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.
Program Visual Studio udostępnia narzędzia projektowania do pracy z obiektami niestandardowymi jako źródłem danych w aplikacji. Jeśli chcesz przechowywać dane z bazy danych w obiekcie powiązanym z kontrolkami interfejsu użytkownika, zalecane jest użycie programu Entity Framework do generowania klas lub klas. Program Entity Framework automatycznie generuje cały standardowy kod śledzenia zmian, co oznacza, że wszelkie zmiany obiektów lokalnych są automatycznie utrwalane w bazie danych po wywołaniu metody AcceptChanges w obiekcie DbSet. Aby uzyskać więcej informacji, zobacz Dokumentację programu Entity Framework.
Wskazówka
Metody powiązania obiektów w tym artykule powinny być brane pod uwagę tylko wtedy, gdy aplikacja jest już oparta na zestawach danych. Możesz również użyć tych metod, jeśli znasz już zestawy danych, a dane, które będziesz przetwarzać, są tabelaryczne i nie są zbyt złożone lub zbyt duże. Aby uzyskać jeszcze prostszy przykład dotyczący ładowania danych bezpośrednio do obiektów przy użyciu elementu DataReader i ręcznego aktualizowania interfejsu użytkownika bez powiązania danych, zobacz Tworzenie prostej aplikacji danych przy użyciu ADO.NET.
Wymagania dotyczące obiektu
Jedynym wymaganiem dla obiektów niestandardowych do pracy z narzędziami projektowania danych w programie Visual Studio jest to, że obiekt potrzebuje co najmniej jednej właściwości publicznej.
Ogólnie rzecz biorąc, obiekty niestandardowe nie wymagają żadnych określonych interfejsów, konstruktorów ani atrybutów do działania jako źródła danych dla aplikacji. Jeśli jednak chcesz przeciągnąć obiekt z okna Źródła danych do powierzchni projektowej w celu utworzenia kontrolki powiązanej z danymi, a jeśli obiekt implementuje ITypedList interfejs lub IListSource , obiekt musi mieć konstruktor domyślny. W przeciwnym razie program Visual Studio nie może zainicjować wystąpienia obiektu źródła danych i wyświetla błąd podczas przeciągnięcia elementu na powierzchnię projektową.
Przykłady użycia obiektów niestandardowych jako źródeł danych
Chociaż istnieje wiele sposobów implementowania logiki aplikacji podczas pracy z obiektami jako źródłem danych, w przypadku baz danych SQL istnieje kilka standardowych operacji, które można uprościć przy użyciu obiektów TableAdapter wygenerowanych przez program Visual Studio. Na tej stronie wyjaśniono, jak zaimplementować te standardowe procesy przy użyciu elementów TableAdapters. Nie jest ona przeznaczona jako przewodnik tworzenia obiektów niestandardowych. Na przykład zwykle wykonujesz następujące standardowe operacje niezależnie od konkretnej implementacji obiektów lub logiki aplikacji:
Ładowanie danych do obiektów (zazwyczaj z bazy danych).
Tworzenie kolekcji obiektów typu.
Dodawanie obiektów do kolekcji i usuwanie ich z kolekcji.
Wyświetlanie danych obiektu użytkownikom w formularzu.
Zmiana/edytowanie danych w obiekcie.
Zapisywanie danych z obiektów z powrotem do bazy danych.
Ładowanie danych do obiektów
W tym przykładzie dane są ładowane do obiektów przy użyciu TableAdapterów. Domyślnie klasy TableAdapters są tworzone przy użyciu dwóch rodzajów metod, które pobierają dane z bazy danych i wypełniają tabele danych.
Metoda
TableAdapter.Fillwypełnia istniejącą tabelę danych zwróconymi danymi.Metoda
TableAdapter.GetDatazwraca nową tabelę danych wypełniną danymi.
Najprostszym sposobem załadowania obiektów niestandardowych przy użyciu danych jest wywołanie metody TableAdapter.GetData, przejście pętlą przez kolekcję wierszy w zwracanej tabeli danych i wypełnienie każdego obiektu wartościami z każdego wiersza. Możesz utworzyć metodę zwracającą wypełniona tabelę GetData danych dla dowolnego zapytania dodanego do tabeli TableAdapter.
Uwaga / Notatka
Program Visual Studio domyślnie nazywa zapytania TableAdapter Fill i GetData, ale można zmienić te nazwy na dowolną prawidłową nazwę metody.
W poniższym przykładzie pokazano, jak iterować przez wiersze w tabeli danych i wypełniać obiekt danymi.
private void LoadCustomers()
{
NorthwindDataSet.CustomersDataTable customerData =
customersTableAdapter1.GetTop5Customers();
foreach (NorthwindDataSet.CustomersRow customerRow in customerData)
{
Customer currentCustomer = new Customer();
currentCustomer.CustomerID = customerRow.CustomerID;
currentCustomer.CompanyName = customerRow.CompanyName;
if (customerRow.IsAddressNull() == false)
{
currentCustomer.Address = customerRow.Address;
}
if (customerRow.IsCityNull() == false)
{
currentCustomer.City = customerRow.City;
}
if (customerRow.IsContactNameNull() == false)
{
currentCustomer.ContactName = customerRow.ContactName;
}
if (customerRow.IsContactTitleNull() == false)
{
currentCustomer.ContactTitle = customerRow.ContactTitle;
}
if (customerRow.IsCountryNull() == false)
{
currentCustomer.Country = customerRow.Country;
}
if (customerRow.IsFaxNull() == false)
{
currentCustomer.Fax = customerRow.Fax;
}
if (customerRow.IsPhoneNull() == false)
{
currentCustomer.Phone = customerRow.Phone;
}
if (customerRow.IsPostalCodeNull() == false)
{
currentCustomer.PostalCode = customerRow.PostalCode;
}
if (customerRow.IsRegionNull() == false)
{
currentCustomer.Region = customerRow.Region;
}
LoadOrders(currentCustomer);
customerBindingSource.Add(currentCustomer);
}
}
Utwórz typizowaną kolekcję obiektów
Można tworzyć klasy kolekcji dla obiektów lub używać typowanych kolekcji, które są automatycznie udostępniane przez składnik BindingSource.
Podczas tworzenia niestandardowej klasy kolekcji dla obiektów sugerujemy dziedziczenie z BindingList<T> klasy. Ta klasa ogólna udostępnia funkcje administrowania kolekcją, a także możliwość zgłaszania zdarzeń, które wysyłają powiadomienia do infrastruktury powiązania danych w formularzach Windows Forms.
Automatycznie wygenerowana kolekcja w BindingSource używa BindingList<T> dla swojej typizowanej kolekcji. Jeśli aplikacja nie wymaga dodatkowych funkcji, możesz zachować kolekcję w programie BindingSource. Aby uzyskać więcej informacji, zajrzyj do właściwości List klasy BindingSource.
Uwaga / Notatka
Jeśli kolekcja wymaga funkcji, które nie są dostarczane przez podstawową implementację BindingList<T> klasy, należy utworzyć kolekcję niestandardową, aby móc w razie potrzeby dodać funkcjonalność do klasy.
Poniższy kod pokazuje, jak utworzyć klasę dla silnie typizowanej Order kolekcji obiektów:
/// <summary>
/// A collection of Orders
/// </summary>
public class Orders: System.ComponentModel.BindingList<Order>
{
// Add any additional functionality required by your collection.
}
Dodawanie obiektów do kolekcji
Dodajesz obiekty do kolekcji, wywołując metodę Add swojej niestandardowej klasy kolekcji lub klasy BindingSource.
Uwaga / Notatka
Metoda Add jest automatycznie udostępniana dla niestandardowej kolekcji podczas dziedziczenia po BindingList<T>.
Poniższy kod pokazuje, jak dodać obiekty do typizowanej kolekcji w BindingSource.
Poniższy kod pokazuje, jak dodać obiekty do kolekcji typizowanej, która dziedziczy z klasy BindingList<T>.
Uwaga / Notatka
W tym przykładzie kolekcja Orders jest właściwością obiektu Customer.
Usuwanie obiektów z kolekcji
Obiekty usuwa się z kolekcji, wywołując metodę Remove lub RemoveAt w twojej klasie kolekcji niestandardowej lub BindingSource klasie.
Uwaga / Notatka
Metody Remove i RemoveAt są automatycznie udostępniane dla twojej kolekcji niestandardowej, gdy dziedziczysz z BindingList<T>.
Poniższy kod pokazuje, jak zlokalizować i usunąć obiekty z typizowanej kolekcji w BindingSource za pomocą metody RemoveAt:
int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);
Wyświetlanie danych obiektów dla użytkowników
Aby wyświetlić dane w obiektach dla użytkowników, utwórz źródło danych obiektu za pomocą kreatora Konfiguracja źródła danych , a następnie przeciągnij cały obiekt lub poszczególne właściwości do formularza z okna Źródła danych .
Modyfikowanie danych w obiektach
Aby edytować dane w obiektach niestandardowych powiązanych z kontrolkami formularzy systemu Windows, po prostu edytuj dane w powiązanej kontrolce (lub bezpośrednio we właściwościach obiektu). Architektura powiązania danych aktualizuje dane w obiekcie.
Jeśli aplikacja wymaga śledzenia zmian i wycofywania proponowanych zmian w ich oryginalnych wartościach, musisz zaimplementować tę funkcję w modelu obiektów. Przykłady sposobu śledzenia proponowanych zmian w tabelach danych można znaleźć w temacie DataRowState, HasChangesi GetChanges.
Zapisywanie danych w obiektach z powrotem do bazy danych
Zapisz dane do bazy danych, przekazując wartości z obiektu do metod DBDirect TableAdaptera.
Program Visual Studio tworzy metody DBDirect, które można wykonywać bezpośrednio w bazie danych. Te metody nie wymagają obiektów DataSet ani DataTable.
| TableAdapter DBDirect, metoda | Opis |
|---|---|
TableAdapter.Insert |
Dodaje nowe rekordy do bazy danych, umożliwiając przekazywanie poszczególnych wartości kolumn jako parametrów metody. |
TableAdapter.Update |
Aktualizuje istniejące rekordy w bazie danych. Metoda Update przyjmuje oryginalne i nowe wartości kolumn jako parametry metody. Oryginalne wartości są używane do lokalizowania oryginalnego rekordu, a nowe wartości są używane do aktualizowania tego rekordu. Metoda TableAdapter.Update jest również używana do uzgadniania zmian w zestawie danych z powrotem do bazy danych przez przyjęcie DataSet, DataTable, DataRow lub tablicy DataRow jako parametrów metody. |
TableAdapter.Delete |
Usuwa istniejące rekordy z bazy danych na podstawie oryginalnych wartości kolumn przekazanych jako parametry metody. |
Aby zapisać dane z kolekcji obiektów, wykonaj pętlę przez kolekcję obiektów (na przykład przy użyciu pętli for-next). Wyślij wartości dla każdego obiektu do bazy danych przy użyciu metod DBDirect usługi TableAdapter.
W poniższym przykładzie pokazano, jak za pomocą TableAdapter.Insert metody DBDirect dodać nowego klienta bezpośrednio do bazy danych:
private void AddNewCustomers(Customer currentCustomer)
{
customersTableAdapter.Insert(
currentCustomer.CustomerID,
currentCustomer.CompanyName,
currentCustomer.ContactName,
currentCustomer.ContactTitle,
currentCustomer.Address,
currentCustomer.City,
currentCustomer.Region,
currentCustomer.PostalCode,
currentCustomer.Country,
currentCustomer.Phone,
currentCustomer.Fax);
}