|
|
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
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
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
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
Ď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)
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
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
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
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
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
Š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
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
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)
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
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
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)
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
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
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
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)
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
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
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
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
Ďalší príklad ilustruje viazanie na vlastnosť iného ovládacieho prvku.
VB Data Binding to a Server Control Property
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
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
Ďalší príklad ukazuje viazanie na Hashtable.
VB Data Binding to a Hashtable
Č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
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
|
|