Dela via


BindingSource-komponentarkitektur

Med komponenten BindingSource kan du universellt binda alla Windows Forms-kontroller till datakällor.

Komponenten BindingSource förenklar processen för bindning av kontroller till en datakälla och ger följande fördelar jämfört med traditionell databindning:

  • Aktiverar designtidsbindning till affärsobjekt.

  • Kapslar in CurrencyManager funktioner och exponerar CurrencyManager händelser vid designtillfället.

  • Förenklar skapandet av en lista som stöder IBindingList gränssnittet genom att tillhandahålla liständringsmeddelanden för datakällor som inte har inbyggt stöd för ändringsmeddelanden för listor.

  • Tillhandahåller en utökningspunkt för IBindingList.AddNew metoden.

  • Tillhandahåller en indirekt nivå mellan datakällan och kontrollen. Den här indirekta faktorn är viktig när datakällan kan ändras vid körning.

  • Interoperates med andra datarelaterade Windows Forms-kontroller, särskilt BindingNavigator och DataGridView kontrollerna.

Därför är komponenten BindingSource det bästa sättet att binda dina Windows Forms-kontroller till datakällor.

BindingSource-funktioner

Komponenten BindingSource innehåller flera funktioner för att binda kontroller till data. Med dessa funktioner kan du implementera de flesta databindningsscenarier utan kodning från din sida.

Komponenten BindingSource åstadkommer detta genom att tillhandahålla ett konsekvent gränssnitt för åtkomst till många olika typer av datakällor. Det innebär att du använder samma procedur för bindning till alla typer. Du kan till exempel koppla DataSource egenskapen till ett DataSet eller till ett affärsobjekt och i båda fallen använder du samma uppsättning egenskaper, metoder och händelser för att manipulera datakällan.

Det konsekventa gränssnittet som tillhandahålls av komponenten BindingSource förenklar avsevärt processen för att binda data till kontroller. För datakällstyper som ger ändringsmeddelande kommunicerar komponenten BindingSource automatiskt ändringar mellan kontrollen och datakällan. För datakällans typer som inte tillhandahåller ändringsmeddelanden tillhandahålls händelser som gör att du kan skapa ändringsmeddelanden. I följande lista visas de funktioner som stöds av komponenten BindingSource :

Indirektion

Komponenten BindingSource tillhandahåller en indirekt nivå mellan en kontroll och en datakälla. I stället för att binda en kontroll direkt till en datakälla binder du kontrollen till en BindingSourceoch kopplar datakällan till komponentens BindingSourceDataSource egenskap.

Med den här indirekta nivån kan du ändra datakällan utan att återställa kontrollbindningen. Detta ger dig följande funktioner:

Valutahantering

Komponenten BindingSource implementerar ICurrencyManagerProvider gränssnittet för att hantera valutahantering åt dig. ICurrencyManagerProvider Gränssnittet gör det möjligt att komma åt valutahanteraren för en BindingSource, samt valutahanteraren för en annan BindingSource som är bunden till samma DataMember.

Komponenten BindingSource kapslar CurrencyManager in funktioner och exponerar de vanligaste CurrencyManager egenskaperna och händelserna. I följande tabell beskrivs några av medlemmarna som är relaterade till valutahantering.

CurrencyManager property Hämtar valutahanteraren som är associerad med BindingSource.

GetRelatedCurrencyManager-metoden Om det finns en annan BindingSource-bindning till den angivna datamedlemmen, hämtar den dess valutahanterare.

Current egenskapen Hämtar datakällans aktuella objekt.

Position egenskapen Hämtar eller anger den aktuella positionen i den underliggande listan.

EndEdit metoden Tillämpar väntande ändringar på den underliggande datakällan.

CancelEdit -metoden Avbryter den aktuella redigeringsåtgärden.

Datakälla som en lista

Komponenten BindingSource implementerar gränssnitten IBindingListView och ITypedList . Med den här implementeringen kan du använda själva komponenten BindingSource som datakälla, utan någon extern lagring.

När komponenten BindingSource är kopplad till en datakälla exponeras datakällan som en lista.

Egenskapen DataSource kan anges till flera datakällor. Dessa omfattar typer, objekt och listor med typer. Den resulterande datakällan visas som en lista. I följande tabell visas några av de vanliga datakällorna och den resulterande listutvärderingen.

DataSource-egenskap Lista de resultat
En null-referens (Nothing i Visual Basic) Ett tomt IBindingList objekt. Genom att lägga till ett objekt ändras listans typ till typen på det tillagda objektet.
En null-referens (Nothing i Visual Basic) med DataMember inställd Stöds inte; höjer ArgumentException.
Icke-listtyp eller objekt av typen "T" En tom IBindingList av typen "T".
Arrayinstans En IBindingList som innehåller matriselementen.
IEnumerable instans En IBindingList som innehåller objekten IEnumerable
Listinstans som innehåller typen "T" En IBindingList instans som innehåller typen "T".

Dessutom DataSource kan ställas in på andra listtyper, till exempel IListSource och ITypedList, och BindingSource hanterar dem på rätt sätt. I det här fallet ska den typ som finns i listan ha en parameterlös konstruktor.

BindingSource som en IBindingList

Komponenten BindingSource ger medlemmar åtkomst till och manipulerar underliggande data som en IBindingList. I följande tabell beskrivs några av dessa medlemmar.

Medlem Beskrivning
List egenskap Hämtar listan som är resultatet av utvärderingen av DataSource egenskaperna eller DataMember .
AddNew metod Lägger till ett nytt objekt i den underliggande listan. Gäller för datakällor som implementerar IBindingList gränssnittet och tillåter att objekt läggs till (d.s AllowNew . egenskapen är inställd på true).

Skapa anpassat objekt

Du kan hantera AddingNew händelsen för att tillhandahålla din egen logik för att skapa objekt. Händelsen AddingNew inträffar innan ett nytt objekt läggs till i BindingSource. Den här händelsen utlöses efter att AddNew metoden anropats, men innan det nya objektet läggs till i den underliggande listan. Genom att hantera den här händelsen kan du ange beteendet för att skapa anpassade objekt utan att härleda från BindingSource klassen. Mer information finns i Så här: Anpassa objekttillägg med Windows Forms BindingSource.

Skapa transaktionsobjekt

Komponenten BindingSource implementerar ICancelAddNew gränssnittet, vilket gör det möjligt att skapa transaktionsobjekt. När ett nytt objekt har skapats preliminärt med hjälp av ett anrop till AddNew, kan tillägget bekräftas eller återkallas på följande sätt:

  • EndNew-metoden kommer att uttryckligen committera den väntande tillägget.

  • Om du utför en annan åtgärd i samlingen, till exempel infogning, borttagning eller flytt, kommer det väntande tillägget att automatiskt bekräftas.

  • Metoden CancelNew ångrar det väntande tillägget om metoden inte redan har genomförts.

IEnumerable Stöd

Komponenten BindingSource aktiverar bindningskontroller till IEnumerable datakällor. Med den här komponenten kan du binda till en datakälla, till exempel en System.Data.SqlClient.SqlDataReader.

När en IEnumerable datakälla tilldelas komponenten BindingSourceBindingSource skapar IBindingList och lägger till innehållet i IEnumerable datakällan i listan.

Design-Time stöd

Vissa objekttyper kan inte skapas vid designtillfället, till exempel objekt som skapats från en fabriksklass eller objekt som returneras av en webbtjänst. Ibland kan du behöva binda kontrollerna till dessa typer vid designtillfället, även om det inte finns något objekt i minnet som kontrollerna kan binda till. Du kan till exempel behöva märka kolumnrubrikerna för en DataGridView kontroll med namnen på den anpassade typens offentliga egenskaper.

För att stödja det här scenariot stöder komponenten BindingSource bindning till en Type. När du tilldelar en Type till DataSource-egenskapen skapar BindingSource-komponenten en tom BindingList<T> av Type objekt. Alla kontroller som du sedan binder till komponenten BindingSource får meddelande om förekomsten av egenskaperna eller schemat för din typ vid design- eller körtid. Mer information finns i Så här: Binda en Windows-formulärkontroll till en typ.

Statiska ListBindingHelper-metoder

Typerna System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManageroch BindingSource delar all gemensam logik för att generera en lista från ett DataSource/DataMember par. Dessutom exponeras den här vanliga logiken offentligt för användning av kontrollförfattare och andra tredje parter på följande static sätt:

Sortering och filtrering med IBindingListView-gränssnittet

Komponenten BindingSource implementerar IBindingListView gränssnittet, vilket utökar IBindingList gränssnittet. Erbjuder IBindingList enkel kolumnsortering och IBindingListView erbjuder avancerad sortering och filtrering. Med IBindingListViewkan du sortera och filtrera objekt i datakällan om datakällan även implementerar ett av dessa gränssnitt. Komponenten BindingSource tillhandahåller ingen referensimplementering av dessa medlemmar. I stället vidarebefordras anrop till den underliggande listan.

I följande tabell beskrivs de egenskaper som du använder för sortering och filtrering.

Medlem Beskrivning
Filter egenskap Om datakällan är en IBindingListView, hämtar eller anger uttrycket som används för att filtrera vilka rader som visas.
Sort egenskap Om datakällan är en IBindingListhämtar eller anger du ett kolumnnamn som används för sorterings- och sorteringsordningsinformation.

-eller-

Om datakällan är en IBindingListView och stöder avancerad sortering hämtar du flera kolumnnamn som används för sortering och sorteringsordning

Integrering med BindingNavigator

Du kan använda komponenten BindingSource för att binda alla Windows Forms-kontroller till en datakälla, men BindingNavigator kontrollen är särskilt utformad för att fungera med komponenten BindingSource . Kontrollen BindingNavigator innehåller ett användargränssnitt för att styra komponentens BindingSource aktuella objekt. Som standard ger kontrollen BindingNavigator knappar som motsvarar komponentens navigeringsmetoder BindingSource. Mer information finns i Så här navigerar du data med Windows Forms BindingNavigator-kontrollen.

Se även