[ Shadowed @ 05.05.2008. 13:57 ] @
Ako imam ovako nesto:
Code:

dim q = from p in db.Persons select p.firstname, p.lastname
rptPersons.DataSource = q.tolist()
rptPersons.DataBind()

Kako u dogadjaju rptPersons_ItemDataBind da dobijem firstname i lastname iz e.Item.DataItem?
Ne mogu da koristim CType kad nemam u sta da konvertujem :)


Edit: izvinjavam se za mala/velika slova, pisao sam direktno u poruci, nije iz vs-a...
[ mmix @ 05.05.2008. 15:54 ] @
Ne mozes

Problem mozes da resis na dva nacina.

1. Direktno u ItemTemplate kroz DataBinder koji koristi refleksiju tako da moze da izdriluje u anonymous tip

Code:

    <asp:Repeater ID="rptPersons" runat="server">
        <ItemTemplate>
        <%# DataBinder.Eval(Container.DataItem, "lastname") %>, 
        <%# DataBinder.Eval(Container.DataItem, "firstname")%><br />
        </ItemTemplate>
    </asp:Repeater>


2. Tako sto u LINQu neces instancirati anonymous tipove vec svoje predefinisane klase

Code:


    public class Covek
    {
        public string firstname { get; set; }
        public string lastname { get; set; }
    }

...

            var q = from p in db.Persons select new Covek() {firstname = p.firstname, lastname = p.lastname};
            rptPersons.DataSource = q;
            rptPersons.DataBind();

onda u rptPersons_ItemDataBind mozes da castujes e.Item.DataItem u Covek i da pristupis rezultatu. Btw, ne treba ti .ToList() nad rezultatom, asp.net datasource moze biti IEnumerable tako da linq objekat mozes direktno da bindujes, cim asp.net evaluira enumerable izvrsice SQL skriptu.
[ mmix @ 05.05.2008. 16:02 ] @
I da, postoji i treca opcija ali ne verujem da ce ti se svideti jer nije "elegantna", al svejedno radi pa da je prikazem

Code:

        protected void rptPerson_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Type anon = e.Item.DataItem.GetType();
            string firstname = (string)anon.GetProperty("firstname").GetValue(e.Item.DataItem, null);
            string lastname = (string)anon.GetProperty("lastname").GetValue(e.Item.DataItem, null);
            // sta god sad hoces sa ovim...
        }

[ Shadowed @ 05.05.2008. 16:45 ] @
Za prve dve varijante sam znao, prvu ne volim bas da ubacujem inline.. iako sam ranije uglavnom tako radio, a drugu varijantu sam i iskoristio privremeno (ok, sad se ispostavilo da je za stalno) :)
Za trecu varijantu.. pa znam da moze tako, ali mi nije ni palo na pamet da toliko zapetljavam :)