Repeater显示父子表数据

转载: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;

        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值