Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
De DataSet klassen en gerelateerde klassen zijn verouderde .NET Framework-technologieën uit het begin van de jaren 2000 waarmee toepassingen met gegevens in het geheugen kunnen werken terwijl de apps losgekoppeld zijn van de database. De technologieën zijn vooral handig voor apps waarmee gebruikers gegevens kunnen wijzigen en de wijzigingen weer kunnen behouden in de database. Hoewel gegevenssets een bewezen succesvolle technologie zijn, is de aanbevolen aanpak voor nieuwe .NET-toepassingen het gebruik van Entity Framework Core. Entity Framework biedt een natuurlijkere manier om met tabelgegevens te werken als objectmodellen en heeft een eenvoudigere programmeerinterface.
Visual Studio biedt ontwerphulpmiddelen voor het werken met aangepaste objecten als de gegevensbron in uw toepassing. Wanneer u gegevens uit een database wilt opslaan in een object dat u verbindt met besturingselementen voor de gebruikersinterface, is het raadzaam Om Entity Framework te gebruiken om de klasse of klassen te genereren. Entity Framework genereert automatisch alle standaardcode voor het bijhouden van wijzigingen. Dit betekent dat wijzigingen in de lokale objecten automatisch worden bewaard in de database wanneer u AcceptChanges aanroept op het DbSet-object. Zie de Documentatie voor Entity Framework voor meer informatie.
Aanbeveling
De benaderingen voor objectbinding in dit artikel moeten alleen worden overwogen als uw toepassing al is gebaseerd op gegevenssets. U kunt deze methoden ook gebruiken als u al bekend bent met gegevenssets, en de gegevens die u gaat verwerken, zijn tabellair en niet te complex of te groot. Zie Een eenvoudige gegevenstoepassing maken met behulp van ADO.NET voor een nog eenvoudiger voorbeeld: het rechtstreeks laden van gegevens in objecten met behulp van een DataReader en het handmatig bijwerken van de gebruikersinterface zonder gegevensbinding.
Objectvereisten
De enige vereiste voor aangepaste objecten om te kunnen werken met de hulpprogramma's voor gegevensontwerp in Visual Studio, is dat het object ten minste één openbare eigenschap nodig heeft.
Over het algemeen zijn voor aangepaste objecten geen specifieke interfaces, constructors of kenmerken vereist om als gegevensbron voor een toepassing te fungeren. Als u het object echter vanuit het venster Gegevensbronnen naar een ontwerpoppervlak wilt slepen om een gegevensgebonden besturingselement te maken en als het object de ITypedList of IListSource interface implementeert, moet het object een standaardconstructor hebben. Anders kan visual Studio het gegevensbronobject niet instantiëren en wordt er een fout weergegeven wanneer u het item naar het ontwerpoppervlak sleept.
Voorbeelden van het gebruik van aangepaste objecten als gegevensbronnen
Hoewel er talloze manieren zijn om uw toepassingslogica te implementeren bij het werken met objecten als gegevensbron, zijn er voor SQL-databases enkele standaardbewerkingen die kunnen worden vereenvoudigd met behulp van door Visual Studio gegenereerde TableAdapter-objecten. Op deze pagina wordt uitgelegd hoe u deze standaardprocessen implementeert met TableAdapters. Het is niet bedoeld als richtlijn voor het maken van uw aangepaste objecten. U voert bijvoorbeeld doorgaans de volgende standaardbewerkingen uit, ongeacht de specifieke implementatie van uw objecten of de logica van de toepassing:
Gegevens laden in objecten (meestal uit een database).
Een getypeerde verzameling objecten maken.
Objecten toevoegen aan en verwijderen uit een verzameling.
De objectgegevens weergeven aan gebruikers in een formulier.
De gegevens in een object wijzigen/bewerken.
Gegevens van objecten terug naar de database opslaan.
Gegevens laden in objecten
In dit voorbeeld laadt u gegevens in uw objecten met behulp van TableAdapters. TableAdapters worden standaard gemaakt met twee soorten methoden waarmee gegevens uit een database worden opgehaald en gegevenstabellen worden ingevuld.
De
TableAdapter.Fillmethode vult een bestaande gegevenstabel met de geretourneerde gegevens.De
TableAdapter.GetDatamethode retourneert een nieuwe gegevenstabel die is gevuld met gegevens.
De eenvoudigste manier om uw aangepaste objecten met gegevens te laden, is door de TableAdapter.GetData methode aan te roepen, de verzameling rijen in de geretourneerde gegevenstabel te doorlopen en elk object te vullen met de waarden in elke rij. U kunt een GetData methode maken waarmee een gevulde gegevenstabel wordt geretourneerd voor elke query die is toegevoegd aan een TableAdapter.
Opmerking
Visual Studio noemt Fill de TableAdapter-query's en GetData standaard, maar u kunt deze namen wijzigen in elke geldige methodenaam.
In het volgende voorbeeld ziet u hoe u de rijen in een gegevenstabel doorloopt en een object vult met gegevens:
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);
}
}
Een getypte verzameling objecten maken
U kunt verzamelingsklassen voor uw objecten maken of de getypte verzamelingen gebruiken die automatisch worden geleverd door het bindingsource-onderdeel.
Wanneer u een aangepaste verzamelingsklasse voor objecten maakt, raden we u aan om over te nemen van BindingList<T>. Deze algemene klasse biedt functionaliteit voor het beheren van uw verzameling, evenals de mogelijkheid om gebeurtenissen te genereren die meldingen verzenden naar de infrastructuur voor gegevensbinding in Windows Forms.
De automatisch gegenereerde verzameling in BindingSource gebruikt een BindingList<T> voor zijn getypte verzameling. Als uw toepassing geen extra functionaliteit vereist, kunt u uw verzameling onderhouden binnen de BindingSource. Zie de List eigenschap van de BindingSource klasse voor meer informatie.
Opmerking
Als uw verzameling functionaliteit vereist die niet wordt geleverd door de basis-implementatie van de BindingList<T>verzameling, moet u een aangepaste verzameling maken, zodat u indien nodig aan de klasse kunt toevoegen.
De volgende code laat zien hoe u de klasse maakt voor een sterk getypte verzameling Order objecten:
/// <summary>
/// A collection of Orders
/// </summary>
public class Orders: System.ComponentModel.BindingList<Order>
{
// Add any additional functionality required by your collection.
}
Objecten toevoegen aan een verzameling
U voegt objecten toe aan een verzameling door de Add methode van uw aangepaste verzamelingsklasse aan te roepen of van de BindingSource.
Opmerking
De Add methode wordt automatisch geleverd voor uw aangepaste verzameling wanneer u overerft van BindingList<T>.
De volgende code laat zien hoe u objecten toevoegt aan de getypte verzameling in een BindingSource:
De volgende code laat zien hoe u objecten toevoegt aan een getypte verzameling die wordt overgenomen van BindingList<T>:
Opmerking
In dit voorbeeld is de Orders verzameling een eigenschap van het Customer object.
Objecten uit een verzameling verwijderen
U verwijdert objecten uit een verzameling door de Remove of RemoveAt methode van uw aangepaste verzamelingsklasse of van BindingSource.
Opmerking
De Remove en RemoveAt methoden worden automatisch voorzien voor uw aangepaste verzameling wanneer u erft van BindingList<T>.
De volgende code laat zien hoe u objecten kunt zoeken en verwijderen uit de getypte verzameling in een BindingSource met de RemoveAt methode:
int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);
Objectgegevens weergeven aan gebruikers
Als u de gegevens in objecten voor gebruikers wilt weergeven, maakt u een objectgegevensbron met behulp van de wizard Gegevensbronconfiguratie en sleept u het hele object of de afzonderlijke eigenschappen naar uw formulier vanuit het venster Gegevensbronnen .
De gegevens in objecten wijzigen
Als u gegevens wilt bewerken in aangepaste objecten die datagebonden zijn aan Windows Forms-besturingselementen, bewerkt u de gegevens in het gebonden besturingselement (of rechtstreeks in de eigenschappen van het object). De gegevensbindingsarchitectuur werkt de gegevens in het object bij.
Als uw toepassing het bijhouden van wijzigingen en het terugdraaien van voorgestelde wijzigingen naar de oorspronkelijke waarden vereist, moet u deze functionaliteit implementeren in uw objectmodel. Zie voor voorbeelden van hoe gegevenstabellen voorgestelde wijzigingen bijhouden, DataRowState, HasChanges, en GetChanges.
Gegevens opslaan in objecten terug naar de database
Sla gegevens weer op in de database door de waarden van uw object door te geven aan de DBDirect-methoden van TableAdapter.
Visual Studio maakt DBDirect-methoden die rechtstreeks op de database kunnen worden uitgevoerd. Voor deze methoden zijn geen DataSet- of DataTable-objecten vereist.
| TableAdapter DBDirect-methode | Beschrijving |
|---|---|
TableAdapter.Insert |
Voegt nieuwe records toe aan een database, zodat u afzonderlijke kolomwaarden als methodeparameters kunt doorgeven. |
TableAdapter.Update |
Hiermee worden bestaande records in een database bijgewerkt. De methode Update gebruikt oorspronkelijke en nieuwe kolomwaarden als methodeparameters. De oorspronkelijke waarden worden gebruikt om de oorspronkelijke record te vinden en de nieuwe waarden worden gebruikt om die record bij te werken. De TableAdapter.Update methode wordt ook gebruikt om wijzigingen in een gegevensset weer af te stemmen op de database, door een DataSet, DataTableof DataRowmatrix van DataRows als methodeparameters te gebruiken. |
TableAdapter.Delete |
Hiermee verwijdert u bestaande records uit de database op basis van de oorspronkelijke kolomwaarden die als methodeparameters zijn doorgegeven. |
Als u gegevens wilt opslaan uit een verzameling objecten, doorloopt u de verzameling objecten (bijvoorbeeld met behulp van een voor-volgende lus). Verzend de waarden voor elk object naar de database met behulp van de DBDirect-methoden van TableAdapter.
In het volgende voorbeeld ziet u hoe u de TableAdapter.Insert DBDirect-methode gebruikt om een nieuwe klant rechtstreeks toe te voegen aan de database:
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);
}