none
Kopie von Repeater mit allen Controls in den Templates? RRS feed

  • Frage

  • Hallo,

    ich habe eine Repeater Struktur mit 3 hierarchischen Ebenen. In jeder Ebene könnte eine weitere hierarchie Stufe kommen(Ich nenne Sie mal Detailstufe). Das ItemTemplate für die Detailstufe ist relativ groß. Darum wollte ich, um das ganze etwas übersichtlicher zu gestalten, den Code dezimieren. Ich hatte mir eigentlich gedacht einen Repeater samt ItemTemplate irgendwo in der Seite zu platzieren und auf Visible.False zu setzten. Dann würde ich zur DatenBindung abfragen ob es denn eine Detailstufe gibt, wenn ja dann Repeater der Detailstufe überladen und selbiges in das momentane Item kopieren.

    Das funktioniert soweit super. Leider scheint das mit der Kopie nicht so richtig hinzuhauen > Sprich ich kann nur eine Detailstufe zu gleichen Zeit anzeigen. Wenn ich auf ein anderes Element klicke verschwindet die Detailstufe des vorher ausgewählten Elementes und die des neuen wird gerendert.

    Also mit folgendem Code funktioniert das ganz nicht wirklich:

    Repeater repeaterNew = new Repeater();
    repeaterNew = repeaterTemplate;
    repeaterNew.DataSource = liste;
    repeaterNew.DataBind();
    e.Item.Controls.Add(repeaterNew);

    Wahrscheinlich mache ich keine Kopie sondern eine Referenz, oder? Obwohl ich ja eigentlich eine neue Instanz mit einer Referenz belege also eine Kopie, glaube ich.

    Mh jemand eine Idee wie das funktionieren könnte?

     

     

    Freitag, 28. Januar 2011 15:11

Antworten

  • Hi,
    Wahrscheinlich mache ich keine Kopie sondern eine Referenz, oder? Obwohl ich ja eigentlich eine neue Instanz mit einer Referenz belege also eine Kopie, glaube ich.

    Richtig erkannt. repeaterNew ist nur ein Verweis auf repeaterTemplate. Und 10 mal den obigen Code bedeutet dann 10 Verweise.

    Im Endeffekt müsstest Du ein DeepClone durchführen, was aber bei der von dir angegebenen Struktur nicht wirklich sinnvoll erscheint.

    Ich würde folgendes vorschlagen:

    Lager dein RepeaterTemplate in ein ASCX Control aus, erstell dort eine Methode SetRepeaterDataSource( ... ), welche dazu dient, "liste" entgegenzunehmen und an den Repeater zu binden.

    In deiner Webform kannst Du ein ASCX Control dann per CType( LoadControl( "~/pfad/zur/datei.ascx" ), <TypDesAscxControls> ) laden und dann die DataSource zuweisen. Das sollte eher funktionieren.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert Techtwebty Dienstag, 1. Februar 2011 09:24
    Freitag, 28. Januar 2011 22:52
    Moderator