2009-06-21 38 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

非常感謝!這很容易:) – 2009-06-21 10:51:14

相關問題