Asp elem táblázatban code behind-ból

Asp elem táblázatban code behind-ból
2011-11-01T13:33:40+01:00
2011-11-04T13:11:11+01:00
2022-11-23T14:05:34+01:00
LajGo
Sziasztok!

Ha pl: egy sakktábla bizonyos mezőibe kellene, hogy elhelyezzek 1-1 <asp:Button ID="Button1" runat="server" Text="Button" /> gombot, azt ti hogy csinálnátok ASP.NET c#-ban?

Egy stringbe felépítettem a table html kontrolt, de a <td>elemei közé nem rakhatom be a code behind-ba az <asp: ... elemet, mert a böngésző nem értelmezi a szerver oldali kódot.

(Ezt a stringet hozzáadtam egy Literal Text mezőjéhez, ami szépen ki is rajzolja a cellákat)
Mutasd a teljes hozzászólást!
Szervusz!

Az alapján amit leírtál, úgy látom elég egyszerű működés a cél, ami egy egyszerű és tipikus data-binding esetet vet fel.

Itt azonban gondot jelenthet, hogy nem tudom az ASP-nek milyen verziójával dolgozol. 2-es től felfele ismerem a keretrendszert, a korábbival meg rémálmaimban se találkozzam...

Szóval sokféle megoldás létezik, amik egyenértékűek és tetszés szerint válogathatsz. Én egyet felvázolok neked, és elindítlak merre keresgélj, most ennél többet nem tehetek, mert közben a munkámra kell/kellene koncentrálnom.

Ha jól láttam dataset-et emlegettél. Ezek szerint ez nem teljesen ismeretlen számodra, ezért vegyük át röviden.
Solution Explorer -> Add -> New Item a data fül alatt lesz a dataset. Dataset szerkesztő felületén jobb klikk -> add -> table adapter. Szépen végigszaladsz a varázslón, és már van is egy mappelt table adaptered egy kanyi kód írása nélkül. Ezt a dataset-et elérheted kódból is, erősen típusosan hívhatsz le adatokat, de ezt akár megint csak nuku kód írása nélkül is megoldhatod. Fogd szépen az oldalad és hajíts rá egy gridview-t és egy objectdatasource-ot. Az objectdatasource felső sarkában kattints a nyilacskára és configure datasource, állítsd be a tableadapter-ed select-jét. Majd a gridview-on hasonlóképpen a nyilacska, majdállítsd be a datasource-ot. Hoppá! Automatikusan legenerálta neked a megfelelő oszlopokat! Ráadásul még mindig nem írtunk kódot! De hogy lesz ott gombunk? Hát először is, ha egy hivatkozásra irányítasz át ne gombot használj, hanem linket (anchor). Van is azt hiszem ilyen, hogy link field, de átkonvertálhatod templatefield-re is és akkor a sablont úgy piszkálod ahogy akarod, a megfelelő adatot pedig egyirányú kapcsolat esetén az Eval, kétirányú kapcsolat esetén a Bind kifejezésekkel érheted el.
Nos, ennyi "röviden" egy tipikus eset, ami annyira tipikus, hogy microsoft bácsi elintézte nekünk, hogy konkrét kódolás nélkül intézhessük a dolgunk.
Ez egy nagyon tág témakör, borzasztóan sok tudnivalóval, és lehetőséggel. Jobb ha magad nézel utána, hogy megtalálhasd a neked megfelelőt.
Amikre rákereshetsz: ado .net; data binding; dataset; table adapter; Bind; Eval; System.Data.SqlClient; System.Data.Common; System.Data.Common.DbProviderFactories; (.NET 3,5ésfölfele) Entity Framework (annyira ezt nem ajánlanám), LINQ, LINQ to SQL
és még sorolhatnám...

Sajnos ennél többet nem tudok most segíteni, tényleg borzasztóan tág témakör.

Üdv!
Mutasd a teljes hozzászólást!

  • Először talán úgy próbálnám meg, hogy a táblát amit csináltál azt nem stringbe, hanem egy szerver oldali táblába próbálnám meg összerakni.

    aspx/ascx:
    <table runat="server" id="table1"></table>

    És codebehindba meg felvenném neki a
    TableRow és TableCell-eket benne a gombbal.

    TableRow
    Mutasd a teljes hozzászólást!
  • Szervusz!

    Nem tudom igazán hol kezdjem, nem tudom mennyire vagy képben az ASP.NET-el. Remélem nem foglak untatni. Szóval az ASP oldal gyakorlatilag egy sablon amit a keretrendszer értelmez. A különbség a sima html kód és a szerver oldali control között a "runat" attribútumban rejlik. Onnantól kezdve, hogy egy element-et felruházol runat="server" attribútummal, szerveroldali control-ként elérheted codebehind-ból. Akkor mi a különbség a <table runat="server" id="table1"></table> és az <asp:Table runat="server" id="table1"></asp:Table> között? A típus. Az előbbi System.Web.UI.HtmlControls.HtmlTable típusú objektumként fog létrejönni, míg az utóbbi System.Web.UI.WebControls.Table típusú lesz. Amikor az oldal az életciklusának utolsó előtti fázisába ér, akkor a keretrendszer a sima html részt változatlanul hagyva, a controlokat pedig render-elve hozza létre a végleges markup-ot. Ígytörténik, hogy végül az <asp:Table vezérlőből is <table element lesz. Na ennyit a meséről. Amit te csináltál az az, hogy egy literalba szöveget raktál, amit page render-nél framework a literal helyére írt. Ennyi, az ott csak szöveg, de mivel a literal tartalma kódolatlanul kerül az oldalra, lehetséges, hogy a browser html markup-ként értelmezze. Ha jól értem, dinamikusan szeretnél létrehozni tábla, és gomb vezérlőket és az oldalhoz adni öket. Ezt nem ajánlanám neked. A kliens alkalmazás fejlesztésnél a dinamikus vezérlők hozzáadása gyerek játék, hiszen a vezérlők jelen vannak a memóriába, amíg a garbage collector fel nem szabadítja, az meg ugye csak akkor történik, hamár nincs rá szükségünk. ASP.NET esetében azonban más a helyzet. A szerveren az weboldalunk programként fut, de az oldalaknak kötött életciklusuk van. Egy request beérkezésekor a keretrendszer példányosítja az oldalt, futtaja, rendereli, majd leküldi az eredményt a browsernek, ezután azonban az oldalt felszabadítja. Miért is? Na ez az amit nagyon hosszú lenne ide leírni. Viszont azt egyszerübb leírni, hogy ebből mikövetkezik. Amikor egy ASP oldalhoz dinamikus control-t adsz, azt minden egyes postback-nél újra és újra létre kell hoznod, ugyan azzal a névvel és ugyan azon a helyen, különben a dinamikus control klienstől visszaérkező adataival nem fog tudnimit kezdeni a rendszer hiszen sablon alapján ilyen objektum nem létezik. Ez az eventekre is vonatkozik! Egy dinamikus gomb onclick-je nem fog végrehajtódni, ha nem hozod újra létre a gombot! Szóval amíg nem vagy jártas a web fejelsztésben, használj inkább statikusan elhelyezett vezérlőket. Nemis biztos, hogy egyáltalán szükség van rájuk ahhozamit elszeretnél érni, ha leírod nekünk mi lenne a cél, talán tudunk segíteni, milyen irányban indulj el.

    Remélem hasznodra lehettem.

    Üdv!
    Mutasd a teljes hozzászólást!
  • Szia!

    Időpont foglalást kell csináljak, ami megjeleníti a hét napjai (fejléc) alatt, hogy mikor van hozzá szabad időpont.

    Ehhez kell a table, hogy ha a dataset helyén 1 van, akkor gombot jelenítek meg, ha 0, akkor üres marad a cella.

    A gomb postbackurl tulajdonságában meg megadom futási időben, hogy melyik oldalra irányítson, és milyen paraméterekkel (nap és időpont).

    A foglalást megerősítő oldal meg fogadja ezen paramétereket.
    Mutasd a teljes hozzászólást!
  • Szervusz!

    Az alapján amit leírtál, úgy látom elég egyszerű működés a cél, ami egy egyszerű és tipikus data-binding esetet vet fel.

    Itt azonban gondot jelenthet, hogy nem tudom az ASP-nek milyen verziójával dolgozol. 2-es től felfele ismerem a keretrendszert, a korábbival meg rémálmaimban se találkozzam...

    Szóval sokféle megoldás létezik, amik egyenértékűek és tetszés szerint válogathatsz. Én egyet felvázolok neked, és elindítlak merre keresgélj, most ennél többet nem tehetek, mert közben a munkámra kell/kellene koncentrálnom.

    Ha jól láttam dataset-et emlegettél. Ezek szerint ez nem teljesen ismeretlen számodra, ezért vegyük át röviden.
    Solution Explorer -> Add -> New Item a data fül alatt lesz a dataset. Dataset szerkesztő felületén jobb klikk -> add -> table adapter. Szépen végigszaladsz a varázslón, és már van is egy mappelt table adaptered egy kanyi kód írása nélkül. Ezt a dataset-et elérheted kódból is, erősen típusosan hívhatsz le adatokat, de ezt akár megint csak nuku kód írása nélkül is megoldhatod. Fogd szépen az oldalad és hajíts rá egy gridview-t és egy objectdatasource-ot. Az objectdatasource felső sarkában kattints a nyilacskára és configure datasource, állítsd be a tableadapter-ed select-jét. Majd a gridview-on hasonlóképpen a nyilacska, majdállítsd be a datasource-ot. Hoppá! Automatikusan legenerálta neked a megfelelő oszlopokat! Ráadásul még mindig nem írtunk kódot! De hogy lesz ott gombunk? Hát először is, ha egy hivatkozásra irányítasz át ne gombot használj, hanem linket (anchor). Van is azt hiszem ilyen, hogy link field, de átkonvertálhatod templatefield-re is és akkor a sablont úgy piszkálod ahogy akarod, a megfelelő adatot pedig egyirányú kapcsolat esetén az Eval, kétirányú kapcsolat esetén a Bind kifejezésekkel érheted el.
    Nos, ennyi "röviden" egy tipikus eset, ami annyira tipikus, hogy microsoft bácsi elintézte nekünk, hogy konkrét kódolás nélkül intézhessük a dolgunk.
    Ez egy nagyon tág témakör, borzasztóan sok tudnivalóval, és lehetőséggel. Jobb ha magad nézel utána, hogy megtalálhasd a neked megfelelőt.
    Amikre rákereshetsz: ado .net; data binding; dataset; table adapter; Bind; Eval; System.Data.SqlClient; System.Data.Common; System.Data.Common.DbProviderFactories; (.NET 3,5ésfölfele) Entity Framework (annyira ezt nem ajánlanám), LINQ, LINQ to SQL
    és még sorolhatnám...

    Sajnos ennél többet nem tudok most segíteni, tényleg borzasztóan tág témakör.

    Üdv!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd