Avatar billede gulbaek Nybegynder
25. juni 2006 - 18:51 Der er 7 kommentarer og
1 løsning

asp:Repeater ItemTemplate som code behind hvordan?

Hejsa, lige et hurtigt spørsmål er det muligt at definere et Repeater ItemTemplate fra ens code behind?

min nuværende løsning ser såldes ud
<asp:Repeater ID="rssRepeater" runat="server">
        <ItemTemplate>
            <li class="leftmenuitem">
                <a href='<%# DataBinder.Eval(Container.DataItem, "link") %>'><%# DataBinder.Eval(Container.DataItem, "title") %></a>
            </li>
        </ItemTemplate>
    </asp:Repeater>


Dog har jeg fundet udaf at man fra sin code behind kan kalde 
rssRepeater.ItemTemplate = "ens template"    men kan ikke umiddelbart finde udaf hvordan den skal udformes og kunne ej heller finde hjælp i dokumentationen, da de alle brugte min nuværende løsning.
Avatar billede driis Nybegynder
25. juni 2006 - 18:58 #1
Du skal lave en klasse der implementerer ITemplate. InstantiateIn metoden skal generere indholdet i den control, der sendes med som argument, ved at adde nye controls til dens ControlCollection (Controls).
http://msdn2.microsoft.com/en-us/library/system.web.ui.itemplate.aspx
Avatar billede driis Nybegynder
25. juni 2006 - 19:00 #2
I øvrigt er tanken med ITemplate at ASP .NET implementerer det i en klasse, når dine markup filer parses og compiles. Så du bør nok kun gøre det selv, hvis du har en god begrundelse for det.

Fra docs:
"Remarks

This interface is used by custom server controls, but never implemented by them. ASP.NET always implements it."
Avatar billede thrytter Nybegynder
25. juni 2006 - 19:25 #3
Hvis du gerne vil opbygge ItemPlate fra code-behind kan det sker sådan her (er ikke testet helt af)

Private Sub rssRepeater_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rssRepeater.ItemDataBound
  Dim sLink As String
  Dim sTitle As String

  Dim hl As HyperLink
  Dim ph As PlaceHolder

  Select Case e.Item.ItemType
    Case ListItemType.AlternatingItem, ListItemType.Item
   
    sLink = CType(e.Item.DataItem, DataRowView).Item("link").ToString
    sTitle = CType(e.Item.DataItem, DataRowView).Item("title").ToString

    hl = New HyperLink

    hl.ToolTip = sTitle
    hl.NavigateUrl = sLink
    hl.Text = sTitle

    ph = New PlaceHolder

    ph.Controls.Add(New LiteralControl("<li class=""leftmenuitem"">"))
    ph.Controls.Add(hl)
    ph.Controls.Add(New LiteralControl("</li>"))

    e.Item.Controls.Add(ph)
  End Select
End Sub
Avatar billede gulbaek Nybegynder
26. juni 2006 - 15:13 #4
thrytter, du skulle vel ikke vide hvordan den kode skal se ud hvis den var i C#, virker nemlig lidt omfattende, når man direkte i ens kode kan skrive rssRepeater.ItemTemplate =  det må vel være den metode der svare til ItemTemplate i ens html
Avatar billede thrytter Nybegynder
26. juni 2006 - 20:47 #5
Koden skulle se sådan her ud i C#

private void rptTest_ItemDataBound(object sender, RepeaterItemEventArgs e)
{           
  string sLink;
  string sTitle;

  HyperLink hl;
  PlaceHolder ph;
           
  if((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
  {                     
    sLink = ((DataRowView) e.Item.DataItem)["IntegerValue"].ToString();
    sTitle = ((DataRowView) e.Item.DataItem)["StringValue"].ToString();

    hl = new HyperLink();

    hl.ToolTip = sTitle;
    hl.NavigateUrl = sLink;
    hl.Text = sTitle;

    ph = new PlaceHolder();

    ph.Controls.Add(new LiteralControl("<li class=\"leftmenuitem\">"));
    ph.Controls.Add(hl);
    ph.Controls.Add(new LiteralControl("</li>"));

    e.Item.Controls.Add(ph);
  }
}

Syntes ikke at koden ser omfattende ud, og tror desværre ikke at det bliver nemmere med rssRepeater.ItemTemplate, selvom det umiddelbart ser sådan ud.
Avatar billede thrytter Nybegynder
26. juni 2006 - 20:50 #6
Glemte lige at lave et par ændringer

rptTest_ItemDataBound = rssRepeater

IntegerValue = link
StringValue = title
Avatar billede gulbaek Nybegynder
03. juli 2006 - 17:21 #7
Takker for hjælpen thrytter og beklager jeg ikke har svaret tilbage tidligere, men smider du lige et svar så du kan få lidt point :-)
Avatar billede thrytter Nybegynder
03. juli 2006 - 20:19 #8
Smider lige et svar.

Håber du kunne bruge koden til noget.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester