首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

repeater嵌套不起作用解决方法

2012-03-15 
repeater嵌套不起作用在网上查了个repeater嵌套的代码,我改做了留言簿嵌套留言回复用,但运行的时候只显示

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") %>&nbsp;
  邮件地址:<%#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,自己找自己干什么呢,里面的应该换个名字试试

[解决办法]

探讨
这个问题我也遇到过,我现在加了一个群,这个群人气较好,也的确有高手 ,不但可以交流问题,而且还可以接项目赚钱,qq群号是:,不要说 我做广告,看看便知,如需要的话加入试试,如果你发现好的交流群也别忘 了告诉我啊!呵呵!

热点排行