2011-07-28 1 views
0

headertemplateで 'HyperlinkID1'コントロールにアクセスするにはどうすればいいですか? 私は以下のような値を変更したいが、それはリピータヘッダーテンプレート内のハイパーリンクサーバーコントロールにアクセス

if (!IsPostBack) 
{ 
    HyperlinkID1.ImageUrl = "asc.jpg";//change image 
} 
else 
{ 
    HyperlinkID1.ImageUrl = "asc.jpg";//change image 
} 

    <%@ Page Language="C#" %> 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title></title> 
    </head> 
    <script language="C#" runat="server"> 
     public class PositionData 
     { 
      private string name; 
      private string ticker; 
      public PositionData(string name, string ticker) 
      { 
       this.name = name; 
       this.ticker = ticker; 
      } 
      public string Name 
      { 
       get 
       { 
        return name; 
       } 
      } 
      public string Ticker 
      { 
       get 
       { 
        return ticker; 
       } 
      } 
     } 

     protected void Page_Load(object sender, EventArgs e) 
     { 

      if (!IsPostBack) 
      { 
       HyperlinkID1.ImageUrl = "asc.jpg";//change image 

      } 
      else 
      { 
       HyperlinkID1.ImageUrl = "asc.jpg";//change image 
      } 


      if (!IsPostBack) 
      { 
       ArrayList values = new ArrayList(); 

       values.Add(new PositionData("Microsoft", "Msft")); 
       values.Add(new PositionData("Intel", "Intc")); 
       values.Add(new PositionData("Dell", "Dell")); 

       Repeater1.DataSource = values; 
       Repeater1.DataBind(); 


      } 
     } 
    </script> 
    <body> 
     <form runat="server"> 
     <b>Repeater1:</b> 
     <asp:Repeater ID="Repeater1" runat="server"> 
      <HeaderTemplate> 
       <table border="1"> 
        <tr> 
         <td><b>Company</b> 
          <asp:HyperLink ID="HyperlinkID1" runat="server" ImageUrl="desc.jpg" NavigateUrl="nextpage.aspx">HyperLink</asp:HyperLink></td> 
         <td><b>Symbol</b></td> 
        </tr> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <tr> 
        <td><%# DataBinder.Eval(Container.DataItem, "Name") %> </td> 
        <td><%# DataBinder.Eval(Container.DataItem, "Ticker") %> </td> 
       </tr> 
      </ItemTemplate> 
      <FooterTemplate> 
       </table> 
      </FooterTemplate> 
     </asp:Repeater> 
     </form> 
    </body> 
    </html> 

答えて

1

コントロールが存在しない「名 『HyperlinkID1』は現在のコンテキスト内に存在しない」ことを言っておくので、私はコントロールにアクセスすることはできません。リピーターにリンクされたOnItemCreatedメソッドを宣言する必要があります。このメソッドでは、コントロール名のFindControlを実行し、この中に値を設定します。

ETA - コメントに応じて。

<asp:Repeater OnItemCreated="rptItemCreated" > 

. 
. 
. 

そして、あなたが定義された新しいメソッドを定義する必要があり、コード内:

protected void rptItemCreated(Object Sender, RepeaterItemEventArgs e) 
{ 

    if(e.Item.ItemType==ListItemType.Header) 
    { 
     HtmlAnchor HyperLinkID1=(HtmlAnchor)e.Item.FindControl("HyperLinkID1"); 
     HyperlinkID1.ImageUrl = IsPostBack?"asc.jpg":"asc.jpg; 
    } 
} 

注これはメモリから入力され、そのためいくつかの調整が必要な場合があります。また、私はあなたが持っていたコードを、簡略化された形式にしました。

+0

これを使用する方法の例を教えてもらえますか?この例はhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.onitemcreated.aspxは恐ろしいです。 –

+0

定義を追加するように更新されました。 HTH –

+0

ありがとう、これは良いです –

関連する問題