HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Web kontrolban lévő Button lenyomásának eseménye és TextBox adatának kiolvasása


PostBack kezelése 4. rész

Példaprogram letöltése

13676 bájt

Sorozatunk utolsó részében egy összetett feladatot oldunk meg, mely valós alkalmazásoknál nagyon gyakori feladat. Készítünk egy web kontrolt, melyben van adatbeviteli eszköz (TextBox) és nyomógomb (Button) is. Ekkor a kontrolnak saját magának kezelnie kell a gombra történő kattintás eseményét és a TextBox-ba írt adat esetleges változását is.

Mellékelt példa megnyitása előtt szükséges egy PostBack04 nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
Szükségünk lesz két int típusú property-re. Az egyik Step néven számlálja majd, hogy hányszor kattintott a felhasználó a nyomógombra. A másik Value néven a TextBox-ba írt szám értékét tárolja. Mind a két property-t úgy kell megoldanunk, hogy az aktuális értékük megőrződjön két web hívás között. Ehhez a ViewState objektumot használhatjuk fel. Itt tároljuk el Step, illetve Value néven az adott értékeket és innen is olvassuk ki azokat. Így minden felhasználónk minden objektumának aktuális értéke megmarad.
    public int Step
    {
      get 
      {
        object obj = ViewState["Step"];
        return (obj == null) ? 0 : (int)obj;
      }
      set 
      { 
        ViewState["Step"] = value;
      }                  
    }
A kontrol tartalmát a Render függvényben hozzuk létre.
    protected override void Render(HtmlTextWriter output)
    {
      ...
A TextBox létrehozásánál adjunk annak egy egyedi azonosítót. Ehhez felhasználjuk a kontrolunk egyedi azonosítóját, melyet az UniqueID property-ből olvashatunk ki és ehhez még hozzátesszük a _multipleValue sztringet.
      TextBox tb = new TextBox();
      tb.Text = Value.ToString();
      tb.ID = UniqueID + "_multipleValue";
      tb.Style.Add("left", "10");
      tb.Style.Add("top", "30");
      tb.Style.Add("position", "absolute");
Fontos, hogy a gomb azonosítója megegyezzen a kontrolunk azonosítójával.
      Button b = new Button();
      b.ID = UniqueID;
      b.Text = "Tovább";
      ...
      p.Controls.Add(l);
      p.Controls.Add(tb);
      p.Controls.Add(b);
      RenderBeginTag(output);
      p.RenderControl(output);
      RenderEndTag(output);
    }
Most már csak kezelnünk kell a LoadPostData függvényt. Amikor ez fut, akkor biztosak lehetünk abban, hogy a kontrolunkban lévő nyomógombon történt a kattintás. Ekkor a paraméterként kapott postCollection-ből kiolvashatjuk a TextBox-unk aktuális értékét. Ehhez csak annak azonosítóját kell megadnunk, melyet a paraméterként kapott postDataKey és ismét a _multipleValue sztringből rakunk össze.
    public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
    {
      Value = Convert.ToInt32(postCollection[postDataKey+"_multipleValue"]) * 2;
      Step++;
      return false;
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 628. 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 |