我有以下<asp:Repeater>
:
<asp:Repeater ID="repMenuParent" runat="server" DataSourceID="odsMenuParent" OnItemCommand="repMenuParent_OnItemCommand" OnItemDataBound="repMenuParent_OnItemDataBound" >
<ItemTemplate>
<asp:Button id="btnRepeaterParent" runat="server" SkinID="btnAgroquimicos" CssClass="celdasMenusDinamicas" Text='<%# Eval("NOMBRE") %>' CommandName='<%# Eval("NOMBRE") %>' />
</ItemTemplate>
</asp:Repeater>
当触发commandEvent时,我使用commandName和uniqueId:
建立会话protected void repMenuParent_OnItemCommand(object source, RepeaterCommandEventArgs e)
{
Session.Add("nombreSubMenuAgro", e.CommandName);
String id = e.Item.UniqueID;
Session.Add("souceId", id);
}
问题如下:我需要更改用户使用的转发器内的按钮的前景色。在beginnig中,所有按钮(转发器中的项目)都是灰色的。当有人被点击时,我需要将它的前景颜色改为红色(就像面包屑一样)。
我试图找到itemDataBound
中的项目并比较uniqueId但它不起作用,我不知道如何找到点击的特定项目来改变forecolor:
protected void repMenuParent_OnItemDataBound(object Sender, RepeaterItemEventArgs e)
{
String sessionID = "";
Button btnRepeater;
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
btnRepeater = (Button)e.Item.FindControl("btnRepeaterParent");
if (btnRepeater != null)
{
if(btnRepeater.UniqueID.Equals(sessionID))
{
btnRepeater.ForeColor = System.Drawing.Color.FromArgb(69, 187, 32);
}
}
}
}
我已经阅读了很多博客关于转发器的帖子并找到它的项目,但找不到任何解决了我的问题,可以帮助我吗?
答案 0 :(得分:2)
我认为这个问题最好通过Javascript解决,尽管我确实有一个服务器端解决方案。
命令事件对象有一个名为CommandSource的属性。这使您可以访问触发命令事件的按钮。
protected void repMenuParent_OnItemCommand(object source, RepeaterCommandEventArgs e)
{
Button btnRepeater=e.CommandSource;
btnRepeater.ForeColor = Drawing.Color.Red;
}
答案 1 :(得分:0)
如果您维护按下按钮的ID列表,则可以执行以下操作:
首先,更改转发器中的按钮以使用CommandArgument
而非 CommandName
。像这样:
<asp:Button id="btnRepeaterParent" ... CommandArgument='<%# Eval("NOMBRE") %>' />
创建用于访问ID列表的页面级属性。像这样:
public List<string> ClickedIds
{
get
{
if(Session("ClickedIds") == null)
Session("ClickedIds") = new List<string>();
return (List<string>)Session("ClickedIds");
}
}
单击转发器中的某个按钮时,请按照以下方式处理:
protected void repMenuParent_OnItemCommand(object source, RepeaterCommandEventArgs e)
{
this.ClickedIds.Add(e.CommandArgument);
}
现在,当您在代码隐藏中绑定转发器时,请检查每个按钮,如下所示:
protected void repMenuParent_OnItemDataBound(object Sender, RepeaterItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
//retrieve the id of the data item
//I am not sure of your data item structure, but it will be something to this effect
int nombre = e.Item.DataItem("NOMBRE");
if(this.ClickedIds.Contains(nombre))
{
((Button)e.Item.FindControl("btnRepeaterParent")).ForeColor = System.Drawing.Color.FromArgb(69, 187, 32);
}
}
}
<强>声明:强> 我还没有测试过这段代码。