asp: Repeater - Wie machen „StringEnumerator“ bewegen zum nächsten Artikel in „ItemDataBound“?

StackOverflow https://stackoverflow.com/questions/1022958

Frage

Hier ist die Momentaufnahme der Repeater-Code. Ich habe Probleme mit allen Werten Geting. Im Ergebnis meiner "Repeater" druckt nur das erste Element in der Sammlung.

        <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>

Und hier der Code hinter, wo ich will lesen Index in der Sammlung ändern. AdminsEnumerator.MoveNext(); funktioniert nicht wie ich erwartet hatte. Hinzufügen etwas wie int t; i++; StringCollection[i] ist ärgerlich. Gibt es einfache Lösungen?

    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;
        }
    }
War es hilfreich?

Lösung

Der Code würde nicht funktionieren, weil Sie für jedes Element einen neuen Enumerator werden erhalten, die Databound ist und am Anfang beginnen zu müssen. Versuchen Sie stattdessen:

Repeater ItemTemplate:

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

-Code (Page_Load):

StringCollection administrators = new StringCollection();
administrators.AddRange(new string[] { "Bob", "Bill", "Frank" });
repeatAdministrators.DataSource = administrators;            
repeatAdministrators.DataBind();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top