Vytvoření vazby objektů jako zdrojů dat v aplikacích .NET Framework pomocí sady Visual Studio
Poznámka:
Datové sady a související třídy jsou staršími technologiemi rozhraní .NET Framework z počátku 2000, které aplikacím umožňují pracovat s daty v paměti, zatímco aplikace jsou odpojené od databáze. Tyto technologie jsou zvláště užitečné pro aplikace, které uživatelům umožňují upravovat data a uchovávat změny zpět do databáze. I když se datové sady ukázaly jako velmi úspěšná technologie, doporučujeme, aby nové aplikace .NET používaly Entity Framework Core. Entity Framework poskytuje přirozenější způsob práce s tabulkovými daty jako objektovými modely a má jednodušší programovací rozhraní.
Visual Studio poskytuje nástroje pro návrh a čas pro práci s vlastními objekty jako zdrojem dat ve vaší aplikaci. Pokud chcete ukládat data z databáze v objektu, který svážete s ovládacími prvky uživatelského rozhraní, doporučujeme použít Entity Framework k vygenerování třídy nebo tříd. Entity Framework automaticky vygeneruje všechny často používané kód sledování změn, což znamená, že všechny změny místních objektů se automaticky zachovají do databáze při volání AcceptChanges v objektu DbSet. Další informace najdete v dokumentaci ke službě Entity Framework.
Tip
Přístupy k vazbám objektů v tomto článku by se měly zvážit pouze v případě, že vaše aplikace už je založená na datových sadách. Tyto přístupy můžete použít také v případě, že už znáte datové sady a data, která budete zpracovávat, jsou tabulková a ne příliš složitá nebo příliš velká. Ještě jednodušší příklad zahrnující načtení dat přímo do objektů pomocí třídy DataReader a ruční aktualizaci uživatelského rozhraní bez vazby dat najdete v tématu Vytvoření jednoduché datové aplikace pomocí ADO.NET.
Požadavky na objekty
Jediným požadavkem, aby vlastní objekty fungovaly s nástroji pro návrh dat v sadě Visual Studio, je, že objekt potřebuje alespoň jednu veřejnou vlastnost.
Obecně platí, že vlastní objekty nevyžadují žádná konkrétní rozhraní, konstruktory ani atributy, které by fungovaly jako zdroj dat pro aplikaci. Pokud však chcete objekt přetáhnout z okna Zdroje dat na návrhovou plochu, aby se vytvořil ovládací prvek svázaný s daty a pokud objekt implementuje ITypedList objekt nebo IListSource rozhraní, musí mít objekt výchozí konstruktor. Jinak Visual Studio nemůže vytvořit instanci objektu zdroje dat a při přetažení položky na návrhovou plochu zobrazí chybu.
Příklady použití vlastních objektů jako zdrojů dat
I když existuje mnoho způsobů, jak implementovat logiku aplikace při práci s objekty jako zdrojem dat, pro databáze SQL existuje několik standardních operací, které lze zjednodušit pomocí objektů TableAdapter vygenerovaných sadou Visual Studio. Tato stránka vysvětluje, jak implementovat tyto standardní procesy pomocí objektů TableAdapter. Nejedná se o vodítko pro vytváření vlastních objektů. Obvykle například provedete následující standardní operace bez ohledu na konkrétní implementaci objektů nebo logiky aplikace:
Načítání dat do objektů (obvykle z databáze)
Vytvoření typové kolekce objektů
Přidávání objektů do kolekce a odebírání objektů.
Zobrazení dat objektu uživatelům ve formuláři
Změna nebo úprava dat v objektu
Ukládání dat z objektů zpět do databáze
Načtení dat do objektů
V tomto příkladu načtete data do objektů pomocí objektů TableAdapter. Ve výchozím nastavení jsou objekty TableAdapter vytvořeny dvěma druhy metod, které načítají data z databáze a naplňují tabulky dat.
Metoda
TableAdapter.Fill
vyplní existující tabulku dat vrácenými daty.Metoda
TableAdapter.GetData
vrátí novou tabulku dat naplněnou daty.
Nejjednodušší způsob, jak načíst vlastní objekty s daty, je volat metodu TableAdapter.GetData
, procházet kolekci řádků ve vrácené datové tabulce a naplnit každý objekt hodnotami v každém řádku. Můžete vytvořit metodu GetData
, která vrátí vyplněnou tabulku dat pro libovolný dotaz přidaný do tableAdapter.
Poznámka:
Visual Studio pojmenuje dotazy Fill
TableAdapter a GetData
ve výchozím nastavení je možné tyto názvy změnit na libovolný platný název metody.
Následující příklad ukazuje, jak procházet řádky v tabulce dat a naplnit objekt daty:
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);
}
}
Vytvoření typové kolekce objektů
Můžete vytvořit třídy kolekce pro vaše objekty nebo použít typové kolekce, které jsou automaticky poskytovány BindingSource komponenta.
Při vytváření vlastní třídy kolekce pro objekty doporučujeme, abyste dědili z BindingList<T>. Tato obecná třída poskytuje funkce pro správu kolekce a také schopnost vyvolat události, které odesílají oznámení do infrastruktury datové vazby v model Windows Forms.
Automaticky vygenerovaná kolekce používá BindingSource BindingList<T> pro svou typovou kolekci. Pokud vaše aplikace nevyžaduje další funkce, můžete v rámci této BindingSourcekolekce udržovat . Další informace naleznete ve List vlastnosti BindingSource třídy.
Poznámka:
Pokud vaše kolekce vyžaduje funkce, které nejsou poskytovány základní implementací BindingList<T>, měli byste vytvořit vlastní kolekci, abyste ji mohli podle potřeby přidat do třídy.
Následující kód ukazuje, jak vytvořit třídu pro kolekci objektů silného Order
typu:
/// <summary>
/// A collection of Orders
/// </summary>
public class Orders: System.ComponentModel.BindingList<Order>
{
// Add any additional functionality required by your collection.
}
Přidání objektů do kolekce
Objekty přidáte do kolekce voláním Add
metody třídy vlastní kolekce nebo .BindingSource
Poznámka:
Metoda Add
je automaticky poskytována pro vaši vlastní kolekci při dědění z BindingList<T>.
Následující kód ukazuje, jak přidat objekty do typové kolekce v BindingSource:
Následující kód ukazuje, jak přidat objekty do typované kolekce, která dědí z BindingList<T>:
Poznámka:
V tomto příkladu Orders
je kolekce vlastností objektu Customer
.
Odebrání objektů z kolekce
Objekty z kolekce odeberete voláním Remove
nebo RemoveAt
metodou třídy vlastní kolekce nebo třídy BindingSource.
Poznámka:
Tyto metody jsou automaticky poskytovány Remove
pro vaši vlastní kolekci při dědění z BindingList<T>.RemoveAt
Následující kód ukazuje, jak vyhledat a odebrat objekty z typované kolekce v BindingSource RemoveAt metodě:
int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);
Zobrazení dat objektů uživatelům
Pokud chcete zobrazit data v objektech uživatelům, vytvořte pomocí průvodce konfigurací zdroje dat zdroj dat a přetáhněte celý objekt nebo jednotlivé vlastnosti do formuláře z okna Zdroje dat.
Úprava dat v objektech
Chcete-li upravit data ve vlastních objektech, které jsou svázané s ovládacími prvky model Windows Forms, jednoduše upravte data v vázaném ovládacím prvku (nebo přímo ve vlastnostech objektu). Architektura datové vazby aktualizuje data v objektu.
Pokud vaše aplikace vyžaduje sledování změn a vrácení navrhovaných změn do původních hodnot, musíte tuto funkci implementovat v objektovém modelu. Příklady, jak tabulky dat sledují navrhované změny, viz DataRowState, HasChangesa GetChanges.
Uložení dat do objektů zpět do databáze
Uložte data zpět do databáze předáním hodnot z objektu do metod DBDirect objektu TableAdapter.
Visual Studio vytvoří metody DBDirect, které lze spouštět přímo s databází. Tyto metody nevyžadují objekty DataSet ani DataTable.
Metoda TableAdapter DBDirect | Popis |
---|---|
TableAdapter.Insert |
Přidá do databáze nové záznamy, které umožňují předávat hodnoty jednotlivých sloupců jako parametry metody. |
TableAdapter.Update |
Aktualizuje existující záznamy v databázi. Metoda Update přebírá původní a nové hodnoty sloupců jako parametry metody. Původní hodnoty slouží k vyhledání původního záznamu a nové hodnoty slouží k aktualizaci tohoto záznamu. Tato TableAdapter.Update metoda se také používá k odsouhlasení změn v datové sadě zpět do databáze tím, že vezme DataSetjako parametry metody , DataTable, DataRownebo pole DataRows. |
TableAdapter.Delete |
Odstraní existující záznamy z databáze na základě hodnot původního sloupce předaného jako parametry metody. |
Pokud chcete uložit data z kolekce objektů, projděte kolekci objektů (například pomocí smyčky for-next). Pomocí metod DBDirect objektu TableAdapter odešlete hodnoty pro každý objekt do databáze.
Následující příklad ukazuje, jak pomocí TableAdapter.Insert
metody DBDirect přidat nového zákazníka přímo do databáze:
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);
}