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

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
Run Sample View Source

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)
Run Sample View Source

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)
Run Sample View Source

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)
Run Sample View Source

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
View Source

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)
View Source
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
Run Sample View Source

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
Run Sample View Source

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
Run Sample View Source
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
Run Sample View Source
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:
  1. Zrušiť dátové viazanie v Page_Load, ak požiadavka bola postback
  2. Reagovať na udalosť SelectedIndexChanged
  3. Pridať hodnotu vlastnosti SelectedValue prvku DropDownList do kolekcie parametrov príkazu (Command)
  4. 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
Run Sample View Source

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
Run Sample View Source
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
Run Sample View Source

Š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
Run Sample View Source

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
Run Sample View Source

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
Run Sample View Source

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
Run Sample View Source

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)
Run Sample View Source

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
Run Sample View Source

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)
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.