Udostępnij za pośrednictwem


Architektura składnika BindingSource

BindingSource Za pomocą składnika można powszechnie powiązać wszystkie kontrolki Windows Forms ze źródłami danych.

Składnik BindingSource upraszcza proces wiązania kontrolek ze źródłem danych i zapewnia następujące korzyści w porównaniu z tradycyjnym powiązaniem danych:

  • Umożliwia powiązanie czasu projektowania z obiektami biznesowymi.

  • Hermetyzuje CurrencyManager funkcjonalność i uwidacznia CurrencyManager zdarzenia w czasie projektowania.

  • Upraszcza tworzenie listy obsługującej IBindingList interfejs, udostępniając powiadomienie o zmianie listy dla źródeł danych, które nie obsługują natywnie powiadomienia o zmianie listy.

  • Zapewnia punkt rozszerzalności dla IBindingList.AddNew metody .

  • Zapewnia poziom pośredni między źródłem danych a kontrolką. Ta pośredniość jest ważna, gdy źródło danych może ulec zmianie w czasie wykonywania.

  • Współdziała z innymi kontrolkami formularzy systemu Windows powiązanymi z danymi, w szczególności kontrolkami BindingNavigatorDataGridView i .

Z tych powodów BindingSource składnik jest preferowanym sposobem powiązania kontrolek formularzy systemu Windows ze źródłami danych.

BindingSource — funkcje

Składnik BindingSource udostępnia kilka funkcji do tworzenia powiązań kontrolek z danymi. Dzięki tym funkcjom można zaimplementować większość scenariuszy powiązań danych z niemal bez kodowania ze swojej strony.

Ten BindingSource składnik umożliwia zapewnienie spójnego interfejsu umożliwiającego uzyskiwanie dostępu do wielu różnych rodzajów źródeł danych. Oznacza to, że do powiązania z dowolnym typem jest używana ta sama procedura. Na przykład można dołączyć DataSource właściwość do DataSet obiektu lub do obiektu biznesowego, a w obu przypadkach używasz tego samego zestawu właściwości, metod i zdarzeń do manipulowania źródłem danych.

Spójny interfejs dostarczany przez BindingSource składnik znacznie upraszcza proces wiązania danych z kontrolkami. W przypadku typów źródeł danych, które zapewniają powiadomienie o zmianie, BindingSource składnik automatycznie komunikuje zmiany między kontrolką a źródłem danych. W przypadku typów źródeł danych, które nie udostępniają powiadomienia o zmianie, udostępniane są zdarzenia, które umożliwiają zgłaszanie powiadomień o zmianie. Na poniższej BindingSource liście przedstawiono funkcje obsługiwane przez składnik:

Pośredniość

Składnik BindingSource zapewnia poziom pośredni między kontrolką a źródłem danych. Zamiast wiązać kontrolkę bezpośrednio ze źródłem danych, należy powiązać kontrolkę z elementem BindingSourcei dołączyć źródło danych do BindingSource właściwości składnika DataSource .

Dzięki temu poziomowi pośrednim można zmienić źródło danych bez resetowania powiązania kontrolki. Zapewnia to następujące możliwości:

Zarządzanie walutami

Składnik BindingSource implementuje ICurrencyManagerProvider interfejs do obsługi zarządzania walutami. Za pomocą interfejsu ICurrencyManagerProvider można również uzyskać dostęp do menedżera waluty dla BindingSourceelementu , oprócz menedżera walut dla innego BindingSource powiązanego z tym samym DataMemberelementem .

Składnik BindingSource hermetyzuje CurrencyManager funkcjonalność i uwidacznia najbardziej typowe CurrencyManager właściwości i zdarzenia. W poniższej tabeli opisano niektóre elementy członkowskie związane z zarządzaniem walutami.

CurrencyManager Właściwość
Pobiera menedżera waluty skojarzonego z .BindingSource

GetRelatedCurrencyManager Metoda
Jeśli istnieje inny BindingSource element powiązany z określonym elementem członkowskim danych, pobiera menedżera waluty.

Current Właściwość
Pobiera bieżący element źródła danych.

Position Właściwość
Pobiera lub ustawia bieżącą pozycję na liście bazowej.

EndEdit Metoda
Stosuje oczekujące zmiany w bazowym źródle danych.

CancelEdit Metoda
Anuluje bieżącą operację edycji.

Źródło danych jako lista

Składnik BindingSource implementuje IBindingListView interfejsy i ITypedList . Dzięki tej implementacji można użyć BindingSource samego składnika jako źródła danych bez żadnego magazynu zewnętrznego.

Gdy BindingSource składnik jest dołączony do źródła danych, uwidacznia źródło danych jako listę.

Właściwość DataSource można ustawić na kilka źródeł danych. Obejmują one typy, obiekty i listy typów. Wynikowe źródło danych zostanie uwidocznione jako lista. W poniższej tabeli przedstawiono niektóre typowe źródła danych i wynikową ocenę listy.

Właściwość DataSource Wyświetlanie listy wyników
Odwołanie o wartości null (Nothing w Visual Basic) IBindingList Pusty obiekt. Dodanie elementu powoduje ustawienie listy na typ dodanego elementu.
Odwołanie o wartości null (Nothingw Visual Basic) z zestawem DataMember Nieobsługiwane; ArgumentExceptionpodnosi .
Typ innej niż lista lub obiekt typu "T" IBindingList Pusty typ "T".
Wystąpienie tablicy Element IBindingList zawierający elementy tablicy.
IEnumerable Wystąpienie Element IBindingList zawierający IEnumerable elementy
Wystąpienie listy zawierające typ "T" Wystąpienie IBindingList zawierające typ "T".

DataSource Ponadto można ustawić na inne typy list, takie jak IListSource i ITypedList, i , i BindingSource obsłuży je odpowiednio. W takim przypadku typ zawarty na liście powinien mieć konstruktor bez parametrów.

BindingSource jako IBindingList

Składnik BindingSource udostępnia elementy członkowskie do uzyskiwania dostępu do danych bazowych i manipulowania nimi jako elementu IBindingList. W poniższej tabeli opisano niektóre z tych elementów członkowskich.

Element członkowski opis
List Właściwość Pobiera listę, która wynika z oceny DataSource właściwości lub DataMember .
AddNew Metoda Dodaje nowy element do bazowej listy. Dotyczy źródeł danych, które implementują IBindingList interfejs i zezwalają na dodawanie elementów (czyli właściwość jest ustawiona AllowNew na truewartość ).

Tworzenie elementu niestandardowego

Zdarzenie można obsłużyć AddingNew , aby zapewnić własną logikę tworzenia elementów. Zdarzenie AddingNew występuje przed dodaniu nowego obiektu do obiektu BindingSource. To zdarzenie jest wywoływane po wywołaniu AddNew metody, ale przed dodaniu nowego elementu do listy bazowej. Obsługa tego zdarzenia umożliwia zapewnienie zachowania tworzenia elementów niestandardowych bez wyprowadzania z BindingSource klasy. Aby uzyskać więcej informacji, zobacz How to: Customize Item Add with the Windows Forms BindingSource (Instrukcje: dostosowywanie dodawania elementu za pomocą powiązania formularzy systemu Windows).

Tworzenie elementu transakcyjnego

Składnik BindingSource implementuje ICancelAddNew interfejs, który umożliwia tworzenie elementów transakcyjnych. Po tymczasowym utworzeniu nowego elementu za pomocą wywołania metody AddNew, dodanie może zostać zatwierdzone lub wycofane w następujący sposób:

  • Metoda EndNew jawnie zatwierdzi oczekujące dodanie.

  • Wykonanie innej operacji zbierania, takiej jak wstawienie, usunięcie lub przeniesienie, będzie niejawnie zatwierdzać oczekujące dodanie.

  • Metoda CancelNew wycofa oczekujące dodanie, jeśli metoda nie została jeszcze zatwierdzona.

Obsługa IEnumerable

Składnik BindingSource umożliwia powiązanie kontrolek ze IEnumerable źródłami danych. Za pomocą tego składnika można powiązać ze źródłem danych, takim jak System.Data.SqlClient.SqlDataReader.

IEnumerable Po przypisaniu źródła danych do BindingSource składnika BindingSource element tworzy IBindingList element i dodaje zawartość IEnumerable źródła danych do listy.

Obsługa czasu projektowania

Niektórych typów obiektów nie można utworzyć w czasie projektowania, takich jak obiekty utworzone na podstawie klasy fabryki lub obiekty zwracane przez usługę sieci Web. Czasami może być konieczne powiązanie kontrolek z tymi typami w czasie projektowania, mimo że w pamięci nie ma obiektu, z którym kontrolki mogą być powiązane. Na przykład może być konieczne etykietowanie nagłówków DataGridView kolumn kontrolki z nazwami właściwości publicznych typu niestandardowego.

Aby obsługiwać ten scenariusz, BindingSource składnik obsługuje powiązanie z elementem Type. Po przypisaniu elementu Type do DataSource właściwości BindingSource składnik tworzy BindingList<T> puste Type elementy. Wszystkie kontrolki, które następnie są powiązane ze BindingSource składnikiem, będą powiadamiane o obecności właściwości lub schematu typu w czasie projektowania lub w czasie wykonywania. Aby uzyskać więcej informacji, zobacz How to: Bind a Windows Forms Control to a Type (Instrukcje: wiązanie kontrolki formularzy systemu Windows z typem).

Statyczne metody ListBindingHelper

Typy System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManageri BindingSource wszystkie współdzielą wspólną logikę, aby wygenerować listę na podstawie DataSource/DataMember pary. Ponadto ta typowa logika jest publicznie udostępniana do użytku przez autorów kontroli i innych firm w następujących static metodach:

Sortowanie i filtrowanie za pomocą interfejsu IBindingListView

Składnik BindingSource implementuje IBindingListView interfejs, który rozszerza IBindingList interfejs. Oferuje IBindingList sortowanie z jedną kolumną i IBindingListView oferuje zaawansowane sortowanie i filtrowanie. Za pomocą IBindingListViewpolecenia można sortować i filtrować elementy w źródle danych, jeśli źródło danych implementuje również jeden z tych interfejsów. Składnik BindingSource nie zapewnia implementacji referencyjnej tych elementów członkowskich. Zamiast tego wywołania są przekazywane do bazowej listy.

W poniższej tabeli opisano właściwości używane do sortowania i filtrowania.

Element członkowski opis
Filter Właściwość Jeśli źródłem danych jest IBindingListView, pobiera lub ustawia wyrażenie używane do filtrowania, które wiersze są wyświetlane.
Sort Właściwość Jeśli źródłem danych jest IBindingList, pobiera lub ustawia nazwę kolumny używaną do sortowania i sortowania informacji o kolejności.

— lub —

Jeśli źródło danych jest IBindingListView źródłem danych i obsługuje sortowanie zaawansowane, pobiera wiele nazw kolumn używanych do sortowania i sortowania

Integracja z aplikacją BindingNavigator

Za pomocą BindingSource składnika można powiązać dowolną kontrolkę Windows Forms ze źródłem danych, ale kontrolka BindingNavigator została zaprojektowana specjalnie do pracy ze składnikiem BindingSource . Kontrolka BindingNavigator udostępnia interfejs użytkownika do kontrolowania bieżącego BindingSource elementu składnika. Domyślnie kontrolka BindingNavigator udostępnia przyciski odpowiadające metodom nawigacji w składniku BindingSource . Aby uzyskać więcej informacji, zobacz How to: Navigate Data with the Windows Forms BindingNavigator Control (Instrukcje: nawigowanie po danych za pomocą kontrolki BindingNavigator formularzy systemu Windows).

Zobacz też