F-ES Sitecore
Вам нужно войти в правильное мышление для разработки веб-форм. Вместо того чтобы добавлять логику на страницу aspx, вы просто добавляете элементы управления и используете код для управления этими элементами управления. Поэтому я бы добавил оба элемента управления LinkButton, но установил их видимость в false;
<asp:Repeater ID="MyRepeater" runat="server">
<ItemTemplate>
<asp:LinkButton ID="lbtnAccept" CommandName="AcceptInterest" Visible="false" runat="server">ACCEPT</asp:LinkButton>   
<asp:LinkButton ID="lbtnReject" CommandName="RejectInterest" Visible="false" runat="server">REJECT</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
Затем используйте событие ItemDataBound на странице code-behind, чтобы решить, когда будут показаны элементы управления
protected void Page_Load(object sender, EventArgs e)
{
List<MyData> data = new List<MyData> { new MyData { InterestStatus = "ABC" }, new MyData { InterestStatus="Pending" } };
MyRepeater.DataSource = data;
MyRepeater.ItemDataBound += MyRepeater_ItemDataBound;
MyRepeater.DataBind();
}
protected void MyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
MyData rowData = (MyData)e.Item.DataItem;
if (rowData.InterestStatus == "Pending")
{
LinkButton lbtnAccept = (LinkButton)e.Item.FindControl("lbtnAccept");
LinkButton lbtnReject = (LinkButton)e.Item.FindControl("lbtnReject");
lbtnAccept.Visible = true;
lbtnReject.Visible = true;
}
}
}
Вы также можете использовать это событие для заполнения элементов управления, если их данные нуждаются в какой-либо логике для установки.
Если вы используете DataTable, то код будет выглядеть следующим образом
protected void Page_Load(object sender, EventArgs e)
{
DataTable data = new DataTable();
data.Columns.Add("ID", typeof(int));
data.Columns.Add("Name", typeof(string));
data.Columns.Add("InterestStatus", typeof(string));
data.Rows.Add(1, "Joe", "Approved");
data.Rows.Add(2, "Dave", "Pending");
MyRepeater.DataSource = data;
MyRepeater.ItemDataBound += MyRepeater_ItemDataBound;
MyRepeater.DataBind();
}
protected void MyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// The ItemDataBound event is called once for each "template" in the repeater
// So it is called when binding the header, the footer and the items
// We're only interesting when it is binding the items so we use this if
// to make sure our code only runs when it is something in the ItemTemplate that
// is being bound. Rather than there being a single type for item there are two,
// Item and AlternatingItem, this is incase what what to do something different
// for alternative items, ie even and odd rows, such as have different background
// colours etc.
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
// The item of data being bound to the item is in e.Item.DataItem so we have
// to cast it to its proper type in order to use it. If you are binding to a DataTable
// then this is DataRowView and it represents the data in that individual row
DataRowView rowData = (DataRowView)e.Item.DataItem;
// We access the fields of rowData by putting the fieldname in square brackets
// again we need to cast to the proper type
if ((string)rowData["InterestStatus"] == "Pending")
{
LinkButton lbtnAccept = (LinkButton)e.Item.FindControl("lbtnAccept");
LinkButton lbtnReject = (LinkButton)e.Item.FindControl("lbtnReject");
lbtnAccept.Visible = true;
lbtnReject.Visible = true;
}
}
}