Adatkötés tulajdonságokkal nem rendelkező típusok tömbjéhez (string[])

ASP.NET-ben listás adatok megjelenítésére bevett gyakorlat valamilyen adatmegjelenítő vézerlőhöz (Repeater, DataList, GridView, ListView, stb.) történő kötés. A dolog az ASP.NET 2.0 óta különösen egyszerű. A vezérlő DataSource tulajdonságának megadjuk a kötendő adatok listáját (valamilyen IEnumerable interfészű tárolót, például Osztaly[]), a vezérlőhöz tartozó megjelenítő sablonban pedig <%# Eval( "Tulajdonsag" ) %> bejegyzéssel jelöljük, hogy ezen a helyen a kötött adat aktuális példányának (például az osztaly[ i ]-nek) A "Tulajdonsag" nevű tulajdonsága legyen (ez esetben: osztaly[ i ].Tulajdonsag).

Az első problémával akkor szembesül az ember, amikor az adatforrás olyan típusokat tartalmaz, melyeknek nincsen semmilyen tulajdonságuk. A string[] példánál maradva: mit írhat az ember az <%# Eval( "NA_IDE_MI_JON" ) %> részbe? Ilyenkor két lehetőségünk van:

  1. Burkolóosztályt készítünk a kötendő osztályhoz: például csinálunk egy MyString osztályt, ami egyetlen stringet tartalmaz (ez a tényleges adat), és van egy "TheString" nevű propertyje. Ekkor a vezérlő adatforrásául megadható a MyString[], az eval részbe pedig ez írható: <%# Eval( "TheString" ) %>. Ez a módszer kicsit ágyúval-verébre, de működik.
  2. Tudjuk, hogy a <%#  %> részbe más is írható, nem csak Eval(), Bind(), XPath() és hasonlók, hanem bármi a jóízlés határain belül. Például az, hogy Container.DataItem. Ez egyébként a kötött felsorolt típus épp aktuális elemét jelenti. A string[] példánál maradva épp az aktuális sztringet. Ráadásul a <%#  %> közé bármilyen metódushívás is elhelyezhető (akár a kötött adaton, akár csak úgy, például egy random szám generálása). Ebből már elég jól lehet kombinálni.

Végül álljon itt a legegyszerűbb példa: string[] kötése és megjelenítése Repeaterben:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void btnOK_Click( object sender, EventArgs e )
    {
        this.repeater.DataBind();
    }
    
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Repeater ID="repeater" runat="server" DataSource='<%# this.txtSzoveg.Text.Split() %>'>
            <ItemTemplate> '<%# Container.DataItem %>' </ItemTemplate>
            <SeparatorTemplate> - </SeparatorTemplate>
        </asp:Repeater>
        <br />
    
        <asp:TextBox ID="txtSzoveg" runat="server" TextMode="MultiLine" Height="300px" Width="400px" />
        <br />
    
        <asp:Button ID="btnOK" runat="server" Text="OK" OnClick="btnOK_Click" />
    </form>
</body>
</html>

Az oldalon van egy szövegdoboz (txtSzoveg), egy gomb (btnOK) és egy Repeater (repeater). Beírok valamit a szövegdobozba, megnyomom a gombot és a repeater DataSource propertyjéhez hozzákötődik a szövegdoboz szövegének szóközönként feltördelt sztring-tömbje. Ezután a megjelenítő sablonban a '<%# Container.DataItem %>' rész idézőjelek között megjeleníti az épp aktuális sztringet. A <SeparatorTemplate> - </SeparatorTemplate> rész pedig mínusz jellel választja el őket egymástól.



Dávid Zoltán

Dávid Zoltán Mérnök Informatikusként végeztem a BME-n, jelenleg webfejlesztéssel és gépi tanulással foglalkozom.

2008.07.02. 16:54:59 | Permalink | Hozzászólások: 0 | Tárgyszavak: , ,


  • Visual Studio 2010 Help Library Manager

    Balássy György (MS RD, ASP.NET MVP, MCTS) Aki telepítette már a Visual Studio 2010 Beta 2-t, annak bizonyára feltűnt, hogy a telepítés végén lévő link, amivel az offline MSDN Library-t szoktuk telepíteni, nem kattintható. Most még csak disabled, de mire a VS 2010 RTM lesz, minden bizonnyal teljesen el fog tűnni ez a menüpont onnan. Tovább »
  • Dátum formátum állítás Windows Mobile-on

    Balássy György (MS RD, ASP.NET MVP, MCTS) Frissítettem a telefonom operációs rendszerét, és bár nem hivatalos és támogatott ROM verzióval, de végre sikerült átállnom Windows Mobile 6.1-re. Az angol operációs rendszeren az egyik első utam a Regional Settings ablakba vezetett, mert megpróbáltam átállítani a dátumok megjelenítését a magyar formátumra. Nem ment könnyen... Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások