AspNet.sk     Diskusné fóra     Vitajte v QuickStarts     ASP.NET     Silverlight     Ako môžem...? (en)     Class prehliadač Príklady chcem v ...   
Menu
Skip Navigation Links.
Späť na ASP.NET príručku

ASP.NET QuickStart Príručka

Rozšírené dátové scenáre

Článok vysvetľuje ako môžete použiť niektoré z menej zjavných vlastností dátových prvkov na implementáciu rozšírených scenárov

Práca s nulovými hodnotami

Dátové ovládacie prvku podporujú množstvo spôsobov, ako sa postarať o neexistujúce dáta. GridView, FormView a DetailsView podporujú vlastnosť EmptyDataText alebo EmptyDataTemplate, ktorú môžete použiť na určenie zobrazenej hodnoty pre prvok, ktorému dátový zdroj neposkytol hodnotu. Buď je nastavený EmptyDataText alebo EmptyDataTemplate(EmptyDataTemplate sa aplikuje, keď sú nastavené obidva). Tiež môžete nastaviť vlastnosťConvertEmptyStringToNull na BoundField, TemplateField alebo parametrový objekt dátového zdroja, aby ste zaistili, že sa String.Empty prekonvertuje na null pred vyvolaním operácie nad dátovým zdrojom. ObjectDataSource tiež podporuje vlastnosťConvertNullToDbNull ktorá môže byť nastavená na true, keď asociovaná metóda vyžaduje parametre DbNull namiesto null (triedy TableAdapter vo Visual Studio DataSet majú túto požiadavku). Môžete tak isto nastaviť vlastnosť NullDisplayText na BoundField ( a na odvodených typoch polí) aby ste určili zástupnú hodnotu ktorú má pole zobraziť, keď obsah dátového poľa vráteného dátovým zdrojom je null. Ak sa hodnota nezmení počas režimu editácie, hodnota sa vracia naspäť ako null späť do dátového zdroja počas operácie Update. Na koniec môžete nastaviť vlastnosť DefaultValue na parametroch dátového zdroja na špecifikáciu štandardnej hodnoty pre parameter, keď odosielaná hodnota je null. Vlastnosti môžu vyvolať reťazový efekt, napríklad keď sú súčasne nastavené vlastnosti ConvertEmptyStringToNull a DefaultValue, kedy String.Empty sa najskôr konvertuje na null a následne na štandardnú hodnotu určenú cez DefaultValue.

VB Handling Null Values
Run Sample View Source

Spomínané vlastnosti môžete použiť pri implementácii DropDownList filtra, ktorý v úvode zobrazuje všetky hodnoty z dátového zdroja. kým nie je vybraná hodnota použitá pri filtrovaní. Toto sa dá dosiahnuť vložením prázdneho reťazca ako prvku do DropDownList-u a nastavením vlastnosti ConvertEmptyStringToNull na asociovanom objekte ControlParameter na dátovom zdroji. Potom na vlastnosti SelectCommand dátového zdroja sledujete prichádzajúcu hodnotu, a ak bola null, vrátite všetky hodnoty (nefiltrované). Nasledujúci príklad ukazuje uvedenú techniku s použitím jednoduchého SQL príkazu, hoci môžete vykonať sledovanie hodnoty null aj v implementácii uloženej procedúry. Všimnite si použitie vlastnosti AppendDataBoundItems prvku DropDownList, ktorá umožňuje dynamicky pridávať hodnoty z dátového zdroja ku staticky vloženej položke "ALL" do kolekcie Items. Tiež je zaujímavé, že SqlDataSource nevykonáva operáciu Select, ak ktorýkoľvek z parametrov SelectCommand je null. Aby ste umožnili spustenie príkazu, aj keď je odovzdaná hodnota null, môžete nastaviť vlastnosť CancelSelectOnNullParameter na false.

VB Show All Values on Null Selection
Run Sample View Source

Rozšírený scenár Master-details

V predchádzajúcich článkoch návodu ste videli, ako sa dá implementovať scenár master-detail asociovaním objektu ControlParameter s vlastnosťou SelectedValue prvku GridView. Vlastnosť SelectedValue vracia hodnotu prvého poľa určeného vlastnosťou DataKeyNames. Môžete určiť viaceré, čiarkou oddelené hodnoty polí pre vlastnosť DataKeyNames, napríklad ak potrebujete odovzdať viac, ako jednu hodnotu dátovému zdroju details v scenári master-details. Hodnoty dodatočných hodnôt kľúčov sú vystavené cez vlastnosť SelectedDataKey, ktorá vracia objekt DataKey obsahujúci páry meno/hodnota pre polia kľúčov. ControlParameter sa môže odvolať na kľúče nastavením vlastnosti PropertyName na výraz SelectedDataKey.Values("title_id"))
  <asp:ControlParameter Name="FirstKey" ControlID="MasterGrid" PropertyName="SelectedDataKey.Values[0]"/>
  <asp:ControlParameter Name="SecondKey" ControlID="MasterGrid" PropertyName="SelectedDataKey.Values[1]"/>
Nasledujúci príklad ukazuje kód na prechod cez kolekciu DataKeys a na získanie polí kľúčov z vlastnosti SelectedDataKey prvku GridView.

VB DataKeys
Run Sample View Source

Predchádzajúce príklady na scenár master-details tohto návodu ukázali prvok details ako samostatný ovládací prvok na forme, iná bežná cesta implementácie scenára je ukázať prvok details ako vnorenú súčasť prvku master. Aby ste to docielili, musíte umiestniť prvok details a jeho asociovaný dátový zdroj do šablóny prvku master, s dátovým parametrom, ktorý vyzdvihne hodnotu z poľa dátového zdroja master. Pretože neexistuje deklaratívny parametrový objekt, ktorý by mohol byť asociovaný spomínaným spôsobom, musíte nastaviť hodnotu parametra v zdrojovom kóde. Môžete to urobiť počas reakcie na udalosť prvku master, aby ste nastavili hodnotu parametra, keď dochádza k dátovému viazaniu prvku master (Napríklad v kóde udalosti DataBound). Nasledujúci príklad demonštruje spomínanú techniku.

VB Nested Master-Details
Run Sample View Source

Ďalší príklad ukazuje podobnú techniku s použitím DataList-u, kde sa nastavuje hodnota parametra dátového zdroja details počas reakcie na udalosť ItemDataBound prvku DataList.

VB Nested Master-Details (DataList)
Run Sample View Source

Reakcia na udalosti dátového riadenia

V predchádzajúcich sekciách ste videli niekoľko príkladov udalostí dátového riadenia. Udalosti majú poskytovať vhodné miesta v životnom cykle spúšťania stránky, kde môžete vkladať svoj vlastný zdrojový kód. Dátové ovládacie prvky zvyčajne vystavujú udalosti pred a po vykonaní určitých operácií. Udalosti, ktoré sú vyvolané pred vykonaním operácie majú zvyčajne sufix -ing, kým udalosti vyvolané po vykonaní operácie majú sufix -ed. Medzi udalosti podporované prvkom GridView patria:
  • PageIndexChanging a PageIndexChanged - Vyvolaná pred a po operácii stránkovania
  • SelectedIndexChanging a SelectedIndexChanged - Vyvolaná pred a po výbere
  • Sorting aSorted - Vyvolaná pred a po operácii triedenia
  • RowEditing a RowCancelingEdit - Vyvolaná pred tým ako sa riadok presunie do režimu editácie, prípadne pred tým ako je editácia riadku odvolaná
  • RowUpdating a RowUpdated - Vyvolaná pred a po operácii Update
  • RowDeleting a RowDeleted - Vyvolaná pred a po operácii Delete
  • RowDataBound - Vyvolaná, keď sa riadok dátovo viaže
  • RowCreated - Vyvolaná, keď je riadok vytvorený pre zobrazovanie.
  • RowCommand - Vyvolaná, keď je nad riadkom vyvolaný príkaz súvisiaci s používateľským vstupom
Prvky dátového zdroja tak isto vystavujú udalosti, podobné udalostiam dátovo-viazaných ovládacích prvkov. Aj SqlDataSource, aj ObjectDataSource podporujú nasledujúce udalosti:
  • Selecting a Selected - Vyvolaná pred a po operácii Select (výber)
  • Updating a Updated - Vyvolaná pred a po operácii Update (aktualizácia)
  • Deleting a Deleted - Vyvolaná pred a po operácii Delete (vymazávanie)
  • Inserting a Inserted - Vyvolaná pred a po operácii Insert (vkladanie)
  • Filtering - Vyvolaná pred operáciou filtrovania
Prvok ObjectDataSource dodatočne vystavuje udalosti, keď objekt určený vlastnosťou TypeName je vytvorený alebo zlikvidovaný. Môžete tiež vytvoriť vlastný objekt v udalosti ObjectCreating nastavením vlastnosti ObjectInstance parametra event args.
  • ObjectCreating a ObjectCreated - Vyvolaná pred a po vytvorení objektu
  • ObjectDisposing - Vyvolaná pred tým, ako je objekt odstránený
Bežne slúžia udalosti, ktoré sú vyvolané pred operáciou na odvolanie operácie nastavením vlastnosti Cancel parametra event args na true, alebo na vykonanie validácie alebo manipulácie s parametrami. Udalosti, ktoré sa vyvolávajú po operácii sa používajú na písanie vlastného kódu ako odpoveď na zmenu, alebo na kontrolu úspešnosti operácie. Na príklad môžete skontrolovať vlastnosť RowsAffected pri operáciách Update, Insert alebo Delete, alebo skontrolovať vlastnosť Exception na zistenie, či nenastala výnimka pri spracovaní. Môžete tiež nastaviť vlastnosť ExceptionHandled parametra event args, aby ste zabránili výnimke, aby putovala na vyššie úrovne. Nasledujúci príklad ukazuje rôzne udalosti GridView a SqlDataSource, na ktoré môžete reagovať spolu s relatívnym poradím ich vyvolávania.

VB GridView RowUpdating Event
Run Sample View Source

Nasledujúci príklad ukazuje praktickejšiu reakciu na udalosť Inserting prvku DetailsView. Rekcia spočíva v získaní názvu súboru, v ktorom je uložená fotka, zo vstupu prvku FileUpload umiestneného vo vnútri prvku DetailsView, v uložení obsahu súboru na disk predtým, ako DetailsView ukončí operáciu insert, a vo vložení záznamu o obrázku do databázy. Pre účely demonštrácie, bol kód na samotné ukladanie odkomentovaný, hoci si stále môžete príklad vyskúšať, ak zvolíte meno existujúceho obrázku "Winter.jpg".

VB DetailsView ItemInserting Event
Run Sample View Source

Podobne ako v predchádzajúcom príklade, nasledujúci príklad ukazuje reakciu na udalosť ItemDeleted prvku FormView, kedy sa odstráni asociovaný obrázok z disku, keď je databázový záznam o ňom vymazaný. Znovu, ozajstný kód na vymazávanie súboru bol odkomentovaný pre účely demonštrácie.

VB FormView ItemDeleted Event
Run Sample View Source

Práca s parametrami

Môžete reagovať na udalosti operácií Select, Update, Insert, Delete a Filter, aby ste vykonali validáciu a manipuláciu hodnôt parametrov, ktoré sú odovzdávané týmto operáciám. Aj dátovo-viazané ovládacie prvky aj prvky dátového zdroja vystavujú vhodné udalosti pre uvedený účel. Na príklad, počas reakcie na udalosť Updating môžete vidieť mená a hodnoty parametrov v slovníkoch Keys, NewValues a OldValues, ktoré sa budú odovzdávať dátovému zdroju. Na strane dátového zdroja, môžete reagovať na udalosť Updating prvku SqlDataSOurce aby ste dohliadli na to, ako sa parametre aplikujú na podkladový objekt Command, spúšťaný nad databázou. Podobne môžete reagovať na udalosť Updating prvku ObjectDataSource, ak potrebujete prezerať alebo meniť slovníky parametrov, ktoré sa budú používať na vyhodnotenie zodpovedajúcej metódy. Udalosti môžete použiť na pridanie alebo odobratie parametrov zo slovníkov alebo priamo z príkazov, môžete meniť ich hodnoty, alebo jednoducho overovať, či parametre majú korektný vstupný formát.

Dôležité: Mali by ste špeciálne validovať vstupy parametrov pre filtrovanie, ktoré sú aplikované na FilterExpression priamo, bez SQL prekódovania (priamo sa na inom mieste nevhodnocujú).

Nasledujúci príklad demonštruje reakciu na viaceré udalosti dátového riadenia v ktorých prechádzame cez kolekcie parametrov poskytnuté cez event args. Všimnite si, že v príklade je nastavená vlastnosť InsertVisible objektu Boundfield asociovaného s poľom primárneho kľúča OrderID na false, pretože je stĺpec OrderID stĺpcom identity v databáze, a nemala by byť odovzdaný v operácii Insert (databáza zvyšuje hodnotu primárneho kľúča vždy, keď nastane operácia Insert). Zároveň si všimnite, že pole OrderID je označené ako primárny kľúč v DataKeyName, takže originálna hodnota poľa sa udržiava v slovníku Keys odovzdaného dátovo-viazaným ovládacím prvkom. Hodnoty vložené používateľom do vstupných ovládacích prvkov sú odovzdávané prostredníctvom slovníka NewValues, okrem hodnôt ktoré sú označené ako ReadOnly=false. Pôvodné hodnoty sa zachovávajú v slovníku OldValues ktorý napĺňa dátovo-viazaný ovládací prvok a ktorý sa ďalej odovzdáva dátovému zdroju. Spomínané hodnoty parametrov sú pripojené ku príkazu prvkom SqlDataSource v poradí preferencie NewValues, Keys, OldValues, hoci zvyčajne dátový zdroj nepridáva slovník OldValues keď vlastnosť ConflictDetection je nastavená na OverwriteChanges. Pre viac informácii o tom, ako dátové zdroje používajú slovník OldValues, pozrite sekciu Použitie detekcie konfliktov nižšie.

VB Data Parameters
Run Sample View Source

Môžete zmeniť poradie, v ktorom sa parametre pridávajú ku príkazu prvkom SqlDataSource pridaním statického objektu Parameter do kolekcie parametrov. SqlDataSource automaticky usporiada parametre odovzdané dátovo-viazaným ovládacím prvkom podľa poradia uvedených parametrových objektov. Prístup je užitočný, keď je vlastnosť ProviderName dátového zdroja nastavená na System.Data.OleDb, ktorý nemá podporu pre pomenované parametre, takže poradie, v ktorom sú parametre pripojené k objektu Command dátového zdroja musí byť zhodné s poradím anonymných zástupcov parametrov ('?') v texte príkazu. Keď používame pomenované parametre, poradie ich vloženia nie je dôležité. Zároveň môžete nastaviť vlastnosť Type objektu parametra, aby sme vynútili konverziu hodnôt parametrov odovzdaných dátovo-viazaným ovládacím prvkom na vhodný dátový typ predtým, ako spustíme príkaz resp. metódu. Podobne môžete nastaviť vlastnosť Size parametra na určenie veľkosti databázového parametra na objekte command prvku SqlDataSource. (vyžaduje sa pre vstupné, výstupné, vstupnovýstupné parametre a návratové hodnoty)

VB Parameter Order and Types
Run Sample View Source

Štandardná menná konvencia pre mená parametrov vyžaduje, aby boli nové hodnoty pomenované podľa polí vybraných operáciou Select dátového zdroja. Je možne premenovať parametre z Keys alebo OldValues na ich odlíšenie od NewValues nastavením vlastnosti OldValuesParameterFormatString, napríklad na "original_{0}". Zároveň existuje možnosť prispôsobenia mien parametrov reakciou na vhodnú udalosť predtým, ako je spustená operácia nad dátovým zdrojom. Na príklad, ak operácia Update dátového zdroja SqlDataSource je asociovaná s uloženou procedúrou, ktorá akceptuje iné mená parametrov ako tie, ktoré sú v súlade so štandardnou mennou konvenciou, môžete zmeniť mená parametrov počas reakcie na udalosť Updating predtým, ako je zavolaná uložená procedúra. Príklad nižšie ukazuje uvedenú techniku.

VB Renaming Parameters
Run Sample View Source

ObjectDataSource nezávisí na určitom poradí parametrov, ale jednoducho hľadá metódu so zhodnými menami parametrov. Všimnite si, že ObjectDataSource pri hľadaní metódy na spustenie vlastnosti Type a Size parametra nepoužíva . Porovnávajú sa len mená parametrov, takže ak máte dve metódy vo vašom objekte biznis-vrstvy, ktoré majú to isté meno a rovnaké mená parametrov, ale s rôznymi typmi, prvok ObjectDataSource ich nebude schopný rozlíšiť. Môžete zmeniť mená a hodnoty parametrov ObjectDataSource v rámci udalostí podobne, ako v príklade na SqlDataSource vyššie. Ak však používate vlastnosť DataObjectTypeName na jednoznačné určenie typu dátového objektu, ktorý má byť odovzdaný v operáciách Update, Insert a Delete , nepodarí sa vám zmeniť názvy parametrov, iba hodnoty. Ak potrebujete zmeniť mená parametrov, nepoužívajte DataObjectTypeName ale jednoducho vytvorte potrebné dátové objekty v udalostiach dátového zdroja manuálne v kóde.

Všetky parametre dátového zdroja, ktoré sme doposiaľ použili boli tzv. Input parametre, použité na odovzdávanie hodnôt do operácie dátového zdroja. Parametre môžu byť tiež dvojsmerné, ako napríklad InputOutput, Output a ReturnValue. Môžete určiť smer parametra použitím vlastnosti Direction objektu Parameter. Aby ste získali hodnoty parametrov potom ako sa ukončí operácia nad dátovým zdrojom, reagujte na vhodnú pooperačnú udalosť, akými sú Selected, Updated, Inserted alebo Deleted. Hodnotu parametra získate z parametra event args udalosti. SqlDataSourceStatusEventArgs zahŕňa vlastnosť Command, ktorú môžete použiť na získanie návratových hodnôt a výstupných parametrov tak, ako je ukázané v príklade nižšie. Je dôležité nastaviť vlastnosť Size objektu Parameter na SqlDataSource na správnu hodnotu pre obojsmerné parametre.

VB Return Values and Output Parameters
Run Sample View Source

Typ ObjectDataSourceStatusEventArgs podporuje kolekciu OutputParameters a vlastnosť ReturnValue , ukázanú v nasledujúcom príklade. Všimnite si že v tomto prípade, návratová hodnota operácie Update je použitá na určenie počtu ovplyvnených riadkov, ktoré aktualizácia ovplyvnila. Aby ste vrátili uvedenú hodnotu späť dátovo-viazanému ovládaciemu prvku (na príklad cez GridViewUpdatedUventArgs vlastnosti AffectedRows), môžete nastaviť vlastnosť AffectedRows objektu ObjectDataSourceStatusEventArgs.

VB Return Values and Output Parameters (Object)
Run Sample View Source

Iný bežný spôsob použitia výstupných parametrov je pri získavaní hodnoty primárneho kľúča riadku, ktorý bol vložený do databázy, kde stĺpec primárneho kľúča je zároveň Identity field (hodnota kľúča sa neodovzdáva ako parameter operácie Insert, ale je automatický generovaná databázovým serverom, keď dochádza k operácii Insert) Nasledujúci príklad ukazuje spomínanú techniku.

VB Retrieving Identity After Insert
Run Sample View Source

Použitie detekcie konfliktov

Ako bolo spomenuté v predchádzajúcich príkladoch, dátovo-viazaný ovládací prvok odovzdáva hodnoty dátovému zdroju v samostatných slovníkoch Keys, Values(nové hodnoty) a OldValues. Zvyčajne SqlDataSource a ObjectDataSource ignorujú slovník OldValues a namiesto neho aplikujú len slovníky Keys a Values. Správanie je podmienené vlastnosťou ConflictDetection dátového zdroja, ktorá je štandardne nastavená na OverwriteChangesl Režim OverwriteChages znamená, že sa porovnávajú len hodnoty primárneho kľúča pri aktualizácii a vymazávaní záznamu. Uvedené správanie znamená, že záznam je nahradený, alebo vymazaný nezávisle na tom, či sa zmenili podkladové hodnoty. Často je ale vhodné umožniť operáciám Update alebo Delete aby uspeli len vtedy, keď sú hodnoty riadku v databáze zhodné s tými, ktoré boli vybrané pri operácii select. Týmto spôsobom sa zabezpečí, že ak iný používateľ aktualizuje riadok medzi operáciou Select a Update, vaša operácia zlyhá. Dátové zdroje podporujú spomínaný prístup nastavením vlastnosti ConflictDetection na CompareAllValues. V tomto režime dátový zdroj odovzdáva hodnoty slovníka OldValues príkazu alebo metóde, ktorá ich môže využiť na zaistenie integrity dát. Musíte tiež nastaviť vlastnosť OldValuesParameterFormatString ktorá má tvar platného formátovácieho reťazca .Net Framework, na príklad "original_{0}", aby ste určili, ako sa premenujú parametre zo slovníkov OldValues a Keys aby boli odlišné od názvov v slovníku NewValues.

Príklad kódu ukazuje typické SQL príkazy pre režimy OverwriteChanges a CompareAllValues prvku SqlDataSource. pole ID sa považuje za pole primárneho kľúča. Všimnite si, že príkazy porovnávajú všetky pôvodné hodnoty v klauzule WHERE, nie len hodnotu primárneho kľúča. V našom prípade, OldValuesParameterFormatString je nastavený na "original_{0}" na dátovom zdroji.

SELECT [ID], [Name], [Address] from [Contacts]

-- OverwriteChanges
UPDATE [Contacts] SET [Name] = @Name, [Address] = @Address WHERE [ID] = @ID
DELETE FROM [Contacts] WHERE [ID] = @ID

-- CompareAllValues
UPDATE [Contacts] SET [Name] = @Name, [Address] = @Address WHERE [ID] = @original_ID 
  AND [Name] = @original_Name AND [Address] = @original_Address
DELETE FROM [Contacts] WHERE [ID] = @original_ID AND [Name] = @original_Name 
  AND [Address] = @original_Address
Nasledujúci príklad ukazuje vymenovanie parametrov na úrovni dátovo-viazaných prvkov a na úrovni dátového zdroja pre slovníky Keys, Values a OldValues, keď je vlastnosť ConflictDetection nastavená na CompareAllValues. Pre účely demonštrácie, sú operácie Update, Delete a Insert neaktívne. Všimnite si, že slovník OldValues nie je potrebný pri operácii Insert. Vlastnosť ConflictDetection je zmysluplná len pri operáciách Update a Delete.

VB Conflict Detection Parameters
Run Sample View Source

Nasledujúci príklad ukazuje správanie počas konfliktu. Aby ste spustili príklad, otvorte dve inštancie príkladu v samostatnom okne prehliadača. (kliknite na dva krát na "Run Sample"). Následne kliknite na tlačidlo Edit pre ten istý riadok v oboch oknách, aby ste presunuli riadok do režimu editácie. V prvom okne zmeňte hodnotu riadku a stlačte Update. Všimnite si, že operácia Update sa skončila bez problémov. V druhom okne, môžete zadať nové hodnoty do toho istého riadku a kliknúť na tlačidlo Update. Operácia Update sa ale nepodarí, pretože riadok v databáze bol medzitým zmenený operáciou Update z druhého okna. Príklad kontroluje vlastnosť AffectedRows parametra udalosti Updated a Deleted. Ak je nulový, znamená to, že došlo ku konfliktu.

C# Conflict Detection (Update and Delete)
Run Sample View Source

Ak používate šablónované používateľské rozhranie pre operácie Update a Delete, pôvodné hodnoty sa uchovávajú pre polia, ktoré sú dvojsmerne dátovo viazané použitím výrazov Bind. Pre operáciu Delete to znamená, že musíte používať Bind syntax na dátové viazanie hodnôt v ItemTemplate, aby ste mohli uchovať pôvodné hodnoty. Príklad nižšie ukazuje spomínanú techniku.

VB Conflict Detection Using Templates
Run Sample View Source

Zvládať chyby detekcie konfliktov môžete jednoducho poskytnutím možnosti potvrdenia alebo odvolania operácie, ak sa riadok v databáze zmenil, zobrazením zmenených hodnôt používateľovi, aby ich mohol porovnať s vlastnými aktualizovanými hodnotami. Nasledujúci príkladu ukazuje možný prístup ku zvládaniu chýb detekcie konfliktov. Všimnite si, že event args udalosti RowUpdated prvku DetailsView odovzdávajú slovníky, ktoré môžete používať na kontrolu hodnôt vložených používateľom. Tiež môžete nastaviť vlastnosť KeepInEditMde v uvedených event args, aby ste ponechali DetailsView v režime editácie, kým sa používateľ rozhoduje, ako vyriešiť konflikt. Príklad môžete spustiť v dvoch oknách aby ste vytvorili konfliktný Update.

VB Handling Conflicting Updates
Run Sample View Source

Nasledujúci príklad ukazuje totožný scenár s predchádzajúcim, v ktorom je ale použitý ObjectDataSOurce. Keďže vlastnosť ConflictDetection na dátovom zdroji je nastavená na CompareAllValuees, dátový zdroj hľadá preťaženú metódu ku UpdateContact, ktorá akceptuje pôvodné hodnoty pre každé pole objektu Contact.

VB Conflict Detection w/ ObjectDataSource
Run Sample View Source

Môžete použiť vlastnosť DataObjectTypeName v súčinnosti s CompareAllValues. V tomto prípade, ObjectDataSOurce hľadá preťaženú metódu UpdateContact, ktorá akceptuje presne dva parametre, obidva typu Contact. Prvý parameter bude objekt Contact, ktorý je naplnený novými hodnotami pre operáciu Update, kým druhý bude naplnený pôvodnými hodnotami.

VB Conflict Detection w/ ObjectDataSource (DataObjectTypeName)
Run Sample View Source

Advanced Paging/Sorting

Výber v ovládacom prvku Gridview je len koncept používateľského rozhrania, kde vlastnosť SelectedIndex korešponduje s indexom konkrétne vybraného riadku medzi aktuálne viditeľnými riadkami na mriežke. Ak ste aktivovali stránkovanie a triedenie na mriežke, SelectedIndex mriežky zostáva ten istý aj po operáciách triedenia a stránkovania. V niektorých prípadoch je lepšie nechať vybraný riadok aj keď aktuálne nie je viditeľný na stránke GridView. Príklad nižšie ukazuje techniku na zachovanie vybraného riadku medzi triediacimi a stránkovacími operáciami.

VB Maintaining Selection After Sort
Run Sample View Source

GridView a DetailsView podporujú špeciálny režim pre stránkovanie a triedenie, ktorý využíva výhody spätných volaní na strane klienta, na server, aby získali údaje pre novú stránku alebo pre nové utriedenie. Aby ste správanie aktivovali, nastavte vlastnosť EnableSortingAndPagingCallbacks na true. Všimnite si, že keď sa vykonáva operácia triedenia alebo stránkovania, stránka nepotrebuje vykonať postback na databázu aby získala nové hodnoty (hoci skriptované volanie na server sa vykonáva). Vlastnosť nie je podporovaná, keď GridView, alebo DetailsView obsahujú šablónované polia. Zobrazenie tlačidla Select v CommandField tiež nie je podporované, keď je aktivovaná uvedená vlastnosť.

VB Sorting and Paging Using Callbacks
Run Sample View Source

Hoci GridView, DetailsView a FormView poskytujú štandardne zobrazenie pre pager, môžete jeho zobrazenie prispôsobiť nastavením vlastnosti PagerTemplate. V rámci šablóny môžete umiestniť prvky Button s vlastnosťou CommandName nastavenou na Page a s vlastnosťou CommandArgument nastavenou na First, Prev, Next, Last alebo <number<, kde <number< je hodnota zvoleného indexu stránky. Príklad nižšie ukazuje PagerTemplate definovanú na prvkoch GridView a DetailsView.

VB Pager Template
Run Sample View Source

Dátové viazanie v kóde

Ako je spomínané v sekcii Dátové viazanie v šablónach ASP.Net zahŕňa deklaratívnu dátovo-väzobnú syntax pre asociovanie polí dátového zdroja s vlastnosťami ovládacích prvkov v dátovo-viazanej šablóne. Môžete použiť syntax <%# ... > na viazanie na ľubovoľné hodnoty v kóde, napr. na vlastnosti stránky, vlastnosti ovládacích prvkov, kolekcii, výrazov, a dokonca na návratové hodnoty volaní metód. Aby ste prinútili prvok vyhodnotiť dátové viazanie, musíte zavolať metódu DataBind na stránke, alebo na ovládacom prvku, ktorý obsahuje dátovo-väzobný výraz. Nasledujúca tabuľka ukazuje príklady syntaxe dátového viazania v ASP.NET.

Simple property Customer: <%# custID %>
Collection Orders: <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
Expression Contact: <%# ( customer.FirstName + " " + customer.LastName ) %>
Method result Outstanding Balance: <%# GetBalance(custID) %>

Hoci syntax vyzerá podobne ako skratka ASP pre Response.Write -- <%= %> -- jej správanie je odlišné. Tam, kde syntax skratiek Response.Write ASP bola vyhodnotená, keď bola stránka spracovávaná , sa syntax dátového viazania ASP.NET sa vyhodnocuje počas volania metódy DataBind.

DataBind je metóda stránky (Page) a aj všetkých serverových ovládacích prvkov. Keď zavoláte DataBind na rodičovskom ovládacom prvku, volanie sa kaskádovito uplatní na všetky detské ovládacie prvky. Takže napríklad metóda DataList1.DataBind() vyvolá metódu DataBind na všetkých ovládacích prvkoch obsiahnutých v šablónach DataList1. Volanie DataBind na stránke (Page.DataBind()) spôsobí, že sa vyhodnotia všetky dátové viazania na stránke. DataBind sa obvykle volá z metódy Pate_Load tak, ako je ukázané v nasledujúcom príklade.


Protected Sub Page_Load(Src As Object, E As EventArgs)
    DataBind()
End Sub
VB

Môžete používať výrazy dátového viazania takmer kdekoľvek v deklaratívnej sekcii stránky .aspx, za predpokladu, že sa správne vyhodnotia na vyžadovaný dátový typ počas behu aplikácie. Jednoduché príklady vlastnosti, výrazu a metódy vyššie zobrazujú text pre používateľa, keď sú vyhodnotené. V uvedených prípadoch sa musia výrazy dátového viazania vyhodnotiť na hodnotu typu String. V príklade na kolekciu sa výraz dátového viazania vyhodnotí na hodnotu platného typu pre vlastnosť DataSource prvku ListBox. Môže sa vám zdať vhodné vynútiť typ hodnoty vo výraze dátového viazania, aby ste dosiahli želaný výsledok. Na príklad keď count je typu integer:

Number of Records:  <%# count.ToString() %>
Syntax dátového viazania ASP.NET podporuje viazanie na verejné premenné a vlastnosti objektu Page a na vlastnosti iných ovládacích prvkov na stránke. Nasledujúci príklad ukazuje viazanie na verejnú premennú a jednoduchú vlastnosť na stránke. Všimnite si, že hodnoty sú inicializované pred volaním metódy DataBind().

VB Data Binding to a Property on the Page
Run Sample View Source

Ďalší príklad ilustruje viazanie na vlastnosť iného ovládacieho prvku.

VB Data Binding to a Server Control Property
Run Sample View Source

Serverové ovládacie prvky zobrazujúce zoznamy, ako DropDownList, ListBox a HTMLSelect používajú kolekciu ako dátový zdroj. Nasledujúci príkladu ukazuje viazanie na bežné typy kolekcii common language runtime. Uvedené ovládacie prvky sa môžu viazať len na kolekcie, ktoré podporujú jedno z nasledujúcich rozhraní: IEnumerable, ICollection, alebo IListSource. Zvyčajne budete viazať na ArrayList, Hashtable, DataView, DataReader. Uvedený príklad ukazuje viazanie na ArrayList.

VB Data Binding DropDownList
Run Sample View Source

Nasledujúci príklad zobrazuje viazanie na DataView. Všimnite si, že trieda DataView je definovaná v priestore mien (namespace) System.Data.

VB Data Binding to a DataView
Run Sample View Source

Ďalší príklad ukazuje viazanie na Hashtable.

VB Data Binding to a Hashtable
Run Sample View Source

Často sa stáva, že potrebujete pracovať s dátami pred viazaním na stránku, alebo ovládací prvok. Nasledujúci príklad ukazuje viazanie na výraz a návratovú hodnotu metódy.

VB Databinding to Methods and Expressions
Run Sample View Source

ASP.NET Page Framework poskytuje statickú metódu, na vyhodnotenie výrazu neskorého dátového viazania a voliteľne formátuje výsledky ako reťazec. Použitie DataBinder.Eval je pohodlné, pretože eliminuje väčšinu explicitných typovacích úloh keď vývojár musí hodnotám vnútiť želaný dátový typ. Použitie Eval je veľmi užitočné, keď viažeme ovládacie prvky v rámci šablónovaného zoznamu, v ktorom musí byť veľakrát explicitne pretypovaný aj riadok aj pole dát.

Ako príklad si vezmite nasledujúcu ukážku, v ktorej sa celé číslo zobrazí ako reťazec reprezentujúci menu. So štandardnou syntaxou ASP.NET na viazanie dát, musíte najprv pretypovať typ dátového riadku, aby ste získali dátové pole IntegerValue, ktorého hodnota je odovzdaná ako argument metóde String.Format.


<%# String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue"))) %>
VB

Uvedená sytax môže byť príliš komplexná a ťažko sa pamätá. Naproti tomu DataBinder.Eval je jednoducho len metóda s tromi argumentmi: pomenovací kontajner pre dátovú položku, meno dátového typu a formátovací reťazec. V šablónovaných ovládacích prvkoch ako FormView, GridView, DetailsView, DataList alebo Repeater, pomenovávací kontajner je vždy DataBinder.Eval. Ako sme uviedli v predchádzajúcej sekcii, ASP.NET 2.0 tiež zahŕňa zjednodušenú syntax pre DataBinder.Eval, alebo jednoducho Eval, ktorá môže byť použitá vo vnútri dátovo-viazanej šablóny pre automatické vyhodnotenie výrazu na Container.DataItem.Zjednodušená syntax Eval je podrobnejšie rozobraná v predchádzajúcej sekcii Dátové viazanie v šablónach.


<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
<%# Eval("IntegerValue", "{0:c}") %>
VB

Argument format string je voliteľný. Ak sa vynechá, DataBinder.Eval vráti hodnotu typu objekt tak, ako je ukázané v nasledujúcom príklade.


<%# CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean) %>
VB

Je dôležité poznamenať, že DataBinder.Eval môže priniesť významný pokles vo výkone oproti štandardnej syntaxi dátového viazania, pretože používa reflexiu pri neskorom viazaní. Používajte DataBinder.Eval uvážene a najmä vtedy, keď sa nevyžaduje formátovanie reťazca.

VB Data Binding Using DataBinder.Eval
Run Sample View Source

Microsoft .NET Framework SDK QuickStart Tutorials Version 2.0
Copyright © 2005 Microsoft Corporation. All rights reserved.
Preklad do slovenského jazyka - Copyright © 2005 - 2007 www.aspnet.sk, www.qsh.sk
Pošlite komentár k tejto stránke
Copyright © 2002 - 2008 Chastia, spol. s r. o., Igor Stanek, Designed by Lacino
Portál je hostovaný na serveroch firmy Quantasoft - www.qsh.sk.