2009-07-15 13 views
1

Ich habe eine Steuerung namens Thumbviewer innerhalb Repeater. Ich möchte sein Imageurl in Code festlegen. Derzeit ist es in aspx getan, sich alsWie kann ich einen Verweis auf ein Steuerelement erhalten, das in einem Repeater erstellt wurde?

<asp:Repeater ID="Repeater1" runat="server" > 
        <ItemTemplate> 
         <span style="padding:2px 10px 2px 10px"> 

          <bri:ThumbViewer Id="Th1" runat="server" ImageUrl='<%# Eval("Name", "images/{0}") %>' Height="100px" Width="100px"/> 
         </span> 
        </ItemTemplate> 
       </asp:Repeater> 

Wie kann ich ImageUrl in Code?

Antwort

6
protected void rpter_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     ThumbViewControl control = e.Item.FindControl("Th1") as ThumbViewControl; 
     if (control != null) 
     { 
      control.ImageUrl = ""; 
     } 
    } 
} 

und auf der aspx

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="rpter_ItemDataBound" > 
        <ItemTemplate> 
         <span style="padding:2px 10px 2px 10px"> 

          <bri:ThumbViewer Id="Th1" runat="server" Height="100px" Width="100px"/> 
         </span> 
        </ItemTemplate> 
</asp:Repeater> 

ist, wie ich persönlich würde es tun.

Wenn Sie die Daten dafür erhalten möchten, glaube ich an diesem Punkt, dass e.Item.DataItem (oder etwas ähnliches) bekommen.

Cheers,

T

+0

schnappen! Fairplay für das Hinzufügen der Schecks für null. Das ist eine nützliche Übung, auch wenn Sie zu 100% die Kontrolle haben. – nialljsmith

+0

es wird effektiv prüfen, ob das Steuerelement dort ist, und wenn ein Steuerelement von dieser ID dort ist, das vom Typ "ThumbViewControl" oder was auch immer ist, so ist es eine Art von zwei Überprüfungen in einem. Ich liebe "wie" :) – tim

0

Sie müssen die Repeater finden und dann die Kontrollen durchschauen:

ich hier eine ähnliche Sache tun und ein Steuerelement in einen Platzhalter in einem Repeaters laden ..

 if (ResultRepeater != null && ResultRepeater.HasControls()) 
     { 
      foreach (Control oControl in ResultRepeater.Controls) 
      { 
       if (oControl != null && oControl is RepeaterItem) 
       { 
        PlaceHolder oSuggestMorePlaceholder = (PlaceHolder) oControl.FindControl("SuggestMorePlaceholder"); 

        if (oSuggestMorePlaceholder != null) 
        { 
         SuggestMoreTabbedControl oTabbedControl = (SuggestMoreTabbedControl) Page.LoadControl("controls/SuggestMoreControl.ascx"); 
         if (oTabbedControl != null) 
         { 
          oSuggestMorePlaceholder.Controls.Add(oTabbedControl); 
         } 
        } 
       } 
      } 
     } 
+1

+1 Dank für diese Lösung – waqasahmed

+0

Geck, benötigen Sie – nialljsmith

+0

die Findcontrol() Methode zu überprüfen, ist nicht Findcontrol() rekursiv? Art von teuer, wenn es ist. Bessere Verwendung in einer der unten vorgeschlagenen onitemdatabound Event-Lösungen. – Phil

1

Ich würde empfehlen, Sie verwenden das Repeater ItemDataBound-Ereignis hier. Hier ein Beispiel von how um es zu benutzen.

2

Ihr Repeater hat ein onitemdatabound-Ereignis.

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound"></asp:Repeater> 

In Ihrem Code hinter Ihnen ein Event-Handler aufgerufen

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    // ensure that we only look in the item template for our control 
    if( e.Item.ItemType == ListItemType.Item) 
    { 
     ThumbViewer tv = (ThumbViewer)e.Item.FindControl("Th1"); 
     tv.ImageUrl = "images/"+((<The object type you are binding>)e.Item.DataItem).Name; 
    } 
} 

dies die orthodoxe Weise den Zugriff auf Daten an einen Repeater gebunden zu sein. IMHO

HTH

+0

Nach Code ich aktualisiert, was ich an Stelle des Objekttyps schreiben muss, die Sie binden.Pls Hilfe – user42348

+0

Nur um klar zu sein, hat das Objekt, das an den Repeater gebunden wird, eine Name-Eigenschaft. Wenn du den e. Item.DataItem Objekt auf den gewünschten Typ, sollte es in etwa so aussehen: MyType myCoolType = (MyType) e.Item.DataItem; das ist der grundlegende Weg. aber um diesen Code zu kürzen, können Sie schreiben tv.ImageUrl = ((MyType) e.Item.DataItem) .Name; – nialljsmith

Verwandte Themen