Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I Windows Forms kan du binda till inte bara traditionella datakällor, utan även till nästan alla strukturer som innehåller data. Du kan binda till en matris med värden som du beräknar vid körning, läser från en fil eller härleder från värdena för andra kontroller.
Dessutom kan du binda valfri egenskap för valfri kontroll till datakällan. I traditionell databindning binder du vanligtvis visningsegenskapen – till exempel egenskapen Text för en TextBox kontroll – till datakällan. Med .NET har du också möjlighet att ange andra egenskaper via bindning. Du kan använda bindning för att utföra följande uppgifter:
Ange grafiken för en bildkontroll.
Ange bakgrundsfärgen för en eller flera kontroller.
Ange storleken på kontrollerna.
Databindning är i princip ett automatiskt sätt att ställa in alla körtidstillgängliga egenskaper för alla kontroller i ett formulär.
Gränssnitt som rör databindning
ADO.NET kan du skapa många olika datastrukturer som passar programmets bindningsbehov och de data du arbetar med. Du kanske vill skapa egna klasser som tillhandahåller eller använder data i Windows Forms. Dessa objekt kan erbjuda olika nivåer av funktionalitet och komplexitet. Från grundläggande databindning till att tillhandahålla stöd under designtid, felkontroll, ändringsnotifiering eller till och med stöd för en strukturerad återställning av de ändringar som gjorts i själva datan.
Konsumenter av databindningsgränssnitt
I följande avsnitt beskrivs två grupper med gränssnittsobjekt. Den första gruppen av gränssnitt implementeras på datakällor av datakällans författare. Datakällans konsumenter, till exempel Windows Forms-kontrollerna eller komponenterna, implementerar dessa gränssnitt. Den andra gruppen av gränssnitt är utformad för att användas av komponentförfattare. Komponentförfattare använder dessa gränssnitt när de skapar en komponent som stöder databindning som ska användas av Databindningsmotorn i Windows Forms. Du kan implementera dessa gränssnitt i klasser som är associerade med formuläret för att aktivera databindning. Varje fall presenterar en klass som implementerar ett gränssnitt som möjliggör interaktion med data. Datadesignverktygen för snabb programutveckling (RAD) i Visual Studio drar redan nytta av den här funktionen.
Gränssnitt för implementering av datakällaförfattare
Windows Forms-kontrollerna implementerar följande gränssnitt:
IList gränssnitt
En klass som implementerar IList-gränssnittet kan vara en Array, ArrayListeller CollectionBase. Dessa är indexerade listor med objekt av typen Object och listorna måste innehålla homogena typer, eftersom det första objektet i indexet avgör typen.
IListär endast tillgängligt för bindning under körning.Anmärkning
Om du vill skapa en lista över affärsobjekt för bindning med Windows Forms bör du överväga att använda BindingList<T>.
BindingListär en utökningsbar klass som implementerar de primära gränssnitt som krävs för dubbelriktad Windows Forms-databindning.IBindingList gränssnitt
En klass som implementerar IBindingList-gränssnittet ger en mycket högre nivå av databindningsfunktioner. Den här implementeringen erbjuder grundläggande sorteringsfunktioner och ändringsmeddelanden. Båda är användbara när listobjekten ändras och när själva listan ändras. Ändringsmeddelande är viktigt om du planerar att ha flera kontroller bundna till samma data. Det hjälper dig att göra dataändringar i en av kontrollerna för att sprida till de andra bundna kontrollerna.
Anmärkning
Ändringsmeddelande aktiveras för IBindingList-gränssnittet via egenskapen SupportsChangeNotification som när
truegenererar en ListChanged händelse som anger att listan har ändrats eller att ett objekt i listan har ändrats.Typen av ändring beskrivs av egenskapen ListChangedType för parametern ListChangedEventArgs. När datamodellen uppdateras uppdateras därför även alla beroende vyer, till exempel andra kontroller som är bundna till samma datakälla. Objekt som finns i listan måste dock meddela listan när de ändras så att listan kan generera händelsen ListChanged.
Anmärkning
BindingList<T> tillhandahåller en allmän implementering av IBindingList-gränssnittet.
IBindingListView gränssnitt
En klass som implementerar IBindingListView gränssnittet innehåller alla funktioner i en implementering av IBindingList, tillsammans med filtrering och avancerade sorteringsfunktioner. Den här implementeringen erbjuder strängbaserad filtrering och sortering i flera kolumner med egenskapsbeskrivningsriktningspar.
IEditableObject gränssnitt
En klass som implementerar IEditableObject-gränssnittet gör att ett objekt kan styra när ändringar i objektet görs permanent. Den här implementeringen stöder BeginEditmetoderna , EndEditoch CancelEdit som gör att du kan återställa ändringar som gjorts i objektet. Följande är en kort förklaring av hur
BeginEdit,EndEditochCancelEditmetoderna arbetar tillsammans för att möjliggöra en återställning av gjorda ändringar i data.Metoden BeginEdit signalerar början av en redigering på ett objekt. Ett objekt som implementerar det här gränssnittet måste lagra alla uppdateringar efter
BeginEdit-metodanropet på ett sådant sätt att uppdateringarna kan ignoreras om metoden CancelEdit anropas. I databindning av Windows Forms kan du anropaBeginEditflera gånger inom omfånget för en enskild redigeringstransaktion (till exempelBeginEdit,BeginEdit, EndEdit). Implementeringar av IEditableObject bör hålla reda på omBeginEditredan har anropats och ignorera efterföljande anrop tillBeginEdit. Eftersom den här metoden kan anropas flera gånger är det viktigt att efterföljande anrop till den inte är förstörande. EfterföljandeBeginEditanrop kan inte förstöra uppdateringar som har gjorts eller ändra de data som sparades vid det förstaBeginEditanropet.Metoden EndEdit skickar alla ändringar sedan BeginEdit anropades till det underliggande objektet, om objektet för närvarande är i redigeringsläge.
Metoden CancelEdit tar bort alla ändringar som gjorts i objektet.
Mer information om hur metoderna BeginEdit, EndEditoch CancelEdit fungerar finns i Spara data tillbaka till databasen.
Den här transaktionsbegreppet för datafunktionalitet används av DataGridView kontrollsystemet.
ICancelAddNew gränssnitt
En klass som implementerar ICancelAddNew-gränssnittet implementerar vanligtvis IBindingList-gränssnittet och gör att du kan återställa ett tillägg som gjorts till datakällan med metoden AddNew. Om datakällan implementerar
IBindingList-gränssnittet bör du också låta den implementeraICancelAddNew-gränssnittet.IDataErrorInfo gränssnitt
En klass som implementerar IDataErrorInfo-gränssnittet gör att objekt kan erbjuda anpassad felinformation till bundna kontroller:
IEnumerable gränssnitt
En klass som implementerar IEnumerable-gränssnittet används vanligtvis av ASP.NET. Stöd för Windows Forms för det här gränssnittet är endast tillgängligt via komponenten BindingSource.
Anmärkning
Komponenten BindingSource kopierar alla IEnumerable objekt till en separat lista i bindningssyfte.
ITypedList gränssnitt
En samlingsklass som implementerar ITypedList gränssnittet tillhandahåller funktionen för att styra ordningen och uppsättningen egenskaper som exponeras för den bundna kontrollen.
Anmärkning
När du implementerar metoden GetItemProperties och matrisen PropertyDescriptor inte är null, kommer den sista posten i matrisen att vara egenskapsbeskrivaren som beskriver listegenskapen som är en annan lista med föremål.
ICustomTypeDescriptor gränssnitt
En klass som implementerar ICustomTypeDescriptor-gränssnittet ger dynamisk information om sig själv. Det här gränssnittet liknar ITypedList men används för objekt i stället för listor. Det här gränssnittet används av DataRowView för att projicera schemat för de underliggande raderna. En enkel implementering av
ICustomTypeDescriptortillhandahålls av klassen CustomTypeDescriptor.Anmärkning
För att stödja designtidsbindning till typer som implementerar ICustomTypeDescriptormåste typen även implementera IComponent och finnas som en instans i formuläret.
IListSource gränssnitt
En klass som implementerar IListSource-gränssnittet möjliggör listbaserad bindning för icke-listobjekt. Metoden GetList i
IListSourceanvänds för att returnera en bindbar lista från ett objekt som inte ärver från IList.IListSourceanvänds av klassen DataSet.IRaiseItemChangedEvents gränssnitt
En klass som implementerar IRaiseItemChangedEvents-gränssnittet är en bindbar lista som även implementerar IBindingList-gränssnittet. Det här gränssnittet används för att ange om din typ genererar ListChanged händelser av typen ItemChanged via dess egenskap RaisesItemChangedEvents.
Anmärkning
Du bör implementera IRaiseItemChangedEvents om datakällan tillhandahåller egenskapen för att lista händelsekonvertering som beskrevs tidigare och interagerar med komponenten BindingSource. Annars kommer
BindingSourceäven att utföra konvertering av egenskaper till händelselistor, vilket resulterar i långsammare prestanda.ISupportInitialize gränssnitt
En komponent som implementerar ISupportInitialize-gränssnittet drar nytta av batchoptimeringar för att ange egenskaper och initiera samberoende egenskaper.
ISupportInitializeinnehåller två metoder:ISupportInitializeNotification gränssnitt
En komponent som implementerar ISupportInitializeNotification-gränssnittet implementerar också ISupportInitialize-gränssnittet. Med det här gränssnittet kan du meddela andra
ISupportInitializekomponenter om att initieringen är klar. GränssnittetISupportInitializeNotificationinnehåller två medlemmar:IsInitialized returnerar ett
booleanvärde som anger om komponenten initieras.Initialized inträffar när EndInit anropas.
INotifyPropertyChanged gränssnitt
En klass som implementerar det här gränssnittet är en typ som genererar en händelse när något av dess egenskapsvärden ändras. Det här gränssnittet är utformat för att ersätta mönstret för att ha en ändringshändelse för varje egenskap för en kontroll. När det används i en BindingList<T>ska ett affärsobjekt implementera INotifyPropertyChanged-gränssnittet och BindingList'1 konverterar PropertyChanged händelser till ListChanged händelser av typen ItemChanged.
Anmärkning
För att ändringsmeddelanden ska ske i en bindning mellan en bunden klient och en datakälla bör din bundna datakälla antingen implementera INotifyPropertyChanged gränssnittet (rekommenderas) eller så kan du ange propertyName-händelser
Changedför den bundna typen, men du bör inte göra båda.
Gränssnitt för implementering av komponentförfattare
Följande gränssnitt är utformade för förbrukning av Windows Forms databindningsmotor:
IBindableComponent gränssnitt
En klass som implementerar det här gränssnittet är en icke-kontrollkomponent som stöder databindning. Den här klassen returnerar komponentens databindningar och bindningskontext via egenskaperna DataBindings och BindingContext i det här gränssnittet.
Anmärkning
Om komponenten ärver från Controlbehöver du inte implementera IBindableComponent gränssnittet.
ICurrencyManagerProvider gränssnitt
En klass som implementerar ICurrencyManagerProvider-gränssnittet är en komponent som tillhandahåller egna CurrencyManager för att hantera bindningar som är associerade med den här komponenten. Åtkomst till den anpassade
CurrencyManagertillhandahålls av egenskapen CurrencyManager.Anmärkning
En klass som ärver från Control hanterar bindningar automatiskt via dess BindingContext egenskap, så fall där du behöver implementera ICurrencyManagerProvider är ganska sällsynta.
Datakällor som stöds av Windows Forms
Traditionellt har databindning använts i program för att dra nytta av data som lagras i databaser. Med Databindning i Windows Forms kan du komma åt data från databaser och data i andra strukturer, till exempel matriser och samlingar, så länge vissa minimikrav har uppfyllts.
Strukturer att binda till
I Windows Forms kan du binda till en mängd olika strukturer, från enkla objekt (enkel bindning) till komplexa listor som ADO.NET datatabeller (komplex bindning). För enkel bindning stöder Windows Forms bindning till de offentliga egenskaperna för det enkla objektet. Listbaserad bindning i Windows Forms kräver vanligtvis att objektet stöder IList gränssnittet eller IListSource gränssnittet. Om du binds med via en BindingSource komponent kan du dessutom binda till ett objekt som stöder IEnumerable gränssnittet.
I följande lista visas de strukturer som du kan binda till i Windows Forms.
-
En BindingSource är den vanligaste Windows Forms-datakällan och fungerar som proxy mellan en datakälla och Windows Forms-kontroller. Det allmänna
BindingSourceanvändningsmönstret är att binda dina kontroller tillBindingSourceoch bindaBindingSourcetill datakällan (till exempel en ADO.NET datatabell eller ett affärsobjekt).BindingSourcetillhandahåller tjänster som möjliggör och förbättrar nivån på stöd för databindning. Till exempel, Windows Forms-listbaserade kontroller som DataGridView och ComboBox stöder inte direkt bindning till IEnumerable-datakällor. Du kan dock aktivera det här scenariot genom att binda via enBindingSource. I det här fallet konverterarBindingSourcedatakällan till en IList. Enkla objekt
Windows Forms stöder databindning av kontrollegenskaper till offentliga egenskaper på instansen av ett objekt med hjälp av Binding-typen. Windows Forms stöder även bindningslistbaserade kontroller, till exempel en ListControl till en objektinstans när en BindingSource används.
Matris eller samling
För att fungera som en datakälla måste en lista implementera IList-gränssnittet. ett exempel är en matris som är en instans av klassen Array. Mer information om matriser finns i How to: Create an Array of Objects (Visual Basic).
I allmänhet bör du använda BindingList<T> när du skapar listor med objekt för databindning.
BindingListär en allmän version av IBindingList-gränssnittet. GränssnittetIBindingListutökar IList-gränssnittet genom att lägga till egenskaper, metoder och händelser som krävs för dubbelriktad databindning.-
Windows Forms-kontroller kan bindas till datakällor som endast stöder IEnumerable gränssnittet om de är bundna via en BindingSource komponent.
ADO.NET dataobjekt
ADO.NET innehåller många datastrukturer som lämpar sig för bindning till. Var och en varierar i sin sofistikering och komplexitet.
-
A DataColumn är det viktigaste byggblocket i en DataTable, eftersom flera kolumner utgör en tabell. Varje
DataColumnhar en DataType egenskap som avgör vilken typ av data kolumnen innehåller (till exempel biltypen i en tabell som beskriver bilar). Du kan enkelt binda en kontroll (till exempel en TextBox kontrolls Text egenskap) till en kolumn i en datatabell. -
En DataTable är representationen av en tabell, med rader och kolumner, i ADO.NET. En datatabell innehåller två samlingar: DataColumn, som representerar datakolumnerna i en viss tabell (som slutligen avgör vilka typer av data som kan anges i tabellen) och DataRow, som representerar datarader i en viss tabell. Du kan komplexbinda en kontroll till informationen i en datatabell (till exempel binda DataGridView-kontrollen till en datatabell). Men när du binder till en
DataTableär du en bindning till tabellens standardvy. -
En DataView är en anpassad vy av en enda datatabell som kan filtreras eller sorteras. En datavy är den data "ögonblicksbild" som används av kontroller bundna till komplexitet. Du kan enkelt binda eller komplext binda till data i en datavy, men observera att du binder till en oföränderlig "ögonblicksbild" av data i stället för en direkt uppdaterande datakälla.
-
En DataSet är en samling tabeller, relationer och begränsningar för data i en databas. Du kan enkelbinda eller komplexbinda till data inom en dataset, men observera att du binder till standardvärdet DataViewManager för
DataSet(se nästa punkt). -
En DataViewManager är en anpassad vy över hela DataSet, som liknar en DataView, men med de relationer som ingår. Med en DataViewSettings samling kan du ange standardfilter och sorteringsalternativ för alla vyer som
DataViewManagerhar för en viss tabell.
-
Typer av databindning
Windows Forms kan dra nytta av två typer av databindning: enkel bindning och komplex bindning. Var och en har olika fördelar.
| Typ av databindning | Beskrivning |
|---|---|
| Enkel databindning | Möjligheten för en kontroll att binda till ett enda dataelement, till exempel ett värde i en kolumn i en datamängdstabell. Enkel databindning är den typ av bindning som är typisk för kontroller, till exempel en TextBox kontroll eller Label kontroll, som är kontroller som vanligtvis bara visar ett enda värde. I själva verket kan alla egenskaper i en kontroll bindas till ett fält i en databas. Det finns omfattande stöd för den här funktionen i Visual Studio. Mer information finns i Navigera data och Skapa en enkel-bunden kontroll (Windows Forms .NET). |
| Komplex databindning | Möjligheten för en kontroll att binda till mer än ett dataelement, vanligtvis mer än en uppgift i en databas. Komplex bindning kallas även listbaserad bindning. Exempel på kontroller som stöder komplex bindning är kontrollerna DataGridView, ListBoxoch ComboBox. Ett exempel på komplex databindning finns i How to: Bind a Windows Forms ComboBox or ListBox Control to Data. |
Bindning av källkomponent
För att förenkla databindningen kan du med Windows Forms binda en datakälla till komponenten BindingSource och sedan binda kontroller till BindingSource. Du kan använda BindingSource i enkla eller komplexa bindningsscenarier. I båda fallen fungerar BindingSource som mellanhand mellan datakällan och bundna kontroller som tillhandahåller valutahantering av ändringsmeddelanden och andra tjänster.
Vanliga scenarier som använder databindning
Nästan alla kommersiella program använder information som lästs från datakällor av en eller annan typ, vanligtvis via databindning. I följande lista visas några av de vanligaste scenarierna som använder databindning som metod för datapresentation och manipulering.
| Scenarium | Beskrivning |
|---|---|
| Rapportering | Rapporter är ett flexibelt sätt för dig att visa och sammanfatta dina data i ett utskrivet dokument. Det är vanligt att skapa en rapport som skriver ut det valda innehållet i en datakälla antingen på skärmen eller till en skrivare. Vanliga rapporter omfattar listor, fakturor och sammanfattningar. Objekt formateras i kolumner med listor, med underobjekt organiserade under varje listelement, men du bör välja den layout som bäst passar data. |
| Datainmatning | Ett vanligt sätt att ange stora mängder relaterade data eller att be användarna om information är via ett formulär för datainmatning. Användare kan ange information eller välja alternativ med hjälp av textrutor, alternativknappar, listrutor och kryssrutor. Informationen skickas sedan och lagras i en databas, vars struktur baseras på den angivna informationen. |
| Huvud- och detaljrelation | Ett huvud-/detaljprogram är ett format för att titta på relaterade data. Mer specifikt finns det två datatabeller med en relation som ansluter i det klassiska affärsexemplet, en "Kunder"-tabell och en "Beställningar"-tabell med en relation mellan dem som länkar kunder och deras respektive beställningar. Mer information om hur du skapar ett huvud-/detaljprogram med två Windows Forms-kontroller DataGridView finns i How to: Create a Master/Detail Form Using Two Windows Forms DataGridView Controls (Så här skapar du ett huvud-/informationsformulär med två Windows Forms DataGridView-kontroller). |
| Uppslagstabell | Ett annat vanligt scenario för datapresentation/manipulering är tabellsökningen. Som en del av en större datavisning används ofta en ComboBox kontroll för att visa och manipulera data. Nyckeln är att de data som visas i den ComboBox kontrollen skiljer sig från de data som skrivits till databasen. Om du till exempel har en ComboBox kontroll som visar de artiklar som är tillgängliga från en livsmedelsbutik, skulle du förmodligen vilja se namnen på produkterna (bröd, mjölk, ägg). Men för att underlätta informationshämtningen i databasen och för databasnormalisering skulle du förmodligen lagra informationen för de specifika objekten i en viss ordning som artikelnummer (#501, #603 och så vidare). Det finns därför en implicit koppling mellan det "vänliga namnet" för livsmedelsartikeln i kontrollen ComboBox i formuläret och det relaterade artikelnumret som finns i en beställning. Det är kärnan i en tabelluppslagning. Mer information finns i Så här: Skapa en uppslagstabell med Windows Forms BindingSource-komponenten. |
Se även
.NET Desktop feedback