当前位置:编程学习 > C#/ASP.NET >>

内嵌的repeater,绑定DataTable,显示“未将对象引用设置到对象的实例”

前台为repeater嵌套。



public class weibo
{
public  DataTable weibostart() 
{
        SqlConnection Conn = new SqlConnection("server=.;uid=sa;pwd=123456;database=webquest;");

        Conn.Open();

        SqlDataAdapter Da1 = new SqlDataAdapter("Select tID,tcont,ttime,uName,face from wq_twitter inner join wq_user on wq_twitter.uID = wq_user.uID order by tID desc", Conn);
 
        DataTable dt1 = new DataTable();
        Da1.Fill(dt1);  
       
        Conn.Close();
        return dt1;
}


   public DataTable weibocomm(int tt){

       SqlConnection Conn = new SqlConnection("server=.;uid=sa;pwd=123456;database=webquest;");
       Conn.Open();

       SqlCommand com = new SqlCommand("Select ccont,ctime,face,uname from wq_chat inner join wq_user on wq_chat.uID = wq_user.uID where tID=" + tt + "order by cID desc", Conn);
      
       SqlDataReader dr = com.ExecuteReader();

       if (dr.Read())
       {
           SqlDataAdapter da2 = new SqlDataAdapter(com.CommandText, Conn);
           Conn.Close();    
           DataTable dt2 = new DataTable();        

           da2.Fill(dt2);

           return dt2;

       }

       else {
           Conn.Close();
           return null;
       }
 
    
    }






 protected void Page_Load(object sender, EventArgs e)
    {
        Session["uid"] = 1;
        if (!IsPostBack)
        {
            RpBind();
        }

    }

    private void RpBind()
    {//weibo() 返回一个datatable 
        weibo wb = new weibo(); 
        this.Repeater1.DataSource = wb.weibostart(); 
        this.Repeater1.DataBind();
       
    }
    protected void Repeater1_ItemDataBound1(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
    {
       
        //判断里层repeater处于外层repeater的哪个位置( AlternatingItemTemplate,FooterTemplate,

        //HeaderTemplate,,ItemTemplate,SeparatorTemplate)
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Repeater rep = e.Item.FindControl("Repeater2") as Repeater;//找到里层的repeater对象
            DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分类Repeater关联的数据项 
            int tid = Convert.ToInt32(rowv["tID"]); //获取填充子类的id 
            // int tid = ((Catalog)e.Item.DataItem).tID; 
            
            weibo wb = new weibo();  
            rep.DataSource = wb.weibocomm(tid);  // 断点调试到这里出错!!!
            rep.DataBind();
        }
    }



--------------------编程问答-------------------- 解决啦~ 是我外面的repeater多加了一对<ItemTemplate></ItemTemplate>标签.去掉就可以了。 --------------------编程问答-------------------- 本来就是在第一个Repeater的ItemTemplate里放置第二个Repeater,然后在第一个Repeater的ItemDataBound事件中进行绑定的。

能自己找到解决办法最好,下次肯定记得了。 --------------------编程问答--------------------
引用 2 楼 taomanman 的回复:
本来就是在第一个Repeater的ItemTemplate里放置第二个Repeater,然后在第一个Repeater的ItemDataBound事件中进行绑定的。

能自己找到解决办法最好,下次肯定记得了。


恩恩~ 我粗心,第一个Repeater加了一个有内容的ItemTemplate以后,不小心又加了一个空的ItemTemplate【本来是要加  <SeparatorTemplate>的】,还是谢谢你啦~
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,