آسيا والمحيط الهادئ: مكرر - كيفية جعل "StringEnumerator" الانتقال إلى البند التالي في "ItemDataBound"؟

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

سؤال

وهنا لقطة من التعليمات البرمجية مكرر. لدي مشاكل مع غيتينغ كل القيم. في بلدي نتيجة يطبع "مكرر" فقط العنصر الأول في المجموعة.

        <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;
        }
    }
هل كانت مفيدة؟

المحلول

وأن التعليمات البرمجية لا تعمل لأنك سوف يكون الحصول على العداد الجديد لكل عنصر هو ربط بيانات والبدء من جديد في البداية. جرب هذا بدلا من ذلك:

ومكرر 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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top