您的位置:首页 > 其它

Repeater显示父子表数据

2016-07-21 08:08 351 查看
转载: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;" onclick="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;

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: