|
|
ASP.NET QuickStart Príručka
Viazanie na databázy
Jeden z najbežnejších typov dát, ktoré sa zobrazujú vo webovej aplikácii sú údaje, ktoré pochádzajú z SQL databázy akou je napríklad Microsoft SQL Server, Oracle, alebo iné dátové úložisko typu OLEDB alebo ODBC. Ovládací prvok SqlDataSource reprezentuje priame spojenie s databázou vo webovej aplikácii, ktoré môžu dátovo viazané ovládacie prvky použiť na automatické získavanie dát.
SqlDataSource má nahradiť kód ADO.NET, ktorý bolo nutné napísať na stránke pre vytvorenie spojenia a pre vytvorenie príkazu reprezentujúceho databázový dopyt.
Keďže dátabázové dopyty sú priamo špecifikované ako vlastnosti ovládacieho prvku dátového zdroja, nazýva sa niekedy použitý model dvojvrstvovým, pretože dátové dopyty sú písané v kóde stránky. Práve preto je ovládací prvok SqlDataSource namierený na použitie v osobných stránkach, ktoré nevyžadujú úplne zapúzdrený dátový objekt aplikačnej vrstvy. Jedna z nasledujúcich sekcii tohto návodu hovorí o ovládacom prvku ObjectDataSource, ktorý sa často využíva vo väčších riešeniach, ktoré majú potrebu zapúzdrenia databázových dopytov na aplikačnej úrovni (úrovni business objektov).
Prvok GridView
Pre potreby demonštrácie viazania ovládacích prvkov na údaje z databázy, príklady v tejto sekcii s výhodou využívajú nový dátovo viazaný prvok používateľského rozhrania, nazývaný GridView.
Prvok GridView je novinkou v ASP.NET 2.0 slúžiacou na renderovanie dát v mriežkovej podobe. Každý riadok zodpovedá dátovému záznamu a stĺpce reprezentujú polia záznamu. Prvok GridView je náhradou za za DataGrid známy z ASP.NET v1.x. a podporuje veľmi podobný objektový model.
GridView podporuje nasledujúce vlastnosti:
- Viazanie na ovládacie prvky dátových zdrojov.
- Zabudovaná triediaca schopnosť.
- Zabudovaná aktualizačná schopnosť a schopnosť vymazávania záznamov.
- Zabudované stránkovanie.
- Zabudované označovanie riadkov.
- Programátorský prístup ku objektovému modelu prvku pre potreby dynamického nastavovania jeho vlastností prípadne pre potreby spracovania udalostí.
- Nové typy stĺpcov ako napríklad CheckBoxField(zaškrtávacie políčko) a ImageField(obrázok).
- Viaceré dátové polia pre hyperlinkové stĺpce.
- Viaceré polia kľúčov pre výber, aktualizáciu a vymazávanie.
- Nastaviteľný vzhľad s použitím štýlov a tém.
Tvorba dátovej správy
Najjednoduchší typ stránky využívajúcej údaje je dátová správa slúžiaca na čítanie, ktorá zobrazuje údaje, ale ktorá nedovoľuje používateľovi manipulovať s prezentáciou, resp. s údajmi. Na vytvorenie takejto správy s použitím SQL databázy, je najprv potrebné nakonfigurovať SqlDataSource (Ovládací prvok dátového zdroja) na stránke a vzápätí pripojiť dátovo-viazaný prvok ako napríklad GridView na dátový zdroj špecifikovaní vlastnosti DataSourceID.
Príklad ukazuje prvok GridView asociovaný s prvkom SqlDataSource.
<form runat="server">
<asp:GridView ID="GridView1" DataSourceID="SqlDataSource1" runat="server"/>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
SelectCommand="SELECT [au_id], [au_lname], [au_fname] FROM [authors]"
ConnectionString="<%$ ConnectionStrings:Pubs %>" />
</form>
Vlastnosť ConnectionString prvku SqlDataSource špecifikuje reťazec slúžiaci na pripojenie k databáze a vlastnosťSelectCommand špecifikuje dotaz, ktorý slúži na získanie dát. ConnectionString je možné nastaviť priamo v kóde stránky, ale v tomto prípade sa hodnota vlastnosti nastavuje s využitím novej syntaxe, ktorá získava hodnotu z Web.config.
V príklade, ktorý je uvedený nižšie, GridView je napojená na prvok SqlDataSource, ktorý je pripojený na databázu Microsoft™ SQL Server.
VB GridView-SqlDataSource
Prvok SqlDataSource nie je limitovaný len na pripojenie ku Microsoft™ SQL Serveru. Môže sa pripojiť ku ľubovoľnému ADO.NET poskytovateľovi konfigurovanému ako System.Data.Common.DbProviderFactory. Štandardne sú štyria poskytovatelia zahrnutí v .Net Framework machine.config:
<configuration>
<system.data>
<DbProviderFactories>
<add name="Odbc Data Provider" invariant="System.Data.Odbc" type="System.Data.Odbc.OdbcFactory, ..." />
<add name="OleDb Data Provider" invariant="System.Data.OleDb" type="System.Data.OleDb.OleDbFactory, ..." />
<add name="OracleClient Data Provider" invariant="System.Data.OracleClient" type="System.Data.OracleClient.OracleClientFactory, ..." />
<add name="SqlClient Data Provider" invariant="System.Data.SqlClient" type="System.Data.SqlClient.SqlClientFactory, ..." />
</DbProviderFactories>
</system.data>
</configuration>
Vlastnosť ProviderName prvku SqlDataSource je možné nastaviť na invariantné meno ktorejkoľvek factory poskytovateľov. (Štandardne je System.Data.SqlClient). Ak zmeníte meno poskytovateľa, budete musieť zaistiť, aby vlastnosti ConnectionString a SelectCommand použili korektnú syntax pre zvoleného poskytovateľa.
V predchádzajúcom príklade, prvok GridView automaticky reflektoval názvy stĺpcov zo záznamov, ktoré boli vrátené prvkom SqlDataSource, aby mohol dynamicky generovať stĺpce v mriežke. Možete tiež určiť explicitné názvy stĺpcov, ktoré sa majú zobraziť pridaním objektov DataControlField do kolekcie Columns prvku GridView. Toto umožní presne určiť, ktoré stĺpce majú byť zobrazené a ich relatívne poradie.
Nasledujúci príklad demonštruje kolekciu BoundField a CheckBoxField objektov v kolekcii stĺpcov prvku GridView. Iné typy polí, ktoré môžu byť priradené kolekcii sú ImageField, HyperLinkField, CommandField, ButtonField a TemplateField.
VB GridView-SqlDataSource (BoundFields)
Vlastnosť SelectCommand prvku SqlDataSource môže byť nastavená na meno uloženej procedúry namiesto textu SQL príkazu. Najprv je ale nutné nastaviť vlastnosťSelectCommandType na "StoredProcedure".
Nasledujúci príklad demonštruje prvok SqlDataSource configurovaný na výber dát s použitím uloženej procedúry v databáze Northwind.
VB GridView-SqlDataSource (Stored Procedure)
Zvyčajne vracia prvok SqlDataSource pohľad DataView na objekt DataSet, ktorý zahŕňa výsledky dopytu. Môžete nastaviť prvok SqlDataSource, aby vracal údaje ako DataReader nastavením vlastnosti SqlDataSourceMode na "DataReader".
Použitie objektu DataReader je zvyčajne efektívnejšie a rýchlejšie ako použitie DataSetu, ak potrebujete len dopredný read-only prístup k údajom. Je dobré si uvedomiť, že triediace možnosti SqlDataSource budú v tomto režime vyradené z prevádzky.
Nasledujúci príklad demonštruje režim "DataReader" prvku SqlDataSource.
VB GridView-SqlDataSource (DataReader)
Connection String Settings
V predchádzajúcich príkladoch prvok SqlDataSource referencuje connection string s použitím novej deklaratívnej syntaxe zavedenej v ASP.NET 2.0, ktorá umožní získanie connection stringu počas behu programu. Connection string je uložený v súbore Web.config v configuračnej sekcii <connectionStrings>. Takto je prístupný pre všetky stránky, ktoré pripojenie vyžadujú z jediného miesta.
<configuration>
<connectionStrings>
<add name="Pubs" connectionString="Server=(local);Integrated Security=True;Database=pubs;"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
Nasledujúci príklad ukazuje súbor Web.config použitý v predchádzajúcich príkladoch na konfiguráciu SqlDataSource.
Connection Strings Configuration
Ukladanie connection stringov do súboru Web.config sa odporúča pre všetky ASP.NET aplikácie, nie len kvôli ich centralizovanému riadeniu, ale aj z dôvodov ich zabezpečenia.
ASP.NET 2.0 ponúka aj konzolovú utilitu na šifrovanie tejto sekcie za účelom zvýšenia bezpečnosti v produkčnom prostredí.
Pre lepšie pochopenie šifrovania connection stringov pozrite článok Šifrovanie configuračných sekcií v sekcii manažmentu tohto návodu.
Ďalší príklad ukazuje súbor Web.config so zašifrovanou <connectionStrings/> sekciou.
Connection Strings Configuration (Encrypted)
Vlastnosť ConnectionString prvku SqlDataSource je nastavená na výraz <%$ ConnectionStrings:Pubs %>, ktorý sa prekladá interpretom ASP.NET na hodnotu connection stringu počas behu programu. Môžete určiť aj výraz, pre vlastnosť ProviderName, napríklad <%$ ConnectionStrings:Pubs.ProviderName %>.
Triedenie a stránkovanie dát
Jednou z kľúčových výhod prvku GridView oproti ostatným dátovo-viazaným prvkom je jeho schopnosť automaticky využívať schopnosti dátového zdroja. Namiesto závislosti na zdrojovom kóde pre manuálne triedenia umiestnenom na stránke, prvok GridView dokáže vykonávať tieto operácie automaticky, ak je dátový zdroj správne nakonfigurovaný na ich podporu.
Prvok SqlDataSource podporuje triedenie, keď je jeho vlastnosť DataSourceMode nastavená na "DataSet".
Na aktiváciu Triedenia v GridView, sa nastavuje vlastnosť AllowSorting na true.
Toto spôsobí, že GridView renderuje tlačidlá v hlavičkách stĺpcov, na ktoré je možné kliknúť aby sa stĺpec usporiadal.
Prvok GridView odovzdá SortExpression asociovanú so stĺpcom prvku dátového zdroja, ktorý následne vráti utriedené údaje naspäť GridView.
Syntax SortExpression očakávaná prvkom SqlDataSource je tá istá ako pri vlastnosti Sort System.Data.DataView, hoci iné dátové zdroje môžu podporovať inú syntax.
Pretože triediace správanie SqlDataSource závisí na vlastnosti Sort objektu DataView, triedenie je podporované len, ak je SqlDataSource v režime DataSet; ak je v režime DataReader, triedenie nebude prístupné.
Bežne sa nastavovuje SortExpression na meno jediného poľa ktoré je asociované so stĺpcom v GridView. (Nemusí byť totožné - mohli ste premenovať stĺpce)
Gridview automaticky strieda medzi pridaním "ASC" alebo "DESC" ku SortExpression pri každom kliknutí, aby sa menilo poradie triedenia medzi zostupným a vzostupným.
VB GridView Sorting
Tak isto môžete povoliť stránkovanie v GridView nastavením vlastnosti AllowPaging na true. GridView dokáže automaticky stránkovať cez všetky návratové hodnoty z dátového zdroja, ktoré podporujú rozhranie ICollection. DataView, vrátený keď je SqlDataSource v režime DataSet, podporuje toto rozhranie, takže GridView môže stránkovať cez výsledok. Keď je v režime DataReader, GridView nedokáže stránkovať cez údaje vrátené prvkom SqlDataSource.
Nasledujúci príklad demonštruje stránkovanie v GridView oproti dátovému zdroju SqlDataSource v režime DataSet.
VB GridView Paging
Môžete prispôsobiť aj štýl a nastavenia pre stránkovač - pager, konfigurovaním vlastností PagerStyle a PagerSettings. PagerStyle určuje vzhľad a štýl pagera, PagerSettings určujú typ použitého stránkovania (Číselné, Predchádzajúci/Nasledujúci...), pozíciu pagera a súvisiace možnosti.
Nasledujúci príklad demonštruje niektoré z týchto štýlov a nastavení aplikovaných na stránkovač v GridView.
VB GridView Pager Settings
Všimnite si, že operácia stránkovania v prechádzajúcom príklade je celá vykonaná prvkom GridView nad DataView, ktorý je vrátený prvkom SqlDataSource, a ktorý podporuje rozhranie ICollection.
Hoci ide o príjemný spôsob stránkovania nad náhodnými kolekciami, nie je to vždy najefektívnejší spôsob ako traverzovať cez údaje.
Je tiež možné konfigurovať stránkovanie na úrovni rozhrania dátového zdroja, takže GridView vyžaduje len toľko riadkov, koľko potrebuje na zobrazenie stránky.
Prvok SqlDataSource aktuálne nepodporuje stránkovanie na úrovni rozhrania. ObjectDataSource podporuje túto vlastnosť, a hovorí sa o nej v časti Rozšírené triedenie a stránkovanie.
Aktualizácia a vymazávanie dát
Tak, ako pri triedení a stránkovaní, prvok GridView môže automaticky renderovať rozhranie pre modifikáciu dát počas operácií Update a Delete, ktoré môžu byť poskytnuté dátovým zdrojom, ak je na to konfigurovaný. Prvok SqlDataSource podporuje operáciu Update, ak sú jeho vlastnosti UpdateCommand resp. DeleteCommand nastavené na platné update/delete príkazy, alebo uložené procedúry.
UpdateCommand alebo DeleteCommand by mali obsahovať placeholdery (zástupné symboly) pre každú hodnotu, ktorá bude odovzdaná prvku GridView (Viac nižšie).
Tiež môžete špecifikovať kolekcie UpdateParameters alebo DeleteParameters na nastavenie vlastností jednotlivých parametrov, ako napríklad typ dát parametra, vstupný/výstupny smer, štandardná hodnota. Kolekcie sú hlbšie rozobrané v nasledujúcich častiach.
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:Pubs %>"
SelectCommand="SELECT [au_id], [au_lname], [au_fname], [state] FROM [authors]"
UpdateCommand="UPDATE [authors] SET [au_lname] = @au_lname, [au_fname] = @au_fname, [state] = @state WHERE [au_id] = @au_id"
DeleteCommand="DELETE FROM [authors] WHERE [au_id] = @au_id"/>
Aby ste nastavili rozhranie GridView na podporu Editácie alebo vymazávania, môžete nastaviť hodnotu vlastností AutoGenerateEditButton a AutoGenerateDeleteButton na true, alebo môžete pridať CommandField do prvku GridView a aktivovať jeho vlastnosti ShowEditButton a ShowDeleteButton.
GridView podporuje editáciu a vymazávanie len jedného riadku v jednom momente. Pri editácii používateľ nastaví riadok do režimu editovania kliknutím na tlačidlo Edit a potom odsúhlasí zmeny kliknutím na tlačidlo Update, keď je riadok v editovacom režime. Používateľ môže tiež kliknúť na tlačidlo Cancel na odvolanie prípadných zmien a na návrat do read-only režimu.
Nasledujúci príklad ukazuje GridView a SqlDataSource configurované pre editáciu riadkov dát.
VB GridView Updating
Dôležitá vlastnosť, ktorá hrá špeciálnu úlohu pri operáciách Update a Delete, je DataKeyNames. Spomínaná vlastnosť je typicky nastavená na mená polí z dátového zdroja, ktoré
sú súčasťou primárneho kľúča používaného na porovnávanie riadkov v dátovom zdroji. Viaceré kľúče sú oddelené čiarkou, ak určujeme túto vlastnosť deklaratívne, hoci je bežné mať len jediný primárny
Keď GridView vyvoláva operáciu Update alebo Delete, odovzdáva hodnoty týchto polí dátovému zdroju vo forme špeciálneho slovníka kľúčov (Keys), oddelených od slovníka hodnôt (Values), ktorý obsahuje nové hodnoty zadané používateľom, keď je riadok v režime editácie (pre operáciu update).
Obsah slovníka hodnôt sa získava zo vstupných prvkov riadka, keď sa nachádza v editačnom režime. Na vyradenie hodnoty zo slovníka odovzdávaných hodnôt sa používa vlastnosť ReadOnly stĺpca,
ktorá je nastavená na true v korešpondujúcom BoundField v kolekcii stĺpcov (Columns). Ak používate dizajnér GridView vo Visual Studiu, vlastnosť ReadOnly je štandardne nastavená na true pri poliach primárneho kľúča.
Všimnite si mennú konvenciu pre parametre v dopyte ktorý je priradený príkazu UpdateCommand. Automatická schopnosť GridView a iných dátovo-viazaných ovládacích prvkov, vyvolávať operáciu Update,
je závislá na správne použitej mennej konvencii. Vyžaduje sa pomenovanie parametrov zhodné s názvami asociovaných hodnôt polí vrátených pri vyvolaní SelectCommand. Použitie spomenutej mennej konvencie umožňuje párovať
hodnoty odovzdané ovládacím prvkom s parametrami v update dopyte.
Použitie štandardnej mennej konvencie predpokladá, že obsah slovníkov Keys a Values s vzájomne vylučuje (jeden je doplnok druhého). To znamená, že hodnoty polí ktoré môžu byť editované
používateľom, keď je dátovo-viazaný ovládací prvok v režime editácie, musia byť pomenované rozdielne od hodnôt polí, ktoré slúžia na výber (používané v klauzule WHERE na výber).
Iný spôsob ako sa na vec pozrieť je, že každé pole, uvedené v DataKeyNames, by malo byť read-only alebo by nemalo byť vôbec viditeľné v dátovo-viazanom ovládacom prvku (na príklad, v kolekcii Columns prvku GridView).
Hoci je bežná prax nechať polia kľúčov read-only, existujú scenáre, kedy je potreba aktualizovať polia, ktoré sa používajú na výber riadkov, ktoré sa majú aktualizovať. Na príklad, ak nastavíte ReadOnly=false
v stĺpci v kolekcii stĺpcov prvku GridView, ktorý sa zároveň nachádza aj v DataKeyNames, GridView bude odovzdávať starú hodnotu pre políčka v slovníku Keys, ale bude odovzdávať novú hodnotu
pre políčko v slovníku Values. Aby ste rozlíšili medzi dvomi existujúcimi hodnotami, budete musieť pomenovať parametre rozdielne v samotnom SQL príkaze, na príklad:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:Pubs %>"
SelectCommand="SELECT [au_id], [au_lname], [au_fname], [state] FROM [authors]"
UpdateCommand="UPDATE [authors] SET [au_id] = @au_id, [au_lname] = @au_lname, [au_fname] = @au_fname, [state] = @state WHERE [au_id] = @original_au_id"
DeleteCommand="DELETE FROM [authors] WHERE [au_id] = @original_au_id"/>
OldValuesParameterFormatString="original_{0}"
V tomto príklade, sa parameter s menom @original_au_id používa na odovzdanie pôvodnej hodnoty poľa kľúča, a @au_id sa používa na odovzdanie novej hodnoty. Vlastnosť OldValuesParameterFormatString
SqlDataSource sa nastavuje na tvar platného formátovacieho reťazca .Net Framework, aby sa určilo, ako majú byť parametre slovníka Keys premenované. Spomínaný formátovací reťazec sa používa aj na
pôvodné hodnoty nekľúčových polí (polí hodnôt), odovzdávaných dátovo-viazaným ovládacím prvkom, keď vlastnosť ConflictDetection prvku SqlDatasource je nastavená na CompareAllValues. Pre operácie vymazávanie, dátový zdroj SqlDataSource aplikuje slovník kľúčov (Keys) v pôvodnej podobe (nie sú žiadne nové hodnoty pre operáciu delete), použitím hodnoty vlastnosti OldValuesParameterFormatString na formátovanie mien kľúčových parametrov.
Filtrovanie dát
Bežným scenárom v stránkach pracujúcich s údajmi je schopnosť filtrovať údaje v správe. Predpokladajte, že používateľ by si mohol
vybrať z množiny hodnôt polí v zozname DropDownList, aby filtroval údaje zobrazené v GridView len na zobrazenie riadkov
so zodpovedajúcou hodnotou poľa. V ASP.NET v1.x, ste potrebovali vykonať v kóde nasledujúce kroky:
- Zrušiť dátové viazanie v Page_Load, ak požiadavka bola postback
- Reagovať na udalosť SelectedIndexChanged
- Pridať hodnotu vlastnosti SelectedValue prvku DropDownList do kolekcie parametrov príkazu (Command)
- Spustiť príkaz a zavolať DataBind
V ASP.NET 2.0, spomínaný kód je eliminovaný použitím deklaratívnych objektov Data Parameter. Dátový parameter
umožňuje externým hodnotám byť deklaratívne asociované s operáciami nad dátovým zdrojom. Parametre sú zvyčajne asociované s premennou v príkaze, alebo s vlastnosťou, na príklad
s parametrom v SQL príkaze alebo v uloženej procedúre pre SqlDataSource. Ovládacie prvky dátového zdroja vystavujú kolekciu parametrov, ktoré môžu obsahovať parametrické objekty, pre každú podporovanú dátovú operáciu. Na príklad:
<asp:DropDownList ID="DropDownList1" ... runat="server"/>
...
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:Pubs %>"
SelectCommand="SELECT [au_id], [au_lname], [au_fname], [state] FROM [authors] WHERE [state] = @state">
<SelectParameters>
<asp:ControlParameter Name="state" ControlID="DropDownList1" PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
Nasledujúci príklad demonštruje QueryStringParameter použitý pri získavaní hodnoty parametra z querystringu v URL žiadateľa.
VB Filter By QueryString
Nasledujúci príklad ukazuje ControlParameter, používaný na získanie hodnotu parametra z prvku DropDownList umiestneného na stránke:
VB Filter By DropDownList
Môžete konfigurovať dátové parametre na získavanie hodnôt z ktoréhokoľvek z uvedených zdrojov:
| Meno |
Popis |
Parameter |
Parametrická trieda je spoločná základná trieda z ktorej sú všetky typy Parametrov odvodené. Trieda Parameter slúži aj na implementáciu statických parametrov, kde hodnota je určená staticky s použitím vlastnosti DefaultValue.
Parametre zdieľajú spoločnú vlastnosť Name, ktorá je menom paramatra pre operáciu nad dátovým zdrojom (na príklad, meno parametra v SelectCommand pre SqlDataSource). Všetky parametre tiež zdieľajú vlastnosťType ktorá špecifikuje typ hodnoty parametra.
Parametre tiež zdieľajú vlastnosť Direction, ktora sa používa na určenie, či je parameter určený pre Vstup, Výstup (alebo ako návratová hodnota), alebo pre Vstup aj Výstup. Dátové zdroje bežne vystavujú výstupné parametre a návratové hodnoty cez event args udalosti Operation status. Ďalšie informácie spolu s príkladom sa nachádzajú v časti Práca s parametrami.
|
QueryStringParameter |
Trieda QueryStringParameter viaže hodnotu poľa querystring na hodnotu objektu Parametra. Vlastnosť QueryStringField sa zhoduje s názvom poľa z ktorého sa extrahuje hodnota querystringu. Hodnota vlastnosť DefaultValue sa vracia vždy keď je hodnota querystringu nedostupná.
|
ControlParameter |
Trieda ControlParameter viaže hodnotu vlastnosti ovládacieho prvku na hodnotu objektu Parametra. Vlastnosť ControlID sa zhoduje s ID ovládacieho prvku, ktorého vlastnosť je naviazaná na parameter. Vlastnosť PropertyName určuje názov vlastnosti ovládacieho prvku z ktorého sa získava aktuálna hodnota. Ovládací prvok, ktorého ID je špecifikované pomocou ControlID môže voliteľne definovať atribút ControlValuePropertyAttribute, ktorú určuje štandardné meno vlastnosti z ktorej sa získava hodnota pre objekt parametra. Využíva sa najmä ak PropertyName nie je určená explicitne. ControlValuePropertyAttribute sa aplikuje na nasledovné vlastnosti ovládacích prvkov:
- Label.Text
- TextBox.Text
- ListControl.SelectedValue (for example, DropDownList)
- CheckBox.Checked
- Calendar.SelectedDate
- DetailsView.SelectedValue
- GridView.SelectedValue
- TreeView.SelectedValue
- FileUpload.FileBytes
|
SessionParameter |
Trieda SessionParameter viaže hodnotu z objektu Session na hodnotu objektu Parametra. Vlastnosť SessionField obsahuje názov Session key z ktorého sa získava hodnota. Hodnota vlastnosti DefaultValue sa vracia vždy, keď nie je prístupná hodnota zodpovedajúca zvolenému kľúču.
|
FormParameter |
Trieda FormParameter viaže hodnotu poľa v HTML formulári na hodnotu objektu Parametra. Vlastnosť FormField zodpovedá menu poľa vo formulári, z ktorého sa získava hodnota. Hodnota vlastnosti DefaultValue sa vracia vždy, keď nie je prístupná hodnota zodpovedajúca zvolenému názvu poľa.
|
CookieParameter |
Trieda CookieParameter viaže hodnotu HttpCookie na hodnotu objektu Parametra. Vlastnosť CookieName zodpovedá názvu cookie z ktorého sa získava hodnota (sú podporované len jednohodnotové cookie). Hodnota vlastnosti DefaultValue sa vracia vždy, keď neexistuje zodpovedajúci cookie.
|
ProfileParameter |
Trieda ProfileParameter viaže hodnotu z používateľského profilu (User Profile object) na hodnotu objektu parametra. Vlastnosť ParameterName sa zhoduje s menom vlastnosti profilu z ktorej sa získava hodnota. Hodnota vlastnosti DefaultValue sa vráti vždy, keď nie je prístupný zodpovedajúci údaj v používateľskom profile.
Pre viac informácii, pozrite sekciu Používateľské profily návodu.
|
Všimnite si rozdiel medzi dátovými parametrami, ktoré sa vyhodnocujú oproti externému zdroju (Control, QueryString, atď.) a parametrami, ktoré
sú odovzdávané v operáciách Update, Insert a Delete v predchádzajúcich príkladoch. V neskorších scenároch, hodnoty parametrov sú odovzdávané
dynamicky dátovo-viazanými ovládacími prvkami, ktoré vyvolávajú operáciu Udate, v našom prípade prvok GridView. Pre operácie Update, Insert a Delete
nebudete zvyčajne potrebovať dátové parametre asociované s externými hodnotamie. V prípade potreby môžete zahrnúť objekt <asp:Parameter>
(základná trieda pre všetky dátové parametre) do kolekcií UpdateParameters, InsertParameters, alebo DeleteParameters dátového zdroja, aby ste určili vlastnosti,
ako napríklad Type, Direction alebo DefaultValue (hodnota, ktorá sa používa, ak je hodnota odovzdaná prvkom používateľského rozhrania nastavená na null)
, ktoré aplikujete na hodnoty paremetrov, odovzdaných z prvku GridView.
Použitie vyrovnávacej pamäti na údaje (Data caching)
Ďalšia schopnosť ovládacích prvkov dátových zdrojov je schopnosť automaticky používať vyrovnávaciu pamäť na prácu s údajmi (kešovanie). Hoci môžete používa kešovacie API na programované kešovanie, nastavenie niekoľkých deklaratívnych vlastností na prvku dátového zdroja splní rovnaký účel.
Aby ste aktivovali kešovanie pre prvok SqlDataSource (ObjectDataSource, spomínaný ďalej), nastavte hodnotu vlastnosti EnableCaching na true. Taktiež môžete určiť časový interval (v sekundách), počas ktorého sa bude záznam držať v cache s použitím vlastnosti CacheDuration.
Je možné nastaviť vlastnosť CacheExpirationPolici buď na Sliding alebo na Absolute, tak ako to môžete urobiť aj pri použití bežného kešovacieho API.
Caching je podporovaný len nad prvkom SqlDataSource, keď je vlastnosť DataSourceMode nastavená na "DataSet".
Na príklad, ak nastavíte hodnotu CacheDuration na 5 a SlidingExpiration na Absolute, SqlDataSource bude preberať údaje z databázy počas prvej požiadavky do stránky a uloží ich do cache. Ďalšie požiadavky bude SqlDataSource obsluhovať najprv s použitím hodnôt z cache
bez toho, aby sa dopytoval na databázu. Po piatich sekundách (alebo skôr, ak je tlak na cache príliš vysoký), sa kešovaná položka odstráni z vyrovnávacej pamäte a nasledovné požiadavky na stránku si vynútia opätovný prístup na databázu. (Čím sa znova zopakuje proces kešovania nad novou verziou stránky)
Ak namiesto toho nastavíte CacheDuration na 5 a SlidingExpiration na Sliding, kešované údaje
budú mať svoj čas žitia (time-to-live) pravidelne obnovovaný, ak sú údaje často vyžadované.
Ak stránka vyžaduje údaje aspoň raz za 5 sekúnd, a na cache nie je vyvíjaný priveľký tlak, kešované údaje môžu
zostať vo vyrovnávacej pamäti večne. Na druhej strane, ak nie sú žiadne požiadavky na údaje v priebehu spomínanej periódy,
údaje sú z vyrovnávacej pamäti po jej uplynutí odstránené, a pri nasledujúcom čítaní sú znovu zatiahnuté z databázy.
Príklad poukazuje na použitie vyrovnávacej pamäti pri prvku SqlDataSource. Stĺpec TimeStamp, sa aktualizuje vždy, keď je spustený dopyt, takže môžete vidieť, ako často sa údaje získavajú priamo z databázy a ako často sa získavajú z cache. Všimnite si, že približne
každých päť sekúnd sa TimeStamp aktualizuje.
VB SqlDataSource Caching
Šikovný pozorovateľ si mohol všimnúť, že TimeStamp sa aktualizuje vždy aj v tedy, keď je vybraná nová hodnota z
DropDownList filtra na stránke. Dôvodom aktualizácie je, že pri zmene filtra dostáva SelectCommand jedinečnú množinu parametrov
, čo predstavuje iný dotaz na databázu, a následne samostatné položky v cache. (všimnite si, že ak vyberiete tú istú položku z DropDownList-u dvakrát v priebehu
piatich sekúnd, TimeStamp sa nemení.)
Alternatívny prístup, ktorý funguje dobre pre malé dátové dopyty je vybrať všetky údaje z databázy na umiestnenie do cache,
a potom filtrovať jediný údaj vo vyrovnávacej pamäti pre rôzne hodnoty parametrov. Pre podporu spomínaného scenára,
prvok SqlDataSource podporuje vlastnosť FilterExpression a zodpovedajúcu kolekciu FilterParameters.
Namiesto vloženia hodnôt parametrov do samotného príkazu (ako v prípade SelectParameters),sa na vlastnosť RowFilter objektu DataView vráteného po spustení príkazu aplikuje filtrovací výraz.
Syntax výrazu musí byť v súlade z vyžadovanou syntaxou pre DataView.
Vlastnosť Row Filter.
Môžete vložiť zástupcov za hodnoty parametrov vo filtrovacom výraze s použitím štandardnej syntaxe formátovacieho reťazca v .Net Frameworku, na príklad
"{0}", "{1}". Počas behu, prvok SqlDataSource aplikuje hodnoty parametrov určených kolekciou FilterParameters do FilterExpression
formátovaním reťazca s použitím uvedených hodnôt. Všimnite si, že hodnoty parametrov nie sú ukončené (escaped), takže budete musieť obaliť zástupcov parametrov
do jednoduchých úvodzoviek pre reťazcové typy.
<asp:DropDownList ID="DropDownList1" ... runat="server"/>
...
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:Pubs %>"
SelectCommand="SELECT [au_id], [au_lname], [au_fname], [state] FROM [authors]">
FilterExpression="state = '{0}'"
<FilterParameters>
<asp:ControlParameter Name="state" ControlID="DropDownList1" PropertyName="SelectedValue" />
</FilterParameters>
</asp:SqlDataSource>
Nasledujúci príklad demonštruje uvedenú filtrovaciu techniku v akcii
VB Filtering Cache Entries
Kešovanie dát je vždy obchodom medzi výkonom (nie je nutné zakaždým pristupovať k databáze ) a aktuálnosťou dát (záznam v cache obsahuje len snímku z dát
získanú v určitom čase). Pre stránky je bežné používať relatívne nízku CacheDuration aby sa zaistila aspoň virtuálna aktuálnosť dát. Lepšia situácia by bola,
učiniť neplatnými len tie záznamy v cache, pre ktoré sa databázový údaj zmenil. Ak sa údaj nezmenil, nie je dôvod odstraňovať záznamy z cache.
Nová vlastnosť v ASP.NET 2.0 nazývaná SQL Cache Invalidation umožňuje konfigurovať dátový zdroj, aby kešoval údaje na dobu neurčitú (alebo len na určenú dobu)
dovtedy, kým sa údaje v databáze nezmenia. Hneď na to je záznam z cache odstránený. Nová technika umožňuje omnoho vyššie hodnoty CacheDuration a stále
garantuje, že zobrazené údaje sú zhodné s údajmi v databáze.
SQL Cache Invalidation je podporovaná len na databázach Microsoft™ SQL Server. Sú dve implementácie invalidácie cache: invalidácia založená na notifikáciách
, ktorá je podporovaná na SQL Server 2005 a invalidácia založená na výzvach podporovaná v predchádzajúcich verziách SQL Servera.
Sekcia Invalidácia SQL Cache tohto návodu popisuje
kroky potrebné na konfiguráciu obidvoch spomínaných implementácií.
Hneď, ako je invalidácia SQL Cache správne nakonfigurovaná, môžete ju používať z ovládacieho prvku dátového zdroja nastavením vlastnosti SqlCacheDependency .
Ak sa používa implementácia založená na výzvach, hodnota vlastnosti môže byť vo formáte connectionName:tableName. Ak sa používa implementácia
založená na notifikáciách, hodnota vlastnosti je "CommandNotification".
V nasledujúcom príklade je CacheDuration nastavená na "Infinite" a SqlCacheDependency je určená. Všimnite si, že sa stĺpec timestamp neaktualizuje, kým nie sú údaje modifikované použitím tlačidla Edit na GridView.
VB Data Source SqlCacheInvalidation
Master-Detaily a ovládací prvok DetailsView
V sekcii Filtrovanie dát ste videli, ako prvky dátových zdrojov akceptujú hodnoty parametrov z externých zdrojov,
ako iné ovládacie prvky na forme, hodnoty queristring, atď. Podobná technika môže byť použitá na vytvorenie
master-detail scenára. Master-detaily typicky predstavujú zostavenie prvkov, kde vybraný záznam v ovládacom prvku
"master" zobrazuje prídavné informácie pre vybraný záznam v prvku "detail". Dodatočné detaily môžu byť
vlastnosti tej istej dátovej entity, alebo môžu pochádzať zo záznamov, ktoré sú prepojené s vybraným záznamom cez vzťah cudzieho kľúča (foreign key) v databáze.
Ovládací prvok GridView podporuje vlastnosť SelectedValue, ktorá indikuje aktuálne vybraný riadok v tabuľke. Vlastnosť SelectedValue sa vyhodnotí ako
hodnota prvej položky v kolekcii DataKeyNames. Môžete na GridView aktivovať používateľské rozhranie pre výber riadkov nastavením vlastnosti AutoGenerateSelectButton na
true, alebo pridaním CommandField s ShowSelectButton nastaven7m na true do kolekcie Columns prvku GridView.
Vlastnosť SelectedValue prvku GridView môže byť asociovaná s ControlParameter v dátovom zdroji keď potrebujeme dopytovať sa na detailné záznamy, podobným spôsobom ako je konfigurované filtrovanie
s použitím DropDownList-u v predchádzajúcich príkladoch.
Ak potrebujete zobraziť detaily aktuálne vybraného riadku, môžete použiť iný prvok GridView, ale ASP.NET ponúka aj nový prvok DetailsView ktorý je špeciálne navrhnutý
pre zobrazovanie dodatočných informácií. Prvok DetailsView renderuje jediný záznam, namiesto kolekcie záznamov. Podobne ako GridView, DetailsView renderuje údaje vo forme tabuľky,
ale riadky zodpovedajú jednotlivým dátovým položkám (Podobne ako stĺpce pri GridView). Polia sú definované v kolekcii Fields prvku DetailsView.
DetailsView dokáže v prípade potreby stránkovať cez kolekciu záznamov podobným spôsobom ako GridView (pri DetailsView je PageSize implicitne nastavená na 1).
VB Master-Details w/ GridView and DetailsView
DetailsView podporuje editáciu ako GridView, môžete ju aktivovať nastavením vlastností
AutoGenerateEditButton resp. CommandField.ShowEditButton na true.
Samozrejme, dátový zdroj asociovaný s DetailsVied musí byť tiež konfigurovaný na podporu operácie
Update (nastavením UpdateCommand na SqlDataSource).
Nasledujúci príklad ukazuje DetailsView, ktorý je nastavený na podporu editácie záznamov v
scenári Master-detail.
VB DetailsView Editing
Zvyčajne sa dátovo-viazané ovládacie automaticky znovu viažu na dátový zdroj, keď sa zdroj zmení. (napríklad po operácii Update). Avšak
v predchádzajúcom príklade, DetailsView je viazaný na iný dátový zdroj ako GridView,
takže keď sa vyvolá uperácia Update, iba DetailsView obdrží udalosť informujúcu o zmene dátového zdroja.
Aby ste prinútili GridView, aby sa aktualizoval, keď DetailsView vykonáva Update, môžete zavolať metódu
DataBind() explicitne na GridView pri reakcii na udalosť ItemUpdated.
Príklad tak isto reaguje na udalosti GridView, v ktorých vyraďuje editáciu, keď je na GridView vyvolaná
operácia triedenia alebo stránkovania, alebo keď je vybraná nová filtrovacia hodnota z prvku DropDownList.
Je bežné oddeľovať obrazovky master-detail na viacero stránok vo webovej aplikácii.
Aby ste to spravil, môžete pridať odkaz (hyperlink) do každého riadku GridView, aby ste sa navigovali
na samostatnú stránku obsahujúcu detaily, tak, že odovzdávate argumenty spolu s query stringom.
Na stránke zobrazujúcej detaily, dátový zdroj naviazaný na DetailsView akceptuje argumenty s použitím objektu
QueryStringParameter
Odkaz môže byť pridaný do GridView vložením objektu HyperLinkField do kolekcie
Columns prvku GridView. Vlastnosť Text poľa HyperLinkField slúži na nastavenie textu,
ktorý sa zobrazí namiesto odkazu (na príklad "View Details..."), a vlastnosť
NavigateUrl určuje URL na ktoré sa naviguje keď používateľ klikne na hyperlink.
Namiesto určenia statickej URL pre všetky riadky, je bežné špecifikovať
NavigateUrlFields, ktorá sa používa na konštrukciu dynamických URL.
NavigateUrlFields môže byť nastavená deklaratívne, ako čiarkou oddelený zoznam polí
z dátového zdroja. Vlastnosť NavigateUrlFormatString určuje štandardný formátovací reťazec pre URL, použitím zástupcov
ako {0} a {1} ktoré sú nahradené hodnotami polí počas generovania stránky.
Príklad demonštruje scenár master-details s použitím GridView a DetailsView na samostatných stránkach.
Oproti predchádzajúcim príkladom, ktoré zobrazovali GridView a DetailsView zviazaných s tým istým typom záznamu (autor),
tento príklad ukazuje iné typy záznamov pre prvky master a detail (autori a knihy), zviazané vzťahom
cudzieho kľúča v databáze. Pretože autor môže mať viac ako jednu asociovanú knihu, DetailsView bol konfigurovaný na podporu stránkovania záznamov
na stránke zobrazujúcej detaily.
VB Master-Details (Separate Pages)
Inserting Data
Ako prvok GridView, aj DetailsView podporuje operácie Update a Delete cez dátový zdroj.
Avšak DetailsView tiež podporuje vkladanie dát, ktoré GridView nepodporuje.
Môžete jednoducho párovať DetailsView a GridView aby ste umožnili vkladanie záznamov, ktoré majú byť zobrazené na
prvku GridView.
Keď potrebujete, aby SqlDataSource podporoval operáciu Insert (vkladanie do databázy), nastavte vlastnosť InsertCommand na platný
príkaz vkladania (obvykle príkaz SQL Insert), spolu so zástupcami parametrov, pre každé pole záznamu, ktoré je zobrazené na DetailsView
pri režime vkladania. Môžete voliteľne určite kolekciu InsertParameters aby obsahovala parametrické objekty pre operáciu vkladania a umožniť tak vkladanie z externých zdrojov.
Aby ste aktivovali používateľské rozhranie na DetailsView pre vkladanie, nastavte hodnotu vlastnosti AutoGenerateInsertButton na true, alebo pridajte
CommandField s ShowInsertButton nastaveným na true do kolekcie Field prvku DetailsView.
Aby ste prepli DetailsView do režimu vkladania, stlačte tlačidlo "New". DetailsView renderuje vstupné
ovládacie prvky pre každý riadok v režime vkladania. Všimnite si, že polia označené ako ReadOnly sú renderované ako vstupné
ovládacie prvky (čo neplatí pre režim Update). Aby ste vyradili vstupný prvok z režimu Insert, nastavte preň
vlastnosť InsertVisible na false. Aby ste prijali operáciu Insert, kliknite na tlačidlo "Insert", v režime vkladania.
Ku odmietnutiu dochádza, ak kliknete na tlačidlo "Cancel".
Keď je operácia Insert prijatá, DetailsView zozbiera všetky hodnoty zo vstupných ovládacích prvkov, a zaplní
slovník Values, ktorý sa odovzdáva dátovému zdroju. SqlDataSource použije hodnoty na
nastavenie kolekcie parametrov príkazu InsertCommand, ktorý sa následne spustí a vloženie sa premietne do databázy.
Ako pri Editácii, schopnosť automatického vkladania závisí na pomenovaní parametrov, ktoré musia mať rovnaké názvy,
ako polia vrátené operáciu Select. Všimnite si, že slovník Keys (slovník kľúčov) nie je potrebný pri vkladaní.
VB Master-Details Insert
Môžete umiestniť DetailsView na samostatnú stránku, aby ste vykonali operácie Insert a Update.
Nasledujúci príklad ukazuje prvok DetailsView na samostatnej stránke nastavený na vkladanie a editáciu.
Všimnite si , že vlastnosť DefaultMode je nastavené v príklade na Insert, alebo Edit,
takže DetailsView sa zobrazuje v režime Insert/Edit implicitne namiesto režimu read-only. Po vykonaní operácií
Insert alebo Update, DetailsView sa vždy vráti do štandardného režimu (DefaultMode), ktorý je zvyčajne ReadOnly.
VB Master-Details Insert (Separate Pages)
|
|