Repeater嵌套循环出来的数据怎么是重复的,应该怎么解决啊,上图
<table>
<asp:Repeater ID="repPeople" runat="server">
<ItemTemplate>
<tr>
人
</tr>
<asp:Repeater ID="repLastWeekWork" runat="server">
<ItemTemplate>
<tr>
上个星期工作
</tr>
</ItemTemplate>
</asp:Repeater>
<tr>
人
</tr>
<asp:Repeater ID="repThisWeekWork" runat="server">
<ItemTemplate>
<tr>
本周工作
</tr>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
</table>
我个人来看,你这里需要在内部嵌套2个repeater,一个用来绑定上周工作情况,一个用来绑定本周工作情况。
而最外层的repeater的数据源是List<People>,然后根据People.ID传递到上周工作情况表,与本周工作情况表中。
查询数据,绑定给嵌套的两个repeater
求.net里repeater嵌套使用的完整代码
把两个表的数据都读出来,建立两个表的关系
ds.Relation.Add();
然后在父Repeater的ItemDataBind事件中找到子Repeater
在根据关系找到子Repeater对应的数据源,绑定上ok。
页面上:
<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>
<table width="500">
<tr bgcolor=blue>
<td>用户留言显示</td>
</tr>
</HeaderTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
<ItemTemplate>
<tr bgcolor=aaaaaa>
<td>用户名:<%#DataBinder.Eval(Container.DataItem,"username")%></td>
</tr>
<tr>
<td>用户留言的显示</td>
</tr>
<tr>
<td><asp:Repeater id="Repeater2" runat="server">
<ItemTemplate>
留言信息<%#DataBinder.Eval(Container.DataItem,"content")%>
</ItemTemplate>
</asp:Repeater></td>
</tr>
</ItemTemplate>
</asp:Repeater>
cs代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace AdoDotNet_Demo
{
/// <summary>
/// RepeaterLink1 的摘要说明。
/// </summary>
public class RepeaterLink1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Repeater Repeater2;
protected System.Web.UI.WebControls.Repeater Repeater1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
string strconn = "server=.;uid=sa; pwd=;database=myweb";
SqlConnection conn = new SqlConnection(strconn);
SqlDataAdapter da = new SqlDataAdapter("select * from userinfo",conn);
DataSet ds = new DataSet();
da.Fill(ds,"user");
SqlDataAdapter da1 = new SqlDataAdapter("select * from content",conn);
da1.Fill(ds,"content");
ds.Relations.Add("relation1",ds.Tables["user"].Columns["UserName"],ds.Tables["content"].Columns["UserName"]);
Repeater1.DataSource = ds.Tables["user"];
Repeater1.DataBind();
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Repeater1.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.Repeater1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item)
{
//repeater1行数据获得到
DataRowView drv = (DataRowView)e.Item.DataItem;
DataView dv = drv.CreateChildView("relation1");
//根据行数据得到repeater2的数据源
//找到当前行中repeater2
System.Web.UI.WebControls.Repeater r = (System.Web.UI.WebControls.Repeater)e.Item.FindControl("Repeater2");
r.DataSource = dv;
r.DataBind();
}
}
}
}
2个repeater 如何相互操作
第2个repeater 根据第一1个repeater所点的菜单显示出子菜单 不用repeater 用AJAX 吧
使用repeater 先显示第一层的菜单,点击第一层的菜单触发JS脚本,该JS脚本运用AJAX技术调用服务器程序,返回所点菜单下的子菜单,通过DOM操作显示子菜单。
这个方法应该是目前最流行的。
具体AJAX的教程网上很多的。
还有方法,你可以写一个方法,参数为第一层菜单的ID 输出 子菜单的HTML 在第一个repeater中调用这个方法。
这个方法 我感觉是实现起来最简单的。
非要嵌套也可以 你在“知道”里面搜一下 “repeater嵌套”,很多的!