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

相关问题