Megosztás a következőn keresztül:


Objektumok kötése adatforrásként .NET-keretrendszer-alkalmazásokban a Visual Studióval

Megjegyzés:

Az DataSet osztály és a kapcsolódó osztályok a 2000-es évek elejétől származó régi .NET-keretrendszer-technológiák, amelyek lehetővé teszik az alkalmazások számára a memóriában lévő adatokkal való munkát, miközben az alkalmazások leválasztva vannak az adatbázisról. A technológiák különösen hasznosak az olyan alkalmazások esetében, amelyek lehetővé teszik a felhasználók számára az adatok módosítását és a módosítások visszaállítását az adatbázisba. Bár az adathalmazok bizonyítottan sikeres technológiának számítanak, az új .NET-alkalmazásokhoz ajánlott az Entity Framework Core használata. Az Entity Framework természetesebb módot kínál a táblázatos adatok objektummodellként való használatához, és egyszerűbb programozási felülettel rendelkezik.

A Visual Studio tervezési idejű eszközöket biztosít az egyéni objektumok adatforrásként való kezeléséhez az alkalmazásban. Ha olyan objektumban szeretne adatokat tárolni egy adatbázisból, amelyhez felhasználói felületi vezérlőkhöz van kötve, az ajánlott módszer az Entity Framework használata az osztály vagy osztályok létrehozásához. Az Entity Framework automatikusan létrehozza a sablon változáskövetési kódját, ami azt jelenti, hogy a helyi objektumokon végrehajtott módosítások automatikusan érvényesülnek az adatbázisban, amikor meghívja az AcceptChanges metódust a DbSet objektumon. További információkért tekintse meg az Entity Framework dokumentációját.

Jótanács

A cikkben szereplő objektumkötési módszereket csak akkor érdemes figyelembe venni, ha az alkalmazás már adathalmazokon alapul. Ezeket a megközelítéseket akkor is használhatja, ha már ismeri az adathalmazokat, és a feldolgozni kívánt adatok táblázatosak, és nem túl összetettek vagy túl nagyok. Egy még egyszerűbb példa, amely magában foglalja az adatok közvetlenül objektumokba való betöltését egy DataReader használatával, valamint a felhasználói felület manuális frissítését adatkötés nélkül, lásd : Egyszerű adatalkalmazás létrehozása ADO.NET használatával.

Objektumkövetelmények

Az egyéni objektumoknak a Visual Studióban az adattervező eszközökkel való használatához az egyetlen követelmény, hogy az objektumnak legalább egy nyilvános tulajdonságra van szüksége.

Az egyéni objektumok általában nem igényelnek konkrét interfészeket, konstruktorokat vagy attribútumokat ahhoz, hogy adatforrásként működjenek egy alkalmazás számára. Ha azonban az objektumot az Adatforrások ablakból egy tervezőfelületre szeretné húzni egy adathoz kötött vezérlő létrehozásához, és ha az objektum megvalósítja a ITypedList vagy IListSource interfészt, az objektumnak alapértelmezett konstruktorral kell rendelkeznie. Ellenkező esetben a Visual Studio nem tudja példányosítani az adatforrás-objektumot, és hibaüzenetet jelenít meg, amikor az elemet a tervezőfelületre húzza.

Példák egyéni objektumok adatforrásként való használatára

Bár számtalan módon implementálhatja az alkalmazáslogikát az objektumok adatforrásként való használatakor, az SQL-adatbázisok esetében néhány szabványos művelet egyszerűsíthető a Visual Studio által létrehozott TableAdapter-objektumok használatával. Ez a lap bemutatja, hogyan implementálhatja ezeket a szabványos folyamatokat a TableAdapters használatával. Ez nem az egyéni objektumok létrehozásának útmutatója. Például általában a következő szabványos műveleteket fogja végrehajtani, függetlenül az objektumok konkrét implementálásától vagy az alkalmazás logikájától:

  • Adatok betöltése objektumokba (általában adatbázisból).

  • Beírt objektumgyűjtemény létrehozása.

  • Objektumok hozzáadása és eltávolítása egy gyűjteményből.

  • Az objektumadatok megjelenítése a felhasználók számára egy űrlapon.

  • Objektum adatainak módosítása/szerkesztése.

  • Adatok mentése objektumokból az adatbázisba.

Adatok betöltése objektumokba

Ebben a példában a TableAdapters használatával tölt be adatokat az objektumokba. Alapértelmezés szerint a TableAdapters kétféle módszerrel jön létre, amelyek adatokat lekérnek egy adatbázisból, és feltöltik az adattáblákat.

  • A TableAdapter.Fill metódus kitölt egy meglévő adattáblát a visszaadott adatokkal.

  • A TableAdapter.GetData metódus egy új, adatokkal kitöltött adattáblát ad vissza.

Az egyéni objektumok adatokkal való betöltésének legegyszerűbb módja, ha meghívja a TableAdapter.GetData metódust, végighalad a visszaadott adattáblában lévő sorok gyűjteményén, és feltölti az egyes objektumokat az egyes sorok értékeivel. Létrehozhat egy metódust GetData , amely a TableAdapterhez hozzáadott lekérdezésekhez egy kitöltött adattáblát ad vissza.

Megjegyzés:

A Visual Studio alapértelmezés szerint elnevezi a TableAdapter-lekérdezéseket FillGetData , de ezeket a neveket bármilyen érvényes metódusnévre módosíthatja.

Az alábbi példa bemutatja, hogyan lehet végigfutni az adattáblák sorain, és hogyan tölthet fel egy objektumot adatokkal:

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);
    }
}

Típusú objektumgyűjtemény létrehozása

Létrehozhat gyűjteményosztályokat az objektumokhoz, vagy használhatja a BindingSource összetevő által automatikusan biztosított beírt gyűjteményeket.

Amikor egyéni gyűjteményosztályt hoz létre objektumokhoz, javasoljuk, hogy származtassa azt BindingList<T>. Ez az általános osztály funkciókat biztosít a gyűjtemény felügyeletéhez, valamint lehetővé teszi események kiváltását, amelyek értesítéseket küldenek a Windows Forms adatkötési infrastruktúrájának.

Az BindingSource automatikusan létrehozott gyűjtemény egy BindingList<T>-t használ a típusos gyűjteményhez. Ha az alkalmazás nem igényel további funkciókat, kezelheti a gyűjteményt a BindingSource-ben. További információért nézze meg a List osztály BindingSource tulajdonságát.

Megjegyzés:

Ha a gyűjtemény olyan funkciókat igényel, amelyeket az alap implementáció BindingList<T>nem biztosít, létre kell hoznia egy egyéni gyűjteményt, hogy szükség szerint hozzá tudja adni az osztályhoz.

Az alábbi kód bemutatja, hogyan hozhatja létre az osztályt egy Order objektumokból álló erősen típusos gyűjteményhez:

/// <summary>
/// A collection of Orders
/// </summary>
public class Orders: System.ComponentModel.BindingList<Order>
{
    // Add any additional functionality required by your collection.
}

Objektumok hozzáadása gyűjteményhez

Az egyéni gyűjteményosztály Add metódusának vagy a BindingSource metódus meghívásával objektumokat adhat hozzá egy gyűjteményhez.

Megjegyzés:

A Add metódus automatikusan rendelkezésre áll az egyéni gyűjtemény számára, amikor örököl a BindingList<T>-ből.

Az alábbi kód bemutatja, hogyan adhat hozzá objektumokat a típusos gyűjteményhez egy BindingSource:

Customer currentCustomer = new Customer();
customerBindingSource.Add(currentCustomer);

Az alábbi kód bemutatja, hogyan adhat hozzá objektumokat egy olyan beírt gyűjteményhez, amelytől BindingList<T>öröklődik:

Megjegyzés:

Ebben a példában a Orders gyűjtemény az Customer objektum tulajdonsága.

Order currentOrder = new Order();
currentCustomer.Orders.Add(currentOrder);

Objektumok eltávolítása gyűjteményből

Az objektumokat egy gyűjteményből az egyéni gyűjteményosztály Remove vagy RemoveAt metódusának meghívásával távolíthatja el, a BindingSource meghívásával.

Megjegyzés:

A Remove és RemoveAt metódusok automatikusan rendelkezésre állnak az egyéni gyűjteményhez, amikor az BindingList<T>-ből örököl.

Az alábbi kód bemutatja, hogyan kereshet meg és távolíthat el objektumokat a beírt gyűjteményből egy BindingSourceRemoveAt metódussal:

int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);

Objektumadatok megjelenítése a felhasználók számára

Ha az objektumokban lévő adatokat meg szeretné jeleníteni a felhasználóknak, hozzon létre egy objektum adatforrást az Adatforrás konfigurálása varázslóval, majd húzza a teljes objektumot vagy tulajdonságokat az űrlapra az Adatforrások ablakból.

Objektumok adatainak módosítása

A Windows Forms-vezérlőkhöz kötött egyéni objektumok adatainak szerkesztéséhez egyszerűen szerkessze az adatokat a kötött vezérlőben (vagy közvetlenül az objektum tulajdonságaiban). Az adatkötési architektúra frissíti az objektum adatait.

Ha az alkalmazás megköveteli a módosítások nyomon követését és a javasolt módosítások visszaállítását az eredeti értékeken, akkor ezt a funkciót implementálnia kell az objektummodellben. Példák arra, hogy az adattáblák hogyan követik nyomon a javasolt módosításokat, lásd DataRowState: , HasChangesés GetChanges.

Adatok mentése objektumokban vissza az adatbázisba

Mentse az adatokat az adatbázisba úgy, hogy az objektum értékeit átadja a TableAdapter DBDirect metódusainak.

A Visual Studio olyan DBDirect-metódusokat hoz létre, amelyek közvetlenül az adatbázison futtathatók. Ezek a metódusok nem igényelnek adathalmaz- vagy DataTable-objektumokat.

TableAdapter DBDirect metódus Leírás
TableAdapter.Insert Új rekordokat ad hozzá egy adatbázishoz, így egyéni oszlopértékeket adhat meg metódusparaméterekként.
TableAdapter.Update Frissíti az adatbázis meglévő rekordjait. Az Update metódus metódusparaméterként az eredeti és az új oszlopértékeket veszi figyelembe. Az eredeti értékek az eredeti rekord megkeresésére szolgálnak, az új értékek pedig a rekord frissítésére szolgálnak.

A TableAdapter.Update metódus az adathalmazok módosításainak az adatbázisba való visszaegyeztetésére is használható, ha metódusparaméterekként egy DataSet, DataTable, , DataRowvagy tömböt DataRowvesz fel.
TableAdapter.Delete A metódusparaméterként átadott eredeti oszlopértékek alapján törli a meglévő rekordokat az adatbázisból.

Ha objektumgyűjteményből szeretne adatokat menteni, futtasd végig az objektumok gyűjteményét (például egy következő ciklus használatával). Küldje el az egyes objektumok értékeit az adatbázisba a TableAdapter DBDirect metódusainak használatával.

Az alábbi példa bemutatja, hogyan adhat hozzá új ügyfelet közvetlenül az adatbázishoz a TableAdapter.Insert DBDirect metódussal:

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);
}