Architektura składnika BindingSource
Za pomocą składnika BindingSource 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 funkcjonalność CurrencyManager i uwidacznia zdarzenia CurrencyManager na etapie projektowania.
Upraszcza tworzenie listy obsługującej interfejs IBindingList, 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 metody IBindingList.AddNew.
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 BindingNavigator i kontrolkami DataGridView.
Z tych powodów składnik BindingSource jest preferowanym sposobem powiązania kontrolek windows Forms ze źródłami danych.
BindingSource — funkcje
Składnik BindingSource udostępnia kilka funkcji do powiązywania kontrolek z danymi. Dzięki tym funkcjom można zaimplementować większość scenariuszy powiązań danych z niemal bez kodowania ze swojej strony.
Składnik BindingSource zapewnia spójny interfejs umożliwiający 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. Można na przykład dołączyć właściwość DataSource do DataSet 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 składnik BindingSource znacznie upraszcza proces wiązania danych z kontrolkami. W przypadku typów źródeł danych, które zapewniają powiadomienie o zmianie, składnik BindingSource 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 liście przedstawiono funkcje obsługiwane przez składnik BindingSource:
Pośrednictwo
Zarządzanie walutami.
Źródło danych jako lista.
BindingSource jako IBindingList.
Tworzenie elementu niestandardowego.
Tworzenie elementu transakcyjnego.
IEnumerable obsługa.
Obsługa czasu projektowania.
Statyczne metody ListBindingHelper.
Sortowanie i filtrowanie za pomocą interfejsu IBindingListView.
Integracja z BindingNavigator.
Niebezpoś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 BindingSourcei dołączyć źródło danych do właściwości DataSource składnika BindingSource.
Dzięki temu poziomowi pośrednictwa można zmienić źródło danych bez resetowania powiązania z kontrolką. Zapewnia to następujące możliwości:
Można dołączyć BindingSource do różnych źródeł danych, zachowując bieżące powiązania kontrolek.
Możesz zmieniać elementy w źródle danych i powiadamiać powiązane kontrolki. Aby uzyskać więcej informacji, zobacz Jak odzwierciedlić aktualizacje źródła danych w kontrolce Windows Forms za pomocą BindingSource.
Można powiązać się z Type zamiast obiektu znajdującego się w pamięci. Aby uzyskać więcej informacji, zobacz Jak: Powiązać kontrolkę Windows Forms z typem. Następnie można powiązać z obiektem w czasie wykonywania.
Zarządzanie walutami
Składnik BindingSource implementuje interfejs ICurrencyManagerProvider do obsługi zarządzania walutami. Za pomocą interfejsu ICurrencyManagerProvider można również uzyskać dostęp do menedżera walut dla BindingSource, oprócz menedżera walut dla innego BindingSource powiązanego z tym samym DataMember.
Składnik BindingSource hermetyzuje CurrencyManager funkcjonalność i uwidacznia najbardziej typowe właściwości i zdarzenia CurrencyManager. W poniższej tabeli opisano niektórych członków związanych z zarządzaniem walutami.
właściwość CurrencyManager
Pobiera menedżera waluty skojarzonego z BindingSource.
GetRelatedCurrencyManager metoda
Jeśli istnieje inny BindingSource powiązany z określonym członkiem danych, pobiera jego menedżera walut.
właściwość Current
Pobiera bieżący element źródła danych.
właściwość Position
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 interfejsy IBindingListView i ITypedList. Dzięki tej implementacji można użyć samego składnika BindingSource jako źródła danych bez żadnego magazynu zewnętrznego.
Gdy składnik BindingSource 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 | Lista wyników |
---|---|
Odwołanie o wartości null (Nothing w Visual Basic) |
IBindingList pustych obiektów. Dodanie elementu powoduje ustawienie listy na typ dodanego elementu. |
Odwołanie o wartości null (Nothing w Visual Basic) z ustawionym DataMember |
Nieobsługiwane; zgłasza ArgumentException. |
Typ inny niż lista lub obiekt typu "T" | Pusta IBindingList typu "T". |
Instancja tablicy | IBindingList to obiekt zawierający elementy tablicy. |
instancja IEnumerable | IBindingList zawierająca elementy IEnumerable |
Instancja listy zawierająca typ "T" | Wystąpienie IBindingList zawierające typ "T". |
Ponadto można ustawić DataSource na inne typy list, takie jak IListSource i ITypedList, a BindingSource będzie je odpowiednio obsługiwać. W takim przypadku typ zawarty na liście powinien mieć konstruktor bez parametrów.
BindingSource jako IBindingList
Składnik BindingSource zapewnia elementy członkowskie umożliwiające uzyskiwanie dostępu do danych bazowych i manipulowanie nimi jako IBindingList. W poniższej tabeli opisano niektórych z tych członków.
Członek | Opis |
---|---|
właściwość List | Pobiera listę wynikającą z ewaluacji właściwości DataSource lub DataMember. |
AddNew metoda | Dodaje nowy element do bazowej listy. Dotyczy źródeł danych, które implementują interfejs IBindingList i zezwalają na dodawanie elementów (czyli właściwość AllowNew jest ustawiona na wartość true ). |
Tworzenie elementu niestandardowego
Możesz obsłużyć zdarzenie AddingNew, aby wprowadzić własną logikę tworzenia elementów. Zdarzenie AddingNew występuje przed dodaniu nowego obiektu do BindingSource. To zdarzenie jest wywoływane po wywołaniu metody AddNew, ale przed dodaniu nowego elementu do bazowej listy. ** Obsługując to zdarzenie, można wdrożyć zachowanie tworzenia elementów niestandardowych bez dziedziczenia z klasy BindingSource. Aby uzyskać więcej informacji, zobacz Jak dostosować dodawanie elementów za pomocą Windows Forms BindingSource.
Tworzenie elementu transakcyjnego
Składnik BindingSource implementuje interfejs ICancelAddNew, który umożliwia tworzenie elementów transakcyjnych. Po tymczasowym utworzeniu nowego elementu za pomocą wywołania 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 wiązanie kontrolek z 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.
Gdy źródło danych IEnumerable jest przypisane do składnika BindingSource, BindingSource tworzy IBindingList i dodaje zawartość źródła danych IEnumerable do listy.
Obsługa Design-Time
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. Możesz na przykład oznaczyć nagłówki kolumn kontrolki DataGridView nazwami właściwości publicznych typu niestandardowego.
Aby obsługiwać ten scenariusz, składnik BindingSource obsługuje powiązanie z Type. Kiedy przypisujesz Type do właściwości DataSource, składnik BindingSource tworzy puste BindingList<T> składające się z elementów Type. Wszystkie kontrolki, które następnie są powiązane z składnikiem BindingSource, 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 Jak powiązać kontrolkę Windows Forms z typem.
Statyczne metody ListBindingHelper
Typy System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManageri BindingSource dzielą wspólną logikę do generowania listy z pary DataSource
/DataMember
. Ponadto ta typowa logika jest publicznie udostępniana do użytku przez autorów elementów sterujących i inne strony trzecie w następujących metodach oznaczonych static
:
Sortowanie i filtrowanie za pomocą interfejsu IBindingListView
Składnik BindingSource implementuje interfejs IBindingListView, który rozszerza interfejs IBindingList. IBindingList oferuje sortowanie z jedną kolumną, a IBindingListView oferuje zaawansowane sortowanie i filtrowanie. Za pomocą IBindingListViewmoż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 członków. Zamiast tego wywołania są przekazywane do bazowej listy.
W poniższej tabeli opisano właściwości używane do sortowania i filtrowania.
Członek | Opis |
---|---|
właściwość Filter | Jeśli źródło danych jest IBindingListView, pobiera lub ustawia wyrażenie używane do filtrowania, które wiersze są wyświetlane. |
właściwość Sort | Jeśli źródło danych jest IBindingList, pobiera lub ustawia nazwę kolumny używaną do sortowania i informacji o kolejności sortowania. -lub- Jeśli źródło danych to IBindingListView i obsługuje sortowanie zaawansowane, pozwala na pobranie wielu nazw kolumn używanych do sortowania oraz kolejności sortowania. |
Integracja z aplikacją BindingNavigator
Za pomocą składnika BindingSource 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 elementu składnika BindingSource. Domyślnie kontrolka BindingNavigator udostępnia przyciski odpowiadające metodom nawigacji w składniku BindingSource. Aby uzyskać więcej informacji, zobacz Jak: Nawigować dane za pomocą kontrolki Windows Forms BindingNavigator.
Zobacz też
- BindingSource
- BindingNavigator
- Przegląd składnika BindingSource
- BindingNavigator, kontrolki
- powiązania danych formularzy systemu Windows
- kontrolki do użycia w Windows Forms
- Jak powiązać kontrolkę formularzy Windows z typem
- Jak odzwierciedlać aktualizacje źródła danych w kontrolce Formularzy Windows za pomocą BindingSource
.NET Desktop feedback