C# - Típusos DataSet készítése XML Designer segítségével

forráskód letöltése
Cikkünkben megismerkedhetünk annak módjával, hogy milyen módszerrel generálhatunk típusos DataSet objektumot a VS.NET beépített XML Designer eszközének segítségével. A mellékelt példában deklaráljuk a DataSet tábláit, a táblák oszlopait, megadjuk a táblák közötti relációkat, majd a definíció alapján létrehozzuk az adatokat tartalmazó XML állományt.
A típusos DataSet egy olyan objektum, melynek osztálya egy meghatározott XML sémával rendelkezik. Abban az esetben, ha szükségünk van egy típusos DataSet osztályra, de nem áll rendelkezésre előre elkészített séma, akkor készíthetünk egy ilyen osztályt magunk is az XML Designer segítségével. Ennek a műveletnek a lépéseit követhetjük nyomon a cikkben.
A Visual Studio.NET-be betöltött projekt gyorsmenüjében válasszuk az Add New Item pontot, melynek segítségével egy DataSet állományt adhatunk a projekthez. Az állomány neve CustomDS.xsd lesz. Az állomány elkészítése után megnyithatjuk azt, majd sorban feltehetjük az elemeket a szerkesztőpanelre.
A példában egy kéttáblás sémát készítünk el, melyben Customers és Orders a két tábla, kettejük között pedig kapcsolatot építünk fel. A művelethez a ToolBox elemeit használjuk fel.
A műveleteket azzal kezdjük, hogy a Customers és az Orders táblák számára is egy-egy ELEMENT elemet helyezünk a szerkesztőpanelre, majd a megjelenő táblázat rekordjaiban megadjuk az oszlop nevét és típusát.
A Customers tábla legfontosabb oszlopa a CustomerID, az Orders táblában pedig az OrderID, mely mindkét tábla elsődleges kulcsa. A tábladeklarációk megadása után a következő kód keletkezik a CustomDS.xsd állományban:

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="CustomDS ...>
  <xs:element name="CODS" msdata:IsDataSet="true">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="Customers">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="CustomerID" type="xs:ID" minOccurs="0" />
              ...
            </xs:sequence>
          </xs:complexType>
        </xs:element>
És az Orders tábla deklarációja.
        <xs:element name="Orders">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="OrderID" type="xs:ID" minOccurs="0" />
              ...
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
A különböző típusú kulcsok létrehozásához a ToolBox KEY elemét kell a tábladeklaráció fölé vonszolni, majd elengedni, mire megnyílik egy ablak, ahol meg lehet adni a kulcs nevét, a hivatkozott oszlopot, valamint hogy elsődleges kulcs legyen-e az adott kulcs.
Az elsődleges kulcsok megadása után egy-egy deklaráció kerül az állományba.

<xs:key name="DSCustomerKey1" msdata:PrimaryKey="true">
  <xs:selector xpath=".//Customers" />
  <xs:field xpath="CustomerID" />
</xs:key>
A táblák közötti kapcsolatok megadásához egy Relation elemet kell a táblák valamelyikére húzni, majd a megjelenő ablakban megadni a szülő-gyermek kapcsolatban résztvevő táblákat, és oszlopokat. Esetünkben mindkét tábla CustomerID oszlopa lesz a közös kapocs.
A deklaráció eredménye egy bejegyzés a táblában.

<xs:keyref name="CORelation" refer="DSOrdersKey2" msdata:AcceptRejectRule="Cascade" msdata:DeleteRule="Cascade" msdata:UpdateRule="Cascade">
  <xs:selector xpath=".//mstns:Customers" />
  <xs:field xpath="mstns:CustomerID" />
</xs:keyref>
A szerkesztőpanel gyorsmenüjében ki kell választani a Preview DataSet menüpontot, annak érdekében, hogy megtekinthessük a DataSet tulajdonságait.
A DataSet adatainak megadásához egy XML állományt kell a projekthez kapcsolni, melynek Data nézetében táblázatban írva szerkeszthetjük az adatokat.

Annak érdekében, hogy az XML a létrehozott DataSet sémával rendelkezzen, annak hivatkozását meg kell adnunk a tulajdonságablakában.

http://tempuri.org/CustomDS.xsd
A DataSet objektum felhasználásához egy forráskódot tartalmazó állományra is szükségünk van, mely alapértelmezésben automatikusan generálódik, most CustomDS.cs néven.
A példánkban elegendő egy példányt létrehoznunk a CODS osztályból, majd az XML állományt beolvasni. A DataSet objektumot ezt követően adhatjuk hozzá a DataGrid objektumhoz adatforrásként.
CODS ds = new CODS();
ds.ReadXml("Datas.xml");
dataGrid1.DataSource = ds;