转载:http://www.66test.com/Content/2344032.html
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Repeater.aspx.cs" Inherits="RepeaterTest.Repeater" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Reapter展示父子表实例</title>
<script type="text/javascript">
function expand(obj,classid)
{
var objrow=document.getElementById("row_" +classid);
if (obj.innerHTML=="+")
{
obj.innerHTML="-";
objrow.style.display="";
}
else
{
obj.innerHTML="+";
objrow.style.display="none";
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
有闪烁实例:<br />
<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand" OnItemDataBound="Repeater1_ItemDataBound">
<HeaderTemplate>
<table border="1px" cellpadding="3" cellspacing="0">
<tr>
<td>
展开/闭合</td>
<td>
ClassID</td>
<td>
ClassName</td>
<td>
tname</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:LinkButton ID="btnExpand" runat="server" CommandArgument='<% #Eval("ClassID")%>'
CommandName="expand" Font-Underline="False" Text="+"></asp:LinkButton>
</td>
<td>
<%#DataBinder.Eval(Container.DataItem, "ClassID")%>
</td>
<td>
<%#DataBinder.Eval(Container.DataItem, "ClassName")%>
</td>
<td>
<%#DataBinder.Eval(Container.DataItem, "tname")%>
</td>
</tr>
<tr>
<td colspan="4">
<asp:GridView ID="grid1" runat="server" Visible="false" BorderWidth="1px" CellPadding="2" CellSpacing="0" AutoGenerateColumns="false" Width="100%" BackColor="lightBlue" BorderColor="Beige">
<Columns>
<asp:BoundField DataField="StuID" HeaderText="学生id" />
<asp:BoundField DataField="StuName" HeaderText="学生姓名" />
<asp:BoundField DataField="Age" HeaderText="年龄" />
<asp:BoundField DataField="Gender" HeaderText="性别" />
</Columns>
</asp:GridView>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<br />
<br />
无闪烁实例:<br />
<asp:Repeater ID="Repeater2" runat="server" OnItemDataBound="Repeater2_ItemDataBound">
<HeaderTemplate>
<table id="table2" border="1px" cellpadding="3" cellspacing="0">
<tr>
<td>
展开/闭合</td>
<td>
ClassID</td>
<td>
ClassName</td>
<td>
tname</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<span style="cursor:pointer;" οnclick="expand(this,'<%# Eval("ClassID") %>');">+</span>
</td>
<td>
<asp:Label ID="lblclassid" runat="server" Text='<%# Eval("ClassID") %>'></asp:Label>
</td>
<td>
<%#DataBinder.Eval(Container.DataItem, "ClassName")%>
</td>
<td>
<%#DataBinder.Eval(Container.DataItem, "tname")%>
</td>
</tr>
<tr style="display:none;" id='row_<%# Eval("ClassID") %>'>
<td colspan="4">
<asp:GridView ID="grid2" runat="server" Visible="true" BorderWidth="1px" CellPadding="2" CellSpacing="0" AutoGenerateColumns="false" Width="100%" BackColor="lightBlue" BorderColor="Beige">
<Columns>
<asp:BoundField DataField="StuID" HeaderText="学生id" />
<asp:BoundField DataField="StuName" HeaderText="学生姓名" />
<asp:BoundField DataField="Age" HeaderText="年龄" />
<asp:BoundField DataField="Gender" HeaderText="性别" />
</Columns>
</asp:GridView>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
//
public partial class Repeater : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.bind();
}
}
private DataSet dataSource
{
get
{
if (ViewState["ds"] != null)
{
return (DataSet)ViewState["ds"];
}
else
{
DataSet ds = DataSource.GetDataSet();
ViewState["ds"] = ds;
return ds;
}
}
}
private void bind()
{
DataSet ds = this.dataSource;
this.Repeater1.DataSource = ds.Tables["tbclass"];
this.Repeater1.DataBind();
this.Repeater2.DataSource = ds.Tables["tbclass"];
this.Repeater2.DataBind();
}
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "expand")
{
LinkButton btn = (LinkButton)e.CommandSource;
GridView grid =(GridView)btn.Parent.FindControl("grid1");
if (btn.Text == "+")
{
btn.Text = "-";
grid.Visible = true;
}
else
{
btn.Text = "+";
grid.Visible = false;
}
}
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
DataTable dt = this.dataSource.Tables["tbstu"];
LinkButton objButton = (LinkButton)e.Item.FindControl("btnExpand");
if (objButton != null && objButton.CommandArgument !="")
{
string classID = objButton.CommandArgument;
dt.DefaultView.RowFilter = "ClassID=" + classID;
DataTable dtStu = dt.DefaultView.ToTable();
GridView grid = (GridView)e.Item.FindControl("grid1");
grid.DataSource = dtStu;
grid.DataBind();
}
}
protected void Repeater2_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
DataTable dt = this.dataSource.Tables["tbstu"];
Label objlbl = (Label)e.Item.FindControl("lblclassid");
if (objlbl != null && objlbl.Text != "")
{
string classID = objlbl.Text;
dt.DefaultView.RowFilter = "ClassID=" + classID;
DataTable dtStu = dt.DefaultView.ToTable();
GridView grid = (GridView)e.Item.FindControl("grid2");
grid.DataSource = dtStu;
grid.DataBind();
}
}
}
public class DataSource
{
public static DataSet GetDataSet()
{
DataSet ds = new DataSet();
DataTable dtClass = new DataTable("tbclass");
dtClass.Columns.Add("ClassID", typeof(int));
dtClass.Columns.Add("ClassName", typeof(string));
dtClass.Columns.Add("tname", typeof(string));
dtClass.Rows.Add(new object[] { 1,"一班","赵老师"});
dtClass.Rows.Add(new object[] { 2, "二班", "钱老师" });
dtClass.Rows.Add(new object[] { 3, "三班", "孙老师" });
dtClass.Rows.Add(new object[] { 4, "四班", "李老师" });
ds.Tables.Add(dtClass);
DataTable dtStu = new DataTable("tbstu");
dtStu.Columns.Add("StuID", typeof(int));
dtStu.Columns.Add("StuName", typeof(string));
dtStu.Columns.Add("Age", typeof(int));
dtStu.Columns.Add("Gender", typeof(string));
dtStu.Columns.Add("ClassID", typeof(int));
dtStu.Rows.Add(new object[] { 1, "a1",22,'M',1 });
dtStu.Rows.Add(new object[] { 2, "a2", 22, 'F', 1 });
dtStu.Rows.Add(new object[] { 3, "a3", 22, 'M', 1 });
dtStu.Rows.Add(new object[] { 4, "a4", 22, 'F', 1 });
dtStu.Rows.Add(new object[] { 5, "b1", 22, 'M', 2 });
dtStu.Rows.Add(new object[] { 6, "b2", 22, 'F', 2 });
dtStu.Rows.Add(new object[] { 7, "b3", 22, 'M', 2 });
dtStu.Rows.Add(new object[] { 8, "c1", 22, 'F', 3 });
dtStu.Rows.Add(new object[] { 9, "c2", 22, 'M', 3 });
dtStu.Rows.Add(new object[] { 10, "c3", 22, 'F', 3 });
ds.Tables.Add(dtStu);
//ds.Relations.Add(ds.Tables["tbclass"].Columns["ClassID"], ds.Tables["tbstu"].Columns["ClassID"]);
return ds;
}
}