网页中要想实现复杂的效果,少不了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;\"> 答复: <span style=\"color:#444444;\">"+dr["R_Content"]+" "+ReturnFileUrl(dr["R_FileUrl"].ToString())+"</span><br /> "+getTearcherName(dr["R_TeacherID"].ToString())+"老师 Email:"+dr["R_Email"]+" "+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;\"> " + getUserName(dr["P_UserID"].ToString()) + " 回复: <span style=\"color:#444444;\">" + dr["P_Content"] + "</span> " + 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
Asp.Net火云联盟您的支持是我们前进的动力!