2016-05-27 11 views
2

Ich habe schon seit einiger Zeit versucht, herauszufinden, wie dies zu tun ist, weil die ID der Image-Schaltfläche, die ich erstellt habe ('titanBtn'), nicht in meinem Code hinter der Datei erkannt wird. Das würde mir erlauben, einfach "titanBtn.ImageUrl =" zu schreiben, aber ach, der hinterstehende Code sagt, dass es nicht existiert.Angeben der Bildschaltflächen-Bild-URL im Code hinter der asp.net-Seite?

Alles, was ich mit diesem Code zu tun versuche, ist eine vom Db gelesene Zeichenfolge gibt den Dateinamen des Bildes (die entsprechenden Bilder nach dem Elementtyp jedes Objekt benannt sind), und setzt diese in einer verketteten String, der die ImageUrl angibt.

<asp:Repeater ID="titanRptr" runat="server"> 
    <ItemTemplate> 
     <table> 
      <tr class="tr1"> 
       <td><%# Eval("TitanName") %></td> 
       <td> 
        <asp:ImageButton ID="titanBtn" runat="server" Width="100px" Height="100px" OnClick="titanBtn_Click" /> 
       </td> 
       <td>Level: <%# Eval("char_lvl")%> 
        <br /> 
        Step: <%# Eval("step")%> 
        <br /> 

       </td> 
      </tr> 
     </table> 
    </ItemTemplate> 
</asp:Repeater> 

Code hinter

using (SqlCommand cmd2 = new SqlCommand("getElement", conn)) 
        { 
         cmd2.CommandType = CommandType.StoredProcedure; 
         cmd2.Parameters.AddWithValue("@uid", titanElement); 
         using (SqlDataAdapter sda = new SqlDataAdapter(cmd2)) 
         { 
          SqlDataReader reader; 
          conn.Open(); 
          reader = cmd2.ExecuteReader(); 
          while (reader.Read()) 
          { 

           titanImage = Convert.ToString(reader["Element"]); 
           titanBtn.ImageUrl = "images/" + titanImage+ ".gif"; //"The name 'titanBtn' does not exist in the current context" 
           titanRptr 

          } 
          conn.Close(); 
         } 
        } 

Antwort

1

Sie kann auf den ImageButton jedes Elements inzugreifenVeranstaltung:

protected void titanRptr_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    ImageButton titanBtn = e.Item.FindControl("titanBtn") as ImageButton; 
    ... 
} 

Wenn Sie jedoch die Element Daten direkt in der Datenquelle des Repeaters erhalten könnten, könnten Sie dies im Markup tun:

<asp:ImageButton ID="titanBtn" runat="server" ImageUrl='<%# "images/" + Eval("Element") + ".gif" %>' ... /> 
1

Ihr Image in einem Repeater ist so kann nicht mit ID erreicht werden.

Sie können jedoch FindControl verwenden, um diese Kontrolle zu erhalten, und es gibt (mindestens) zwei Möglichkeiten, wie Sie darüber gehen können.

Auf Ihrem Repeater können Sie ein Ereignis an ItemDataBound (<asp:Repeater ID="titanRptr" runat="server" OnItemDataBound="titanRptr_ItemDataBound">) anhängen und dann Aufgaben für jede Reihe des Repeaters ausführen, da es Daten gebunden ist. Zum Beispiel ...

protected virtual void titanRptr_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) 
    { 
     ImageButton titanBtn = (ImageButton)e.Item.FindControl("titanBtn"); 
     //etc etc 
     //get any values you need (eg) 
     int something = (int)DataBinder.Eval(e.Item.DataItem, "something"); 

Oder Sie Schleife durch den Repeater kann, nachdem er die Kontrolle und datengebundene jede Zeile zugreifen und finden, zum Beispiel ...

foreach (RepeaterItem row in titanRptr.Items) 
{ 
    ImageButton titanBtn = (ImageButton)row.FindControl("titanBtn"); 
    //etc etc 

} 
wurde