在itemdatabound上更改asp转发器内div的颜色

时间:2014-09-16 11:39:55

标签: c# asp.net repeater

我正在尝试在itemdatabound事件上更改转发器内div的颜色。 我尝试过使用itemdatabound中的面板,如此;

protected void rptLocations_ItemDataBound(object sender, RepeaterItemEventArgs e)

然后在里面

Panel cblock = e.Item.FindControl("pnlColour") as Panel;
cblock.Style.Add("background", rndColour);

但这会引发错误:

Object reference not set to an instance of an object. 
  Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

 Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

我宁愿使用一个专门用于面板的div。

有没有办法从itemdatabound事件中更改div的颜色?

提前致谢!

2 个答案:

答案 0 :(得分:0)

你有两个问题。第一,有几种方法可以为divPanel添加背景颜色。

pnlColour.BackColor = System.Drawing.Color.Green;
pnlColour.Style.Add("background-color", "green");

二,您的cblock变量很可能为空。通过检查ItemDataBound的类型,确保在cblock中只在您想要的时候搜索RepeaterItem。此示例检查RepeaterItemHeaderTemplateFooterTemplateItemTemplate中是否AlternatingItemTemplate

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
    Panel cblock = e.Item.FindControl("pnlColour") as Panel;
}

答案 1 :(得分:0)

我设法使用HTMLCONTROLS解决了这个问题

我使用HtmlGenericControl来设置样式属性。

((HtmlGenericControl)(e.Item.FindControl("divColour"))).Attributes["style"] += ("background:" + rndColour + ";)");

简单有效!