【问题标题】:access items in repeater访问中继器中的项目
【发布时间】:2016-03-22 12:21:49
【问题描述】:

我有一个中继器,我正在尝试访问其中的标签。这是我的方法:

protected void ButtonlarıTemizle()
    {
        int n = 0;
        foreach (RepeaterItem item in Repeater1.Items)
        {
            n++;
            Label lbl = item.FindControl("lblApproved") as Label;
            Button btn = item.FindControl("btnAssignApproved") as Button;
            if (lbl.Text.Equals("Satışa Dönmüştür"))
            {
                btn.Visible = false;
                lbl.ForeColor = System.Drawing.Color.Blue;
            }
        }
        Response.Write("<script lang='JavaScript'>alert('"+n+"');</script>");
    }

我可以访问中继器内部,但问题是:我无法访问中继器的最后一项。我放了那个'n'变量来控制我在foreach循环中转动的次数,我看到n总是给出-1的项目编号。例如,如果我在转发器中有 3 个项目,n 为 2,如果转发器中有 1 个项目,则 n 为 0。我在这里做错了什么?

编辑:我正在编写我的 .aspx 页面,因为它要求

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="EntityDataSourceTeklifler" OnItemCommand="Repeater1_ItemCommand">
                    <ItemTemplate>
                        <div class="panel panel-primary">
                            <div class="panel-body">
                                <strong>Teklif No.</strong>&nbsp;<%#Eval("TeklifId") %><br />
                                <strong>Teklif Tarihi:</strong>&nbsp;<%#Eval("TeklifTarih") %><br />
                                <strong>Teklifi Hazırlayan:</strong>&nbsp;<%#Eval("Name") %>&nbsp;<%#Eval("Surname") %><br />
                                <strong>Firma Adı:</strong>&nbsp;<%#Eval("FirmaAdi") %><br />
                                <strong>Ürünler:</strong><br />
                                <%#Eval("TeklifSiparis") %>
                                <strong>Genel Toplam:</strong>&nbsp;<%#Eval("TeklifTutar") %>$<br />
                                <strong>Not:</strong><br />
                                <%#Eval("TeklifNot") %><br />
                                <strong>Teklif Durumu:</strong>&nbsp;<asp:Label ForeColor="Red" ID="lblApproved" runat="server" Text='<%# CheckIfApproved(Convert.ToBoolean(Eval("Approved"))) %>'></asp:Label><br /><br />
                                <asp:Button ID="btnAssignApproved" runat="server" Text="Satışa Döndü Olarak İşaretle" CssClass="btn btn-primary" CommandName="Done" CommandArgument='<%# Eval("TeklifId") %>' />
                            </div>
                        </div>
                    </ItemTemplate>
                </asp:Repeater>

【问题讨论】:

  • 'n' 变量放在一边,为什么你认为你不能访问中继器中的最后一项?
  • 感谢您的回复。如您所见,我正在更改标签颜色和按钮可见性。除了最后一个@sr28,所有中继器项目都在变化
  • @KorayDurudogan - 你能显示标记代码吗? .aspx 页面?
  • 给你 :) @RahulSingh
  • 那么您是说最后一个中继器项目没有应用您期望的更改?

标签: c# asp.net repeater


【解决方案1】:

我不确定你为什么显式调用不同的方法,但是你正在做的事情可以在ItemDataBound转发器控制事件中轻松完成:-

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"

然后像这样处理它:-

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
   if (e.Item.ItemType == ListItemType.Item)
   {
       Label lbl = e.Item.FindControl("lblApproved") as Label;
       Button btn = e.Item.FindControl("btnAssignApproved") as Button;
       if (lbl.Text.Equals("Satışa Dönmüştür"))
       {
           btn.Visible = false;
           lbl.ForeColor = System.Drawing.Color.Blue;
       }
   }
}

请注意,无需对中继器项目进行任何循环。有界时,Repeater ItemDataBound 事件将为每个项目触发。此外,如果您想拥有一个 count,只需在此方法之外声明一个变量并在此事件中递增它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多