2012-02-23 5 views
1

メニューヘッダーとメニュー項目を印刷する2つのリピーターがあります。 は、彼らは次のようになります。リピーター内でテキストボックスを読み取る

<asp:Repeater ID="ParentRepeater" runat="server" OnItemDataBound="ParentRepeater_ItemDataBound"> 
     <ItemTemplate> 
      <h2> 
       <%#DataBinder.Eval(Container.DataItem, "typenavn") %></h2> 
      <asp:HiddenField ID="HiddenField1" Value='<%# Eval("id") %>' runat="server" /> 
      <asp:Repeater ID="ChildRepeater" runat="server"> 
       <ItemTemplate> 
        <table> 
         <tr> 
          <td style="width: 200px"> 
           <%#DataBinder.Eval(Container.DataItem, "productName") %> 
          </td> 
          <td style="width: 200px"> 
           <%#DataBinder.Eval(Container.DataItem, "pris") %> 
          </td> 
          <td> 
           <asp:HiddenField ID="HiddenField2" runat="server" /> 
           <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> 
          </td> 
         </tr> 
        </table> 
       </ItemTemplate> 
      </asp:Repeater> 
     </ItemTemplate> 
    </asp:Repeater> 

それがすべて良いと楽しさと作品です。 しかし、私は別のテキストボックスを見つける必要があります。テキストボックスには、いくつもの異なるメニュー項目を書くことができます。 私は多くの異なるものを試してみました:

Control myControl1 = FindControl("MainContent_ParentRepeater_ChildRepeater_0_HB1_0"); 

そして、この:

foreach (RepeaterItem item in ParentRepeater.Items) 
{ 
    if (item.ItemType == ListItemType.Item) 
    { 
     TextBox txt = (TextBox)item.FindControl(("MainContent_ParentRepeater_ChildRepeater_0_HB1_0")) as TextBox; 
     // do something with "myTextBox.Text" 
     break; 
    } 
} 

そして、この:

foreach (RepeaterItem item1 in ParentRepeater.Items) 
{ 
    if (item1.ItemType == ListItemType.Item || item1.ItemType == ListItemType.AlternatingItem) 
    { 
     ChildRepeater = (Repeater)item1.FindControl("ChildRepeater"); 

     foreach (RepeaterItem item2 in ChildRepeater.Items) 
     { 
      if (item2.ItemType == ListItemType.Item || item2.ItemType == ListItemType.AlternatingItem) 
      { 
       TextBox txt = (TextBox)item2.FindControl(("ct100$MainContent$ParentRepeater$ct100$ChildRepeater$ct100$HB1")) as TextBox; // MainContent_ParentRepeater_ChildRepeater_0_HB 

      } 
     } 
    } 
    break; 
} 

とITの仕事のどれも。誰もそこに助けてくれますか?リピーターの中にテキストボックスを置くにはどうすればいいですか?

答えて

3

FindControl機能は、レンダリングされたクライアントコントロールではなく、サーバーコントロールのIDを使用する必要があります。 - 例えば、ParentRepeater.FindControl

foreach (RepeaterItem item1 in ParentRepeater.Items) 
{ 
    if (item1.ItemType == ListItemType.Item || item1.ItemType == ListItemType.AlternatingItem) 
    { 
     ChildRepeater = (Repeater)item1.FindControl("ChildRepeater"); 

     foreach (RepeaterItem item2 in ChildRepeater.Items) 
     { 
      if (item2.ItemType == ListItemType.Item || item2.ItemType == ListItemType.AlternatingItem) 
      { 
       TextBox txt = (TextBox)item2.FindControl(("TextBox1")) as TextBox; 
      } 
     } 
    } 
} 
1

まず、あなたは内の制御を見つけたいリピーター上にFindControlを使用する必要があります:あなたのコードを調整するには

var txt = item.FindControl("TextBox1") as TextBox; 
if (txt != null) 
{ 
    // found it! 
} 

:あなたはこれを行うことができるはず( "controlName") - this.FindControl()とは対照的です。

第2に、別の獣であるクライアントIDではなく、コントロールのIDを使用する必要があります。

関連する問題