后台用实现repeater的<AlternatingItemTemplate>间隔色功能
代码网友给的,如下:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
int i = e.Item.ItemIndex % 2;
if (i == 0)
{
//trOrgInfo是repeater的名字
((HtmlTableRow)e.Item.FindControl("trOrgInfo")).BgColor = "#ffffff"; //此处报错
}
else
{
((HtmlTableRow)e.Item.FindControl("trOrgInfo")).BgColor = "#f9f9f9";
} }
}
运行总是跑不起来,一到赋颜色那就报"未将对象引用设置到对象的实例"的错
哪位帮看看怎么改
代码网友给的,如下:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
int i = e.Item.ItemIndex % 2;
if (i == 0)
{
//trOrgInfo是repeater的名字
((HtmlTableRow)e.Item.FindControl("trOrgInfo")).BgColor = "#ffffff"; //此处报错
}
else
{
((HtmlTableRow)e.Item.FindControl("trOrgInfo")).BgColor = "#f9f9f9";
} }
}
运行总是跑不起来,一到赋颜色那就报"未将对象引用设置到对象的实例"的错
哪位帮看看怎么改
未将对象引用设置到对象的实例
这个问题 其实很好解决 调试 卡那个null 就行了
if(row!=null){
row.BgColor = "#ffffff";
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
int i = e.Item.ItemIndex % 2;
HtmlTableRow htmlTR = (HtmlTableRow)e.Item.FindControl("trOrgInfo");
if(htmlTR!=null)
{
if (i == 0)
{
//trOrgInfo是repeater的名字
((HtmlTableRow)e.Item.FindControl("trOrgInfo")).BgColor = "#ffffff";
}
else
{
((HtmlTableRow)e.Item.FindControl("trOrgInfo")).BgColor = "#f9f9f9";
}
}
}
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
int i = e.Item.ItemIndex % 2;
HtmlTableRow htmlTR = (HtmlTableRow)e.Item.FindControl("trOrgInfo");
if(htmlTR!=null)
{
if (i == 0)
{
//trOrgInfo是repeater的名字
htmlTR.BgColor = "#ffffff";
}
else
{
htmlTR.BgColor = "#f9f9f9";
}
}
}
}
这是怎么回事啊!
<HeaderTemplate><table width="100%" border="0" align="center"><tr></HeaderTemplate>
<ItemTemplate>
<td>
<a href="../Book/Bookjdshow.aspx?lbid= <%# Eval("ProductId")%>&cs=<%# Eval("MAIN_TYPE_ID")%>" style="color: black;font-weight: bold; font-size:14px;" ><%# Eval("TYPE_NAME")%> </a>
<br />
<asp:Datalist runat="server" ID="Datalist2" RepeatDirection="Horizontal" RepeatColumns="3">
<ItemTemplate>
<a href="../Book/Bookjdshow.aspx?lbid= <%# Eval("ProductId") %>&cs=0" style="font-size:12px;">
<%# Eval("TYPE_NAME")%></a>
</ItemTemplate>
<FooterTemplate><a href="#" style="font-size:12px;">更多>></a></FooterTemplate>
</asp:Datalist>
</td>
</ItemTemplate>
<FooterTemplate></tr></table></FooterTemplate>
</asp:Repeater>
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//实力化Repeater2
DataList rep = e.Item.FindControl("Datalist2") as DataList;
//实例化Repeater1的行
DataRowView rowv = (DataRowView)e.Item.DataItem;
//取Repeater1行值
string mainID = rowv["MAIN_TYPE_ID"].ToString(); if (mainID != "")
{
//绑定Repeater2数据
BLLProduct exm = new BLLProduct();
DataTable dt = exm.selectIndexSub(mainID);//获取从数据。
if (dt != null)
{
rep.DataSource = dt;
rep.DataBind();
}
}
int j = e.Item.ItemIndex % 2;
HtmlTableRow htmlTR = (HtmlTableRow)e.Item.FindControl("Repeater1");
if (htmlTR != null)//<---if内未执行到
{ if (j == 0)
{ htmlTR.BgColor = "#c5e4ff"; }
}
}
这是完整代码,因为我猜想可能确实是没找到控件repeater1
给td赋Id值?
我试过了 貌似不行
到底怎么才能取到htmlTR啊!~~
<tr id="trOrgInfo" runat="server"></tr>
id="trOrgInfo" runat="server"就报错 说什么不能跨模板
其他的tr在C# Code里,protected int i = 0;
//repeater分2列显示
if (i % 2 == 0 && i > 0)
{
e.Item.Controls.Add(new LiteralControl("</tr><tr>"));
}
i++;
protected int i = 0;
//repeater分2列显示
if (i % 2 == 0 && i > 0)
{
if(i%4==0){
e.Item.Controls.Add(new LiteralControl("</tr><tr style='background-color:#ffffff'>"));
}else{
e.Item.Controls.Add(new LiteralControl("</tr><tr style='background-color:#f9f9f9'>"));
}
}
i++;
没试过 猜的