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

감사합니다 많이! 정말 쉽지 :) –

관련 문제