后台用实现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"; 
            }         }
    }
运行总是跑不起来,一到赋颜色那就报"未将对象引用设置到对象的实例"的错
哪位帮看看怎么改

解决方案 »

  1.   

    應該是 HtmlTableRow 沒有實例化吧
      

  2.   

    e.Item.FindControl("trOrgInfo") 没找到这个控件吧
      

  3.   

    应该是这样的 
    未将对象引用设置到对象的实例
    这个问题 其实很好解决 调试 卡那个null 就行了
      

  4.   

    HtmlTableRow row=(HtmlTableRow)e.Item.FindControl("trOrgInfo");
    if(row!=null){
        row.BgColor = "#ffffff"; 

      

  5.   


    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"; 
                 } 
               }
            }
        }
      

  6.   


    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"; 
                 } 
               }
            }
        }
      

  7.   

    发现哪出问题了!!if(htmlTR!=null)到这没进去!!
    这是怎么回事啊!
      

  8.   

    <asp:Repeater runat="server" ID="Repeater1" OnItemDataBound="Repeater1_ItemDataBound">
        <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>&nbsp;&nbsp;
                                </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
      

  9.   

    在Repeater1_ItemDataBound内查询Repeater1肯定不行,字能查询其内部控件或表格,trOrgInfo为行id号,要设置
      

  10.   

    怎么设置捏?
    给td赋Id值?
    我试过了 貌似不行
    到底怎么才能取到htmlTR啊!~~
      

  11.   


    <tr id="trOrgInfo" runat="server"></tr>
      

  12.   

    问题是 我的tr在<HeaderTemplate>里 我一加
    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++;
      

  13.   


    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++;
    没试过 猜的
      

  14.   

    e.Item.FindControl("trOrgInfo") 返回null