asp:Repeater-“ StringEnumerator”の作り方“ ItemDataBound&#8221 ;?の次のアイテムに移動しますか?
-
06-07-2019 - |
質問
これはリピーターコードのスナップショットです。すべての値を取得するのに問題があります。結果として、私の「リピーター」コレクションの最初の要素のみを印刷します。
<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;
}
}
解決
データバインドされ、最初からやり直す各アイテムの新しい列挙子を取得するため、コードは機能しません。代わりにこれを試してください:
Repeater 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();
所属していません StackOverflow