Svázat objekty v sadě Visual Studio
Publikováno: srpen 2016
Visual Studio poskytuje návrhových nástrojů pro práci s vlastní objekty (na rozdíl od jiných zdrojů dat například entit, datové sady a služby) jako zdroj dat v aplikaci. Chcete uložit data z databáze v objektu, který Svázání ovládacích prvků uživatelského rozhraní, doporučený postup při použití Entity Framework ke generování třídy nebo tříd. EF bude automaticky vytvořit všechny standardní sledování změn kódu, což znamená, že všechny změny místní objekty budou automaticky natrvalo do databáze při volání metoda AcceptChanges u DbSet objektu. Další informace naleznete v tématu Entity Framework dokumentace.
Tip
Přístupy k objektu vazby v tomto článku je třeba zvážit pouze, pokud vaše aplikace je již založena na datové sady nebo pokud jste již obeznámeni s datových sad a data, která bude zpracovávat je tabulkový a příliš složitý nebo příliš velký. Příklad ještě jednodušší načíst data přímo do objektů pomocí DataReader a ruční aktualizace uživatelského rozhraní bez vazby dat naleznete v tématu Vytvoření jednoduché datové aplikace pomocí ADO.NET.
Požadavky na objekt
Jediný požadavek pro vlastní objekty pro práci s daty návrhových nástrojů v sadě Visual Studio je, že objekt potřebuje alespoň jednu veřejnou vlastnost.
Obecně platí vlastní objekty nevyžadují žádná zvláštní rozhraní konstruktory nebo atributy, aby se choval jako zdroj dat pro aplikaci. Však pokud chcete přetáhněte objekt z zdroje dat okna na návrhovou plochu lze vytvořit ovládací prvek vázaný na data a v případě, že daný objekt implementuje ITypedList nebo IListSource rozhraní, tento objekt musí mít výchozí konstruktor. Jinak aplikace Visual Studio nelze vytvořit instanci objektu zdroje dat a zobrazí chybu, pokud přetáhnete položku na návrhovou plochu.
Příklady použití vlastních objektů jako zdroje dat
Přestože jsou některé způsoby, jak implementovat aplikační logiku při práci s objekty jako zdroj dat, pro SQL databáze existuje jsou několik standardní operace, které může být zjednodušeno pomocí sady Visual Studio – generované třídy TableAdapter objektů. Tato stránka vysvětluje, jak implementovat tyto standardní procesy pomocí objekty TableAdapter; není určen jako vodítko k vytvoření vlastních objektů. Budete například obvykle provádět následující standardní operace bez ohledu na konkrétní implementaci objekty nebo logiku aplikace:
Načítání dat do objektů (obvykle z databáze).
Vytváření typované kolekce objektů.
Objekty pro přidávání a odebírání objekty z kolekce.
Zobrazení dat objektu pro uživatele ve formuláři.
Změna a úpravy dat v objektu.
Ukládání dat z objektů zpět do databáze.
Poznámka
Aby bylo možné lépe pochopit a poskytují kontext příklady na této stránce, doporučujeme provést následující: Návod: Připojování k datům v objektech (Windows Forms). Tento návod vytvoří objekty popsané na této stránce nápovědy.
Načítání dat do objektů
V tomto příkladu načtení dat do objekty pomocí objekty TableAdapter. Ve výchozím nastavení jsou objekty TableAdapter vytvořeny s dva druhy metod, které načítat data z databáze a naplnit datových tabulek.
TableAdapter.Fill
Metoda vyplní daty vrácenými existující data tabulky.TableAdapter.GetData
Metoda vrátí novou tabulku dat naplněn daty.
Nejjednodušší způsob, jak načíst vaše vlastní objekty s daty je volání TableAdapter.GetData
Metoda, procházení kolekce řádků v tabulce vrácená data a naplnit každý objekt s hodnotami v každém řádku. Můžete vytvořit GetData
metodu, která vrací tabulku naplněn dat pro dotazy přidané do objektu TableAdapter.
Poznámka
Visual Studio názvy dotazů TableAdapter Fill
a GetData
ve výchozím nastavení, ale tyto názvy lze změnit na libovolný platný název metody.
Následující příklad ukazuje, jak Iterujte přes řádky v tabulce dat a naplnit objekt s 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);
}
}
Private Sub LoadCustomers()
Dim customerData As NorthwindDataSet.CustomersDataTable =
CustomersTableAdapter1.GetTop5Customers()
Dim customerRow As NorthwindDataSet.CustomersRow
For Each customerRow In customerData
Dim currentCustomer As New Customer()
With currentCustomer
.CustomerID = customerRow.CustomerID
.CompanyName = customerRow.CompanyName
If Not customerRow.IsAddressNull Then
.Address = customerRow.Address
End If
If Not customerRow.IsCityNull Then
.City = customerRow.City
End If
If Not customerRow.IsContactNameNull Then
.ContactName = customerRow.ContactName
End If
If Not customerRow.IsContactTitleNull Then
.ContactTitle = customerRow.ContactTitle
End If
If Not customerRow.IsCountryNull Then
.Country = customerRow.Country
End If
If Not customerRow.IsFaxNull Then
.Fax = customerRow.Fax
End If
If Not customerRow.IsPhoneNull Then
.Phone = customerRow.Phone
End If
If Not customerRow.IsPostalCodeNull Then
.PostalCode = customerRow.PostalCode
End If
If Not customerRow.Is_RegionNull Then
.Region = customerRow._Region
End If
End With
LoadOrders(currentCustomer)
CustomerBindingSource.Add(currentCustomer)
Next
End Sub
Vytváření typované kolekce objektů
Můžete vytvořit kolekce tříd pro objekty nebo použít typované kolekce, které jsou automaticky poskytované BindingSource – komponenta.
Při vytváření třídy vlastní kolekce pro objekty, doporučujeme je zděděn z BindingList<T>. Tato obecná třída poskytuje funkce pro správu vaše kolekce, jakož i schopnost vyvolat události, které odesílání oznámení do infrastruktury datové vazby ve Windows Forms.
Kolekce automaticky generovány v BindingSource používá BindingList<T> pro jeho typované kolekce. Pokud vaše aplikace nevyžaduje další funkce, pak budete moci udržovat vaše kolekce v rámci BindingSource. Další informace naleznete v tématu List vlastnost BindingSource třídy.
Poznámka
Pokud vaše kolekce bude vyžadovat funkce nejsou poskytovány společností základní implementace BindingList<T>, pak je třeba vytvořit vlastní kolekce, takže lze přidat do třídy podle potřeby.
Následující kód ukazuje, jak vytvořit třídu pro silně typované kolekce Order
objekty:
/// <summary>
/// A collection of Orders
/// </summary>
public class Orders: System.ComponentModel.BindingList<Order>
{
// Add any additional functionality required by your collection.
}
''' <summary>
''' A collection of Orders
''' </summary>
Public Class Orders
Inherits System.ComponentModel.BindingList(Of Order)
' Add any additional functionality required by your collection.
End Class
Přidání objektů do kolekce
Přidat objekty do kolekce voláním Add
Metoda vaší třídy vlastní kolekce nebo BindingSource.
Příklad pro přidání do kolekce pomocí BindingSource, naleznete v části LoadCustomers
Metoda v Návod: Připojování k datům v objektech (Windows Forms).
Příklad přidání objektů do vlastní kolekce, naleznete v tématu LoadOrders
Metoda v Návod: Připojování k datům v objektech (Windows Forms).
Poznámka
Add
Metoda je automaticky k dispozici pro vlastní shromažďování při dědění ze BindingList<T>.
Následující kód ukazuje, jak můžete přidat objekty do typované kolekce v BindingSource:
Customer currentCustomer = new Customer();
customerBindingSource.Add(currentCustomer);
Dim currentCustomer As New Customer()
CustomerBindingSource.Add(currentCustomer)
Následující kód ukazuje, jak můžete přidat objekty do typovou kolekci, která dědí z BindingList<T>:
Poznámka
V tomto příkladu Orders
kolekce je vlastnost Customer
objektu.
Order currentOrder = new Order();
currentCustomer.Orders.Add(currentOrder);
Dim currentOrder As New Order()
currentCustomer.Orders.Add(currentOrder)
Odebírání objektů z kolekce
Odstranění objektů z kolekce voláním Remove
nebo RemoveAt
Metoda vaší třídy vlastní kolekce nebo BindingSource.
Poznámka
Remove
a RemoveAt
metody jsou automaticky poskytované pro vlastní shromažďování při dědění ze BindingList<T>.
Následující kód ukazuje, jak vyhledat a odebrat objekty z typované kolekce v BindingSource s RemoveAt Metoda:
int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);
Dim customerIndex As Integer = CustomerBindingSource.Find("CustomerID", "ALFKI")
CustomerBindingSource.RemoveAt(customerIndex)
Zobrazení dat objektu pro uživatele
Chcete-li zobrazit data v objektech uživatelům, vytvoříte zdroj dat objektu pomocí Průvodce konfigurací zdroje dat, a poté přetáhněte celý objekt nebo jednotlivé vlastnosti do svého formuláře z zdroje dat okna.
Úprava dat v objektech
Chcete-li upravit data ve vlastních objektů, které jsou vázané na data pro ovládací prvky Windows Forms, jednoduše připojeného ovládacího prvku (nebo přímo do vlastností objektu) data upravte. Architektura vazby dat bude aktualizovat data v objektu.
Pokud aplikace vyžaduje sledování změn a Hromadná zadní navrhované změny na původní hodnoty, musíte tuto funkci implementovat v objektovém modelu. Příklady jak tabulek dat udržování přehledu o navrhované změny, naleznete v tématu DataRowState, HasChanges, a GetChanges.
Uložení dat do objektů zpět do databáze
Uložit data zpět do databáze předáním hodnoty z objektu TableAdapter DBDirect – metody.
Visual Studio vytvoří DBDirect metody, které mohou být provedeny přímo v databázi. Tyto metody nevyžadují DataSet nebo DataTable objekty.
TableAdapter DBDirect – metoda | Popis |
---|---|
TableAdapter.Insert |
Přidá nových záznamů do databáze, což vám umožní předávat hodnoty jednotlivých sloupců jako parametry metody. |
TableAdapter.Update |
Aktualizace existujících záznamů v databázi. Metoda aktualizace přebírá původní a nový sloupec hodnoty jako parametry metody. Původní hodnoty slouží k vyhledání původní záznam a nové hodnoty slouží k aktualizaci záznamů.TableAdapter.Update Metoda slouží také sloučit změny v datové sadě zpět do databáze tím, že DataSet, DataTable, DataRow, nebo pole DataRows jako parametry metody. |
TableAdapter.Delete |
Odstraní existující záznamy z databáze založené na původní hodnoty sloupce předána jako parametry metody. |
Uložení dat z kolekce objektů, projděte kolekci objektů (například pomocí pro další smyčky) a odeslat hodnoty pro každý objekt k databázi pomocí TableAdapter DBDirect – metody.
Následující příklad ukazuje způsob použití TableAdapter.Insert
DBDirect metodu pro přidání 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);
}
Private Sub AddNewCustomer(ByVal currentCustomer As Customer)
CustomersTableAdapter.Insert(
currentCustomer.CustomerID,
currentCustomer.CompanyName,
currentCustomer.ContactName,
currentCustomer.ContactTitle,
currentCustomer.Address,
currentCustomer.City,
currentCustomer.Region,
currentCustomer.PostalCode,
currentCustomer.Country,
currentCustomer.Phone,
currentCustomer.Fax)
End Sub
Viz také
Vytvoření vazby ovládacích prvků k datům v sadě Visual Studio