ADO.NET a kontroly v ASP.NET
Tento článok ukazuje jednoduché použitie užívateľského kontrolu (User Control) a použitie ADO.NET (štruktúra typu DataSet).
Prostriedkom pre viacnásobné použitie nejakého všeobecne napísaného kódu sú v ASP.NET kontroly. Kontrola teda rozumej objekt nezávislý na všetkým ostatným, ktorý je však spojený vstupy (nastavenie vlastností, volanie nejakých metód atď) a poskytuje výstupy (vlastnosti, bublanie udalostí ...). Druhy kontrolov v ASP.NET sú dva, užívateľské a serverové. Užívateľské sú jednoduchšie čo do tvorby, majú príponu ascx.
Urobíme si jednoduchý kontrůlek, ktorý bude vykresľovať šachovnicu ukážme si výsledok, navyše tam kde bude "dáma" vykreslí dámu, vykreslenie sa vykoná pomocou HTML značiek IMG. Kontrol bude mať jeden (náš) vstup, tým bude nastavenie vlastnosti _DataSource8Q, ktorá je typu DataSet. DataSet (jedna vec z ADO.NET) je špeciálna dátová štruktúra typu 'tabuľka'. Má riadky, stĺpce. Je to najčastejšie používaná štruktúra pri práci s databázu. DataSet si zjednodušene predstavme ako tabuľku ktorá má riadky a stĺpčeky. Stĺpce bývajú homogénna, tj. Sú jedného typu napr. Reťazec (System.String) číslo (System.Int32) boolean pod. Navyše DataSet nie je len jedna tabuľka, ale môže mať viac tabuliek. Všeobecne sa k nejakej hodnote v datasete dostaneme napr. Názov InstanceDataSetu.Tables [číslo / alebo názov tabuľky] .Rows [číslo_řádku] .ItemArray [číslo_sloupce] .ToString () trebárs prevedením do vytlačiteľný reťazca. Tak snáď je to jasné , Ak nie tak to objasní príklad, čo je úplnný zdroj nášho kontrolu. Má prepísanou metódu Render, kde sa môžeme ukázať čo v nás je a celý kontrol "sami vyrenderovať". je to síce pracné, zato môžeme ihneď v cykle reagovať na hodnotu v Množina údajov (je / nie je dáma), môžeme tak presne vytvoriť farebné odlíšenie políčok šachovnice a pod. Vo funkcii sú použité dva cykly, vnorený nám "behá" po stĺpcoch, vonkajšie potom určuje riadky. Všimnime si tiež objektu StringBuilder zo menného priestoru System.Text. Tento objekt je špeciálne navrhnutý k reťazenie veľkých reťazcov, vie dynamicky meniť pamäťové zdroje.
soubor ShowDesk.ascx: --------------------- <%@Import Namespace="System.Data" %> <%@Import Namespace="System.Text" %> <script language="C#" runat="server"> int _intDesk = 0; public DataSet _DataSource8Q = null; protected override void Render(HtmlTextWriter output) { if (_DataSource8Q != null) { StringBuilder sbHTML = new StringBuilder("<TABLE border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"border: #aaaaaa 3px solid outset;\">"); // cyklujeme vsemi radky for (int i=0; i<8; i++) // cyklujeme vsemi radky { sbHTML.Append("<TR>"); if (i==0) { sbHTML.Append("<TD rowspan=\"9\"><img src=\"img/desk_l.gif\"></TD>"); } // cyklujeme vsemi sloupci for (int j=0; j<8; j++) { if ((i+j) % 2 == 1) { sbHTML.Append("<TD width=\"60\" height=\"60\" background=\"img/cel"+ (i+j) % 2 +".gif\">"); if ((int) _DataSource8Q.Tables[_intDesk].Rows[j][7-i] == 1) { sbHTML.Append("<IMG src=\"img/dama"+ (i+j) % 2 +".gif\">"); } sbHTML.Append("</TD>"); } else { sbHTML.Append("<TD width=\"60\" height=\"60\" background=\"img/cel"+ (i+j) % 2 +".gif\">"); if ((int) _DataSource8Q.Tables[_intDesk].Rows[j][7-i] == 1) { sbHTML.Append("<IMG src=\"img/dama"+ (i+j) % 2 +".gif\">"); } sbHTML.Append("</TD>"); } } sbHTML.Append("</TR>"); } sbHTML.Append("<TR>"); sbHTML.Append("<TD colspan=\"8\"><img src=\"img/desk_d.gif\"></TD>"); sbHTML.Append("</TR>"); sbHTML.Append("</TABLE>"); output.Write(sbHTML); } } </script>
Tak, ako taký kontrol zabudujeme do ľubovoľnej ASPX stránky? Slúži nám k tomu direktíva @Register. No a potom kontrolu dáme ako vstup "nejaký" (štruktúrovaný) DataSet, ktorý požaduje, ale najprv ho vytvoríme. No ak DataSet nerobíme z napr. XML súboru alebo nejakým dotazom do databázy, kde dostaneme nejaký typový DataSet, ale "ručne" tak nás to bude stáť nejakú prácičku. Vytvoríme inštanciu objektu DataSet - globálna premenná "Desk". Metóda AddDesk potom s týmto datasetom pracuje, pridáva tabuľku a hodnoty, snažil som sa kód v metóde popísať poznámkach. Metóda "šachovnice" potom len volá metódu AddDesk a vytvorí jedno z možných riešení úlohy rozmiestnenia 8 dám, ktoré si plne vyriešime v ďalších dieloch.
<%@Import Namespace="System.Data" %> <%@Register TagPrefix="uc1" TagName="ShowDesk" Src="ShowDesk.ascx" %> <html> <script language="C#" runat="server"> public DataSet Desk = new DataSet(); public void Sachovnice() { // Put user code to initialize the page here AddDesk(); Desk.Tables[0].Rows[0][0] = 0; Desk.Tables[0].Rows[0][1] = 0; ... Desk.Tables[0].Rows[7][6] = 0; Desk.Tables[0].Rows[7][7] = 0; } private void AddDesk() { // vezmeme pocet dosavadnich tabulek ve strukture DataSet int NumTables = Desk.Tables.Count; // pridej do datasetu novou tabulku Desk.Tables.Add("" + NumTables); // pridame osm sloupu typu int for (int i=0; i<8; i++) { Desk.Tables[NumTables].Columns.Add("id" + i, Type.GetType("System.Int32")); } // vloz osm radku s nulovymi hodnotami ve sloupcich for (int i=0; i<8; i++) { // objekt radek DataRow Radek; // utvor strukturu radku z tabulky datasetu Radek = Desk.Tables[NumTables].NewRow(); // pro vsech osm sloupcu nastavime nulove hodnty for (int j=0; j<8; j++) { // pocatecni nulove hodnoty pro vsech osm sloupcu Radek[j] = 0; } // vlozime do kolekce radku radek Desk.Tables[NumTables].Rows.Add(Radek); } }
Štartovacie metóda Page_Load volá metódu a nastavuje užívateľskému kontrolu zdrojový DataSet. Metódy obsluhy buttonu skryjú či zviditeľní kontrol.
private void Page_Load(object sender, System.EventArgs e) { Sachovnice(); ShowDesk1._DataSource8Q = Desk; } void Btn_Click(object sender, System.EventArgs e) { ShowDesk1.Visible = true; } void Btn_Click2(object sender, System.EventArgs e) { ShowDesk1.Visible = false; } </script>
Ešte umiestnime kontrol do HTML štruktúry našej ASPX stránky
<body style="font: 10pt verdana"> <h3>Jednoduchy Uzivatelsky Kontrol / Nastaveni vlastnosti</h3> <form runat="server"> <uc1:ShowDesk id="ShowDesk1" runat="server"></uc1:ShowDesk> <asp:button text="Zobrazit sachovnici" OnClick="Btn_Click" runat=server/> <asp:button text="Skryt sachovnici" OnClick="Btn_Click2" runat=server/> </form> </body>
Kontrol je hotový a my ho s úspechom určite použijeme niekedy nabudúce. Bezprostredne nabudúce to ale nebude, pretože nabudúce si načrtneme stránkovanie obrázku ...
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 820x (1.81 kB)