2016-05-27 5 views
2

私が作成した画像ボタンのID( 'titanBtn')は、自分のコードビハインドファイルで認識されないため、しばらくの間、これを行う方法を解明しようとしています。私は単純に 'titanBtn.ImageUrl ='と書くことができますが、コードビハインドは存在しないと言います。asp.netページのコードビハインドのイメージボタンのイメージURLを指定しますか?

私はこのコードでしようとしています。画像のファイル名を指定(適切な画像は、各オブジェクトの要素タイプにちなんで命名された)、及びIMAGEURLを指定連結した文字列でこれを置く。

<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> 

コード

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(); 
         } 
        } 

答えて

1

後ろあなたの各アイテムのImageButtonにアクセスできますイベント:あなたはリピーターのデータソースに直接Elementデータを取得することができれば

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

しかし、あなたがマークアップでこれを行うことができます:

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

あなたのImageButtonはとてもリピーターの内部にありますIDでアクセスすることはできません。

ただし、FindControlを使用してこのコントロールを取得できます。これについては少なくとも2通りの方法があります。

リピーターでは、ItemDataBound(<asp:Repeater ID="titanRptr" runat="server" OnItemDataBound="titanRptr_ItemDataBound">)にイベントをアタッチして、リピーターの各行に対してデータバインド時にタスクを実行できます。たとえば...

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"); 

それとも、リピーターをループそれはデータバインドと制御を各行にアクセスして見つけることができますされた後に、例えば...

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

} 
関連する問題