Úprava dat v datových sadách pomocí rozhraní .NET Framework
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í.
Data v tabulkách dat upravujete podobně jako data v tabulce v libovolné databázi. Proces může zahrnovat vkládání, aktualizaci a odstraňování záznamů v tabulce. Ve formuláři vázaném na data můžete určit, která pole se dají upravit uživatelem. V těchto případech infrastruktura datové vazby zpracovává veškeré sledování změn, aby se změny mohly později odeslat zpět do databáze. Pokud provedete úpravy dat prostřednictvím kódu programu a chcete tyto změny odeslat zpět do databáze, musíte použít objekty a metody, které pro vás sledování změn dělají.
Kromě změny skutečných dat můžete také zadat dotaz DataTable na vrácení konkrétních řádků dat. Můžete například zadat dotaz na jednotlivé řádky, konkrétní verze řádků (původní a navrhované), změněné řádky nebo řádky s chybami.
Úprava řádků v datové sadě
Pokud chcete upravit existující řádek v objektu DataTable, musíte vyhledat DataRow , co chcete upravit, a pak přiřadit aktualizované hodnoty požadovaným sloupcům.
Pokud neznáte index řádku, který chcete upravit, použijte metodu FindBy
pro vyhledávání podle primárního klíče:
NorthwindDataSet.CustomersRow customersRow =
northwindDataSet1.Customers.FindByCustomerID("ALFKI");
customersRow.CompanyName = "Updated Company Name";
customersRow.City = "Seattle";
Pokud znáte index řádku, můžete k řádkům přistupovat a upravovat je následujícím způsobem:
northwindDataSet1.Customers[4].CompanyName = "Updated Company Name";
northwindDataSet1.Customers[4].City = "Seattle";
Vložení nových řádků do datové sady
Aplikace, které používají ovládací prvky vázané na data, obvykle přidávají nové záznamy prostřednictvím tlačítka Přidat nový v ovládacím prvku BindingNavigator.
Pokud chcete do datové sady přidat nové záznamy ručně, vytvořte nový řádek dat voláním metody v tabulce DataTable. Potom přidejte řádek do DataRow kolekce (Rows) objektu DataTable:
NorthwindDataSet.CustomersRow newCustomersRow =
northwindDataSet1.Customers.NewCustomersRow();
newCustomersRow.CustomerID = "ALFKI";
newCustomersRow.CompanyName = "Alfreds Futterkiste";
northwindDataSet1.Customers.Rows.Add(newCustomersRow);
Pokud chcete zachovat informace, které datová sada potřebuje k odesílání aktualizací do zdroje dat, použijte metodu Delete k odebrání řádků v tabulce dat. Například pokud vaše aplikace používá TableAdapter (nebo DataAdapter), Metoda TableAdapter Update
odstraní řádky v databázi, které mají RowState .Deleted
Pokud vaše aplikace nepotřebuje odesílat aktualizace zpět do zdroje dat, je možné záznamy odebrat přímým přístupem ke kolekci řádků dat (Remove).
Odstranění záznamů z tabulky dat
-
Tato metoda záznam fyzicky neodebere. Místo toho označí záznam pro odstranění.
Poznámka:
Pokud získáte vlastnost count objektu DataRowCollection, výsledný počet obsahuje záznamy, které byly označeny k odstranění. Pokud chcete získat přesný počet záznamů, které nejsou označené k odstranění, můžete procházet kolekcí a podívat se na vlastnost každého záznamu RowState . (Záznamy označené k odstranění mají příponu RowState Deleted.) Alternativně můžete vytvořit zobrazení dat datové sady, která filtruje na základě stavu řádku a získá z ní vlastnost count.
Následující příklad ukazuje, jak volat metodu Delete pro označení prvního řádku v Customers
tabulce jako odstraněného:
Určení, jestli jsou změněné řádky
Při provedení změn záznamů v datové sadě se informace o těchto změnách uloží, dokud je nespíšete. Změny potvrdíte při volání AcceptChanges
metody datové sady nebo tabulky dat nebo při volání Update
metody TableAdapter nebo datového adaptéru.
Změny se sledují dvěma způsoby v každém řádku dat:
Každý řádek dat obsahuje informace související s jeho RowState (například Added, Modified, Deleted, nebo Unchanged).
Každý změněný datový řádek obsahuje více verzí tohoto řádku (DataRowVersion), původní verzi (před změnami) a aktuální verzi (po změnách). Během období, kdy je změna čekající (doba, kdy můžete reagovat na RowChanging událost), je k dispozici i třetí verze – navržená verze.
Metoda HasChanges datové sady vrátí true
, pokud byly provedeny změny v datové sadě. Po určení, že změněné řádky existují, můžete volat GetChanges
metodu DataSet nebo DataTable vrátit sadu změněných řádků.
Určení, zda byly provedeny změny v libovolných řádcích
- Voláním HasChanges metody datové sady zkontrolujte změněné řádky.
Následující příklad ukazuje, jak zkontrolovat návratovou hodnotu z HasChanges metody a zjistit, jestli v datové sadě s názvem NorthwindDataset1
existují nějaké změněné řádky:
if (northwindDataSet1.HasChanges())
{
// Changed rows were detected, add appropriate code.
}
else
{
// No changed rows were detected, add appropriate code.
}
Určení typu změn
Můžete také zkontrolovat, jaký typ změn se v datové sadě provedl, předáním hodnoty z DataRowState výčtu metodě HasChanges .
Určení typu změn provedených v řádku
- DataRowState Předejte metodě hodnotuHasChanges.
Následující příklad ukazuje, jak zkontrolovat datovou sadu s názvem NorthwindDataset1
, abyste zjistili, jestli byly do ní přidány nějaké nové řádky:
if (northwindDataSet1.HasChanges(DataRowState.Added))
{
// New rows have been added to the dataset, add appropriate code.
}
else
{
// No new rows have been added to the dataset, add appropriate code.
}
Vyhledání řádků s chybami
Při práci s jednotlivými sloupci a řádky dat může docházet k chybám. Můžete zkontrolovat HasErrors
vlastnost a určit, zda chyby existují v objektu DataSet, DataTablenebo DataRow.
HasErrors
Zkontrolujte vlastnost a zkontrolujte, jestli v datové sadě nedošlo k nějakým chybám.HasErrors
Pokud jetrue
tato vlastnost , iterujte kolekce tabulek a pak přes řádky vyhledejte řádek s chybou.
private void FindErrors()
{
if (dataSet1.HasErrors)
{
foreach (DataTable table in dataSet1.Tables)
{
if (table.HasErrors)
{
foreach (DataRow row in table.Rows)
{
if (row.HasErrors)
{
// Process error here.
}
}
}
}
}
}