内嵌的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事件中进行绑定的。
能自己找到解决办法最好,下次肯定记得了。 --------------------编程问答--------------------
恩恩~ 我粗心,第一个Repeater加了一个有内容的ItemTemplate以后,不小心又加了一个空的ItemTemplate【本来是要加 <SeparatorTemplate>的】,还是谢谢你啦~
补充:.NET技术 , C#