repeater嵌套不起作用
在网上查了个repeater嵌套的代码,我改做了留言簿嵌套留言回复用,但运行的时候只显示留言部分,回复的部分不显示,求教!
protected void msgRepeater_I器temDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater Reply_Repeater = (Repeater) e.Item.FindControl("Reply_Repeater");
//找到留言Repeater关联的数据项
DataRowView rowv = (DataRowView)e.Item.DataItem;
//提取留言ID
int Id = Convert.ToInt32(rowv["Msg_ID"]);
//绑定留言回复Repeater
SqlDataAdapter ada = new SqlDataAdapter("select * from Message_Reply where Msg_ID=" + Id,myconn);
DataSet ds = new DataSet();
myconn.Open();
ada.Fill(ds,"Message_Reply");
Reply_Repeater.DataSource =ds.Tables["Message_Reply"];
Reply_Repeater.DataBind();
myconn.Close();
}
}
.ASPX部分
<asp:Repeater ID="msgRepeater" runat="server">
<ItemTemplate>
<table border="0" cellpadding="0" cellspacing="0" style="width:650px; font-family:宋体; font-size:small">
<tr>
<td style="width:60px">
<img src='Face/<%#DataBinder.Eval(Container.DataItem,"Face_ID") %>.bmp' />
</td>
<td style="width:550px; vertical-align:top; font-size:16px" align="left">
昵称:<%#DataBinder.Eval(Container.DataItem,"Msg_User") %>
邮件地址:<%#DataBinder.Eval(Container.DataItem,"Msg_email") %>
</td>
<td style="width:40px">
#<%#DataBinder.Eval(Container.DataItem,"Msg_ID") %>
</td>
</tr>
<tr>
<td style="width:60px">
</td>
<td style="width:550px" align="left" colspan="2">
<%#DataBinder.Eval(Container.DataItem,"Msg_Content") %>
</td>
</tr>
<tr>
<td style="width:60px"></td>
<td style="width:550px">
<asp:Repeater ID="Reply_Repeater" runat="server">
<ItemTemplate>
<fieldset>
<legend>JUSONLO回复</legend>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left">
<%#DataBinder.Eval(Container.DataItem,"R_comment") %>
</td>
</tr>
<tr>
<td align="right">
回复时间:<%#DataBinder.Eval(Container.DataItem,"R_date") %>
</td>
</tr>
</table>
</fieldset>
</ItemTemplate>
</asp:Repeater>
</td>
<td style="width:40px"></td>
</tr>
<tr>
<td style="width:650px" colspan="3" align="right">
留言时间:<%#DataBinder.Eval(Container.DataItem,"AddDate") %>
</td>
</tr>
</table>
</ItemTemplate>
<SeparatorTemplate>
<hr style="width:100%; height:0.01em; color:#CCEFF5" />
</SeparatorTemplate>
</asp:Repeater>
[解决办法]
超时时间已到。超时时间已到,但是尚未从连接池获取连接。出现这种情况可能是因为所有池的连接均在使用,并且达到了最大池大小。 昨天做一个异常处理的小例子,采用ASP.NET AJAX 技术,功能上实现 Repeater 嵌套 Repeater ,最外层Repeater 显示时间段,里层的Repeater 显示该时间段的异常。做完之后,测试一下,一切正常。 最外层Repeater 只有6条数据,里层Repeater 对于外层的Repeater 都有4条数据,页面分了3页,采用自定义分页。效果还不错,但是反复点击分页,就报了以上的错误,轻微关掉VS,重新打开再运行就可,严重的注销之后,重新运行仍然报上面的错误。 我首先就给错误下了一个定义:滥用AJAX,只要不反复点击就没有问题了。 过了 一天,因外其他原因还要打开这个项目,还是出现以前的情况,实在是心有不干 。然后用 Gridview 做了同样的一个例子,采用自带的分页,同样反复的请求,但是却没有出现这样的情况。为什么没有呢 ? 难道是分页 有问题,我把分页注释掉,只是绑定,重新运行,仍然报那个错误,这个错误持续时间也太长了。 突然看到了一行代码;repErrors_ItemDataBound ,想到了问题的所在 将里面的代码注释掉之后,一切正常了。原来是 嵌套Repeater 搞的鬼。
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
HtmlInputHidden hi = (HtmlInputHidden)e.Item.FindControl("Hidden1");
Repeater rep = (Repeater)e.Item.FindControl("repErrorinfo");
rep.DataSource = ers.GetErrorInfo(Int32.Parse(hi.Value));
rep.DataBind();
}
这是我以前的代码,GetErrorInfo 是一个方法,根据传递的 外层ID,从数据库查找 里层的信息。 但是这样做的话,每次绑定都会 连接一次数据库 。难怪 服务器吃不消呢 ? 都是我的错。 重新修改了一下代码,就好了。
OK ! if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
HtmlInputHidden hi = (HtmlInputHidden)e.Item.FindControl("Hidden1");
Repeater rep = (Repeater)e.Item.FindControl("repErrorinfo");
DataSet ds = null;
if (Cache["Repds"] != null) {
ds = (DataSet)Cache["Repds"];
} else {
Cache.Insert("Repds", (DataSet)ers.GetErrorInfo());
ds = (DataSet)Cache["Repds"];
}
rep.DataSource = ers.GetErrorInforep(ds, Int32.Parse(hi.Value));
rep.DataBind();
}
[解决办法]
针对楼主的问题,楼主 应该断点调试 ID 是否有值,然后 DS 是否有值。
[解决办法]
Repeater [color=#FF9900]Reply_Repeater = (Repeater) e.Item.FindControl("Reply_Repeater"); [/color]
lz,自己找自己干什么呢,里面的应该换个名字试试
[解决办法]