访问转发器中的项目
access items in repeater
我有一个转发器,我正在尝试访问其中的标签。这是我的方法:
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> <%#Eval("TeklifId") %><br />
<strong>Teklif Tarihi:</strong> <%#Eval("TeklifTarih") %><br />
<strong>Teklifi Hazırlayan:</strong> <%#Eval("Name") %> <%#Eval("Surname") %><br />
<strong>Firma Adı:</strong> <%#Eval("FirmaAdi") %><br />
<strong>Ürünler:</strong><br />
<%#Eval("TeklifSiparis") %>
<strong>Genel Toplam:</strong> <%#Eval("TeklifTutar") %>$<br />
<strong>Not:</strong><br />
<%#Eval("TeklifNot") %><br />
<strong>Teklif Durumu:</strong> <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>
我不确定你为什么明确调用不同的方法,但你正在做的事情可以在转发器控制的 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
只需在这个方法之外声明一个变量并在这个事件中递增它。
我有一个转发器,我正在尝试访问其中的标签。这是我的方法:
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> <%#Eval("TeklifId") %><br />
<strong>Teklif Tarihi:</strong> <%#Eval("TeklifTarih") %><br />
<strong>Teklifi Hazırlayan:</strong> <%#Eval("Name") %> <%#Eval("Surname") %><br />
<strong>Firma Adı:</strong> <%#Eval("FirmaAdi") %><br />
<strong>Ürünler:</strong><br />
<%#Eval("TeklifSiparis") %>
<strong>Genel Toplam:</strong> <%#Eval("TeklifTutar") %>$<br />
<strong>Not:</strong><br />
<%#Eval("TeklifNot") %><br />
<strong>Teklif Durumu:</strong> <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>
我不确定你为什么明确调用不同的方法,但你正在做的事情可以在转发器控制的 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
只需在这个方法之外声明一个变量并在这个事件中递增它。