HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Webes kontrolok dinamikus betöltése


Példaprogram letöltése

18341 bájt

A saját készítésű Webes kontroljainkat általában szerkesztési időben helyezzük a Weblapokra, pontosan megadva hová is kerüljön. Van azonban mód arra is, hogy a kontrolok dinamikusan töltődjenek be, és kerüljenek az oldal egy meghatározott pozíciójába. Cikkünkben feltárjuk, hogy miként tudjuk ezt megvalósítani. Elkészítünk egy példát, melyben konkrét feladatokat is adunk a dinamikusan betöltődő kontrolnak.

Mellékelt példa megnyitása előtt szükséges egy DynamicLoad nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez futtassa le a mellékelt CreateVD.js parancsállományt.
A kontrolok készítésének lehetősége talán az egyik leghasznosabb képessége a Visual Studio.NET-nek. Elegendő ugyanis a gyakran használt kontrolokat egyszer megkonstruálni, és a megfelelő funkcionalitással felruházni. Rengeteg idő takarítható meg ezzel a módszerrel, mely időt a fejlesztés egyéb teendőire fordíthatjuk.
A Template-ek között találunk egy .aspx kiterjesztésű kontrol-típust, mely alkalmas arra, hogy a szükséges beépített kontrolokat egy csokorba gyűjtsük, és a Weblapjainkra gyorsan feltegyük. Itt kevesebb kódolásra van szükségünk, hiszen a megjelenítés a fő szempont.
LoadTemplate metódus
A Page osztály segítségével dinamikusan is betölthetjük ezeket a kontrolokat. Erre alkalmas a LoadTemplate metódus, melynek deklarációja a következő:
LoadTemplate
Osztály: Page
public ITemplate LoadTemplate(
string virtualPath
);
Futási időben tölti be a kontrolt, és generálja a kódját. A metódus visszatérési értéke lehet egy másik – mint példánkban – kontrol egy property-jének értéke.
Paraméterek
string virtualPath
A kontrol elérési útvonala. Fel kell tüntetnünk a kiterjesztést is.
Visszatérési érték
A betöltött kontrol objektuma (ITemplate).
A mellékelt példában a WebForm1.aspx lap kódjában töltjük be a következő kontrolokat dinamikusan:
  • HeaderTemplate
  • ItemTemplate
  • FooterTemplate
A weblapon elhelyeztünk egy DataList kontrolt, melynek megfelelő property-jei lesznek a kontrolok kódjai.
<asp:datalist id="DataList1" style="..." runat="server">
</asp:datalist>
A betöltést a lap töltődésével egy időben végezzük el.
DataList1.HeaderTemplate = Page.LoadTemplate("HeaderTemplate.ascx");
DataList1.ItemTemplate = Page.LoadTemplate("ItemTemplate.ascx");
DataList1.FooterTemplate = Page.LoadTemplate("FooterTemplate.ascx");
Ezt követően beolvassuk a products.xml állomány tartalmát és megjelenítjük a kontrolban.
DataSet ds = new DataSet();
ds.ReadXml(MapPath("products.xml"));
DataList1.DataSource = ds.Tables[0].DefaultView;
DataList1.DataBind();
A felsorolt Template-ek közül az első és az utolsó a fejléc-, és lábléc-szövegeket tartalmazzák, míg az ItemTemplate kontrol végzi el a megjelenítést. Itt a forrás három oszlopának három értékét olvassuk ki egy ASP kóddal:
<%# DataBinder.Eval(((DataListItem)Container).DataItem, "ProductID") %>
...
LoadControl metódus
A WebForm2.aspx lap kódjában is dinamikusan töltünk be kontrolt, de a kontrol már komolyabb funkciókkal is bír. Rendelkezik Webes kontrolokkal, melyek információt adnak vissza a betöltött adathalmazból.
A LoadControl deklarációja a következő:
LoadControl
Osztály: Page
public Control LoadControl(
string virtualPath
);
Betölti a kontrolt.
Paraméterek
string virtualPath
A kontrol elérési útvonala.
Visszatérési érték
A kontrol objektuma, melynek tagobjektumai elérhetők a hívó oldalról.
A kontrol DropDownList kontrolját a betöltés után töltjük fel értékekkel. Egy adott érték kiválasztásakor, megnyomva a kontrol nyomógombját, megjelenik az adott termék ára.
A betöltés a WebForm2.aspx Load eseményében következik be.
MyUserControl control = (MyUserControl)Page.LoadControl("MyUserControl.ascx");
Panel1.Controls.Add(control);
Egy panelre igazítva jelenítjük meg a kontrolt, hogy pontosan a megfelelő pozícióba kerüljön. Ezt követően betöltjük az XML tartalmát.
DataSet ds = new DataSet();
ds.ReadXml(MapPath("products.xml"));
Következő lépésben feltöltjük a kontrol listáját a termékek neveivel.
((MyUserControl)control).DropDownList1.Items.Clear();
((MyUserControl)control).prices.Clear();
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
  ((MyUserControl)control).DropDownList1.Items.Add(ds.Tables[0].Rows[i]["ProductName"].ToString());
  ((MyUserControl)control).prices.Add(ds.Tables[0].Rows[i]["UnitPrice"]);
}
A termékek árait egy listában helyezzük el, és a nyomógomb megnyomásakor olvassuk ki onnan, a megfelelő index-szel hivatkozva az adott elemre. Ezt tesszük a kontrol betöltése után is.
int index = Convert.ToInt32(Page.Request.QueryString["index"]);
((MyUserControl)control).TextBox2.Text = ((MyUserControl)control).prices[index].ToString();
A nyomógomb eseménykezelőjét a kontrol osztályában valósítjuk meg.
if (prices.Count != 0)
{
  TextBox2.Text = prices[DropDownList1.SelectedIndex].ToString();
}

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 645. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |