2011-12-08 11 views
3

私のコードビハインドファイルからaspリピーター内のaspラベルにアクセスしようとしています。ここでは、私がこれまでにやっていることです:コードの後ろのリピーターにあるコントロールにアクセスできない

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="LinqDataSource1" OnItemDataBound="outerFunction"> 
     <HeaderTemplate> 
      <h1>Questions And Answers</h1> 
     </HeaderTemplate> 

     <ItemTemplate> 
      <p style="background-color:Red; color:Yellow;"><%#Eval("QText") %> :::::::::</p> 
      <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# setQID(Eval("QID"))%>' /> 

      <asp:Label ID="pageLabel" runat="server" Text="Label"></asp:Label> 

      <asp:Repeater ID="Repeater1" runat="server" DataSourceID="LinqDataSource2"> 
       <HeaderTemplate> 

       </HeaderTemplate> 
       <ItemTemplate> 



        <%# (GetAnswer(Eval("AnsQID"))) != 1 ? (displayAnswer(Eval("AText"))) : ""%> 


       </ItemTemplate> 

       <FooterTemplate> 

       </FooterTemplate> 

      </asp:Repeater> 

      <span style="display:block; border-top:1px solid Gray;"></span> 
     </ItemTemplate> 
    </asp:Repeater> 

* は、ここで私は質問と回答を表示しようとしています*

public void outerFunction(object sender, RepeaterItemEventArgs e) 
    { 
     Label myLabel = (Label) e.Item.FindControl("pageLabel"); 
     myLabel.Text = "HELLO World"; 
    } 

の背後に私のコードです。すべての質問に対して複数の回答があります。だから、私は入れ子にされたリピータコントロールでそれを持っています。今のところ、私はちょうど例えば外側のリピータに "div"要素を持っていて、内側のリピータ内にあるすべての答えをその親divにバインドすると言うことができるかどうかを知る必要があります。

ありがとうございます!

+0

これは単なるアドバイスですが、私の意見では、コードの可読性がイベントハンドラに名前を付ける方が簡単です _ : 'Repeater1_ItemDataBound'。名前を読んで、それをすべて言う。 –

+0

ありがとう!私は次回そのことを念頭に置いておきます! –

答えて

8

あなたのコードは、あなたがしている行の種類をチェックされていないことを除いてよさそうだ:あなたは「PageLabelのを」が含まれていないヘッダーテンプレートを持っているので、あなたがnullを取得します

public void outerFunction(object sender, RepeaterItemEventArgs e) 
{ 
     if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem) 
     { 
     Label myLabel = (Label) e.Item.FindControl("pageLabel"); 
     myLabel.Text = "HELLO World"; 
     } 
} 
+0

ありがとう!これは仕事です!これは汎用のhtmlコントロールでも機能しますか? –

+0

@ShaneAdrianMuaz:はい、 'runat =" server "を汎用コントロールのマークアップに置いている限りはそうです。 – Icarus

1

をリピータのその部分がデータ結合されているときの参照エラー。

かのブロックにラベル部分を入れて:

if (e.Item.ItemType == ListItemType.Item) 
{ 
... 
} 

あなたはAlternatingItemTemplateを使用する場合は、あなたもそれを含めることになるでしょう:

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
    ... 
    } 
+0

おかげさまで大変感謝しています! –

0

をあなたが今やっている方法があります現在処理されている項目がヘッダーまたはフッターの場合、ラベルはItemTemplateになりますので、DataItemsでのみ使用できます。

public void outerFunction(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Label myLabel = (Label) e.Item.FindControl("pageLabel"); 
     myLabel.Text = "HELLO World"; 
    } 
} 
関連する問題