网页中要想实现复杂的效果,少不了Repeater的嵌套使用,但是嵌套使用找子控件并不是那么容易,所以能不使用嵌套就不使用,为了实现同样的效果就要利用Repeater控件的  <ItemTemplate>模版列了,那就来看看下面的一段实例!

前台代码:

<asp:Repeater ID="Rpt_MyWeibo" runat="server">
    <ItemTemplate>
         <UL style="padding:0px; margin:0px; list-style-type:none;">
          <LI style="padding-top:10px; padding-left:10px; padding-right:10px; line-height:24px; word-wrap: break-word;">
          <P style="padding:0px; margin:0px; font-size:14px; color:#444444;"><%#Eval("wb_content")%></P>
          <P style="padding:0px; margin:0px; line-height:24px;"><FONT color=#999999><%#Eval("wb_fbtime")%></FONT></P>

          <%#GetTeacherBack(Eval("wb_id").ToString()) %>
          <%#GetUserBack(Eval("wb_id").ToString())%>
          <FONT color=#999999> <a href="javascript:void(0);" onClick="showDetail('<%#Eval("wb_id")%>')" style="color:blue;">回 复</a></FONT>
         </LI>
          </UL>
    </ItemTemplate>
     </asp:Repeater>
     <div id="parpel2" runat="server" style="text-align:center; width:100%; margin-top:10px;"> </div>

  
      这里模仿班级微博中的微博老师和同学嵌套回复效果,其中老师和学生的回复可以有多条,而且老师的回复是在教师回复表中,学生的回复是在学生评论表中,这里涉及到3张表,如果这里不使用Repeater嵌套,而是去用全外连接,就会出现,一条微博会重复出现多次!

      那么来看看这里是怎么实习的呢?

      在后台定义这样两个方法:

  /// <summary>
    /// 根据微博id返回所有老师的评论
    /// </summary>
    /// <param name="wbid">微博ID</param>
    /// <returns></returns>
    public String GetTeacherBack(string wbid)
    {
        SqlDataReader dr = DbHelper.ExecuteReader(CommandType.Text, "select * from wb_Reply where R_BlogID=@wbid", new SqlParameter("@wbid", wbid));
        String Str = "";
        while (dr.Read())
        { 
        Str +="<p style=\"padding:0px; margin:0px; color:#999999; background-color:#FEE6DA; margin-bottom:3px;\">&nbsp;&nbsp;答复: <span style=\"color:#444444;\">"+dr["R_Content"]+"&nbsp;&nbsp;"+ReturnFileUrl(dr["R_FileUrl"].ToString())+"</span><br />&nbsp;&nbsp;"+getTearcherName(dr["R_TeacherID"].ToString())+"老师&nbsp;&nbsp;Email:"+dr["R_Email"]+"&nbsp;&nbsp;"+dr["R_AddTime"]+"</p>";
        }
        dr.Close();
        dr.Dispose();
        return Str;
    }

  和



  /// <summary>
    /// 返回所有学生回复
    /// </summary>
    /// <param name="wbid">微博id</param>
    /// <returns></returns>
    public String GetUserBack(string wbid)
    {
        SqlDataReader dr = DbHelper.ExecuteReader(CommandType.Text, "select * from PingLun where P_BlogID=@wbid", new SqlParameter("@wbid", wbid));
        String Str = "";
        while (dr.Read())
        {
            Str += "<p style=\"padding:0px; margin:0px; color:#999999; background-color:#F5F5F5; margin-bottom:3px;\">&nbsp;&nbsp;&nbsp;" + getUserName(dr["P_UserID"].ToString()) + " 回复: <span style=\"color:#444444;\">" + dr["P_Content"] + "</span>&nbsp;&nbsp;&nbsp;" + dr["P_fbtime"] + "</p>";
        }
        return Str;
        dr.Close();
        dr.Dispose();
    }

  这就相当与一个Repeater的嵌套效果!

   在Repeater的<ItemTemplate>列中就可以直接调用后台的这两个方法:


<%#GetTeacherBack(Eval("wb_id").ToString()) %>
 <%#GetUserBack(Eval("wb_id").ToString())%>

  

最终效果如下图:



这里开放部分源码,全套源码联系:csssky@163.com


posted on 2011-08-04 17:50  csssky  阅读(280)  评论(0编辑  收藏  举报