IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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 InstanceDataSe­tu.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 podmienkami

Stiahnuté 778x (1.81 kB)

 

Všetky články v sekcii
ASP.NET Web Forms
Článok pre vás napísal Michael Stavěla
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Jméno: Michael Stavěla, místo nejčastějšího pobytu: Morava, vzdělání technicko-ekonomické, záliby: rekreační sport (floorball, cyklistika, plavání), programování, šifry, příroda – poznávání nových míst, hlavně ne rutina – ať se něco děje, čím víc zm...
Aktivity