C# - Formázható Label kontrol webes alkalmazáshoz

forráskód letöltése
Adatmegjelenítéskor sokszor kevés, ha egy Label-en megjelenítjük az adott számot. Sokkal szebb eredményt érhetünk el, ha a kiírt szám formázott, az adott feladatnak megfelelően. Készítünk hát egy olyan kontrolt, mely képes tetszőlegesen formázni a kiírt számot, így lehet pénz, időpont, hexadecimális forma vagy bármi egyéb.
További előnye az új kontrolnak, hogy megoldjuk azt is, hogy adatot köthessünk hozzá. Így akár egy SQL lekérdezés ereménye is megjeleníthető a web lapon könnyedén, ráadásul rögtön formázva.
Mellékelt példa megnyitása előtt szükséges egy WebFormatLabel 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 property-re: egyik a Number, melybe a kiírandó szám kerül, másik a FormatString, melybe a formázási feltétel kerül megadásra.
A Number property-nél meg kell adnunk a Bindable attribútumot igaz értékre állítva, annak érdekében, hogy a DataBinding működőképes legyen-e property esetén is.
    [Bindable(true)]
    public Single Number 
    {
      get
      {
        return number;
      }  
      set
      {
        number = value;
      }
    }
Létrehozunk egy Label kontrolt, melyen a formázott feliratot jelenítjük majd meg.
    protected override void CreateChildControls() 
    {    
      l = new Label();
      Controls.Add(l);
    }
A Render függvényben az EnsureChildControls függvény hívásával biztosítjuk, hogy már szerkesztési időben is látható legyen az eredmény, mivel e függvény kiváltja a CreateChildControls függvény futását, ami létrehozza a szükséges Label-t.
    protected override void Render(HtmlTextWriter writer)
    {
      EnsureChildControls();
Megpróbálunk most e Label-nek értéket adni a String osztály Format függvényével, oly módon, hogy felhasználjuk a property-kben kapott értéket.
      try
      {
        l.Text = String.Format(formatString, number);
      }
Ha ez nem lenne sikeres, akkor teszünk még egy próbát, de most már Int típusú adattal. Erre például akkor lesz szükségünk, ha hexadecimális megjelenítést választjuk formázásnak. Mivel a Number property-nk Single típusú, így ez az érték nem konvertálható hexadecimálissá.
Ha ekkor is hiba történik, akkor rosszul lett megadva a FormatString property értéke és ez miatt nem formázható a szám.
      catch
      {
        l.Text = String.Format(formatString, Convert.ToInt32(number));
      }
      base.Render(writer);    
    }
Nézzük most azt is, hogy miként köthető adat egy ilyen kontrolhoz.
Futtatunk egy egyszerű lekérdezést a Northwind példaadatbázis Products táblájára. Majd ennek eredményét egy ilyen kontrolon jelenítjük meg.
    private void Page_Load(object sender, System.EventArgs e)
    {
      SqlConnection connection = new SqlConnection(connStr);
      connection.Open();
      SqlCommand c = new SqlCommand("SELECT SUM(UnitPrice) FROM Products", connection);
      WebFormatLabelControl4.Number = Convert.ToSingle(c.ExecuteScalar());
      connection.Close();
    }