Sdílet prostřednictvím


Úprava dat v datových sadách pomocí rozhraní .NET Framework

Poznámka:

Třídy DataSet a související třídy jsou starší technologie rozhraní .NET Framework z počátku 2000, které umožňují aplikacím pracovat s daty v paměti, zatímco aplikace jsou odpojeny 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ž jsou datové sady ověřenou úspěšnou technologií, doporučeným přístupem pro nové aplikace .NET je použití 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í.

Tento článek popisuje, jak dotazovat a upravovat data v tabulkách v datových sadách rozhraní .NET Framework. Data v tabulkách dat můžete upravovat podobně jako tabulky v libovolné databázi. V tabulce můžete vkládat, aktualizovat a odstraňovat záznamy. 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 odeslat zpět do databáze. Pokud data upravujete programově a chcete změny odeslat zpět do databáze, musíte použít objekty a metody, které dělají sledování změn.

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, původní nebo navrhované verze řádků, změněné řádky nebo řádky obsahující chyby.

Požadavky

Pokud chcete k dotazování a úpravě dat v datových sadách rozhraní .NET Framework použít Visual Studio, potřebujete:

Ú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";

Jakmile znáte index řádku, můžete ho použít pro přístup k řádku a jeho úpravám.

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 pomocí tlačítka Přidat nový v ovládacím prvku BindingNavigator.

Můžete také přidat nový záznam do datové sady voláním NewRow metody v objektu DataTable. Poté přidejte řádek do kolekce DataRow (Rows).

NorthwindDataSet.CustomersRow newCustomersRow = 
    northwindDataSet1.Customers.NewCustomersRow();

newCustomersRow.CustomerID = "ALFKI";
newCustomersRow.CompanyName = "Alfreds Futterkiste";

northwindDataSet1.Customers.Rows.Add(newCustomersRow);

Odstranění záznamů z tabulky dat

Můžete odstranit DataRow voláním Remove metody DataRowCollection, nebo voláním Delete metody objektu DataRow .

Metoda Remove odebere řádek z kolekce. Pokud vaše aplikace nepotřebuje odesílat aktualizace zpět do zdroje dat, můžete záznamy odebrat přímo tak, že k kolekci řádků dat přistupujete přímo pomocí Removenástroje .

Delete Naopak metoda ve skutečnosti neodebere DataRow, ale označí ji pro odstranění. Skutečné odebrání nastane při volání AcceptChanges metody. Před jejich odstraněním můžete programově zkontrolovat, které řádky jsou označené k odebrání.

Chcete-li zachovat informace, které datová sada potřebuje k odesílání aktualizací do zdroje dat, použijte metodu Delete k odstranění DataRow z datové tabulky. Pokud vaše aplikace používá TableAdapter nebo DataAdapter, metoda Update odstraní řádky, které mají RowState o hodnotě Deleted.

Následující příklad ukazuje, jak volat metodu Delete pro označení prvního řádku v Customers tabulce jako odstraněného:

northwindDataSet1.Customers.Rows[0].Delete();

Poznámka:

Pokud získáte vlastnost počtu DataRowCollection, výsledný počet obsahuje záznamy označené k odstranění. Pokud chcete získat přesný počet záznamů, které nejsou označené k odstranění, můžete procházet kolekci a podívat se na vlastnost každého záznamu RowState . Záznamy určené k odstranění mají označení RowState odpovídající Deleted. Alternativně můžete vytvořit zobrazení dat datové sady, která filtruje na základě stavu řádku a získá z ní vlastnost count.

Zjistěte, zda jsou změněné řádky

Když provedete změny v záznamech datové sady, informace o těchto změnách se uloží, dokud je nepotvrdíte. Změny potvrdíte při volání AcceptChanges metody datové sady nebo tabulky dat nebo při volání Update metody datového TableAdapter 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, Deletednebo Unchanged.

  • Každý změněný datový řádek obsahuje více verzí. Obsahuje DataRowVersion původní verzi před změnami a aktuální verzi po změnách. Zatímco změna čeká na vyřízení a můžete na RowChanging událost reagovat, je k dispozici také třetí navrhovaná verze.

Pokud chcete zkontrolovat změněné řádky, zavolejte HasChanges metodu datové sady. Metoda vrátí true , pokud byly provedeny změny v datové sadě. Po určení, že změny existují, můžete zavolat metodu GetChanges na objektu DataSet nebo DataTable, abyste vrátili sadu změněných řádků.

Následující příklad ukazuje, jak zkontrolovat vrácenou hodnotu z metody HasChanges, aby bylo možné zjistit, zda existují nějaké změněné řádky v NorthwindDataset1.

if (northwindDataSet1.HasChanges()) 
{
    // Changed rows were detected, add appropriate code.
}
else
{
    // No changed rows were detected, add appropriate code.
}

Určení typu změn

Pokud chcete zjistit, jaký typ změn se v datové sadě provedl, předáte do metody hodnotu z DataRowState výčtu HasChanges .

Následující příklad ukazuje, jak zkontrolovat NorthwindDataset1 datovou sadu a zjistit, jestli byly 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 se můžou vyskytnout chyby. Můžete zkontrolovat HasErrors vlastnost a určit, zda chyby existují v objektu DataSet, DataTablenebo DataRow.

Pokud je vlastnost datové sady HasErrors, iterujte kolekcemi tabulek a pak přes řádky vyhledejte řádky s chybami.

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.
                    }
                }
            }
        }
    }
}