2009-06-21 13 views
0

ここにリピータコードのスナップショットがあります。私はすべての価値を得ることに問題があります。結果として、私の "リピータ"はコレクションの最初の要素だけを出力します。asp:Repeater - "StringEnumerator"を "ItemDataBound"の次の項目に移動する方法

 <asp:Repeater ID="repeatAdministrators" OnItemDataBound="repeatAdministrators_ItemDataBound" runat="server"> 
      <HeaderTemplate> 
       <tr> 
        <td class="formLabel"> 
         Administrators: 
        </td> 
        <td class="formInputText"> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <asp:TextBox ID="txtAdministrators" runat="server" MaxLength="50" Enabled="False"></asp:TextBox><br /> 
      </ItemTemplate> 
      <FooterTemplate> 
       </td> </tr> 
       <tr> 
      </FooterTemplate> 
     </asp:Repeater> 

ここでは、コレクションのインデックスを変更するコードの背後にあるコードです。 AdminsEnumerator.MoveNext();が期待どおりに機能しません。 int t; i++; StringCollection[i]のようなものを追加するのは面倒です。より簡単なソリューションはありますか?

protected void repeatAdministrators_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      TextBox txtAdministrators = e.Item.FindControl("txtAdministrators") as TextBox; 
      StringEnumerator AdminsEnumerator = Computer.Administrators.GetEnumerator(); 

      AdminsEnumerator.MoveNext(); 
      txtAdministrators.Text = AdminsEnumerator.Current; 
     } 
    } 

答えて

2

データバインドされ、最初からやり直す項目ごとに新しい列挙子が追加されるため、コードが機能しません。代わりにこれを試してみてください:

リピータItemTemplateに:

<ItemTemplate> 
    <asp:TextBox ID="txtAdministrators" runat="server" Text="<%#Container.DataItem %>"></asp:TextBox> 
</ItemTemplate> 

コード(をPage_Load):

StringCollection administrators = new StringCollection(); 
administrators.AddRange(new string[] { "Bob", "Bill", "Frank" }); 
repeatAdministrators.DataSource = administrators;    
repeatAdministrators.DataBind(); 
+0

おかげでたくさん!それは本当に簡単です:) –

関連する問題