• repeater简单应用(嵌套绑定)


    眼看就要到上班的日子了,希望大家抓住宝贵时间能吃则吃,能乐则乐
    咱还是节省网络资源,进入正题。。

    说起repeater嵌套,好像从N久就有了,这个例子是前些日子做的,用了三层嵌套实现有,先说下,因为客观需求,并没有考虑到性能上的问题,所以可以看下其中的方法,至于别的可以自己探索下,呵呵。

    功能是要实现一个下拉列表,列表顶层是可以动态设置的年份时间段,第二层则是时间段内具体的年份列表,最内层是每年的信息列表,因为时间问题,就直接用三个repeater来实现了此功能了,从外层向内层根据条件进行逐层绑定,具体的实现如下

    先看下HTML:

     1<asp:Repeater ID="Repeater1" runat="server">
     2                                                <ItemTemplate>
     3                                                    <div>
     4                                                        <span>
     5                                                            <asp:Literal ID="lblid" runat="server" Text='<%# Eval("history_id") %>' Visible="false"></asp:Literal>
     6                                                            <asp:Literal ID="lblstart" runat="server" Text='<%# Eval("history_start")%>'></asp:Literal>-<asp:Literal
     7                                                                ID="lblend" runat="server" Text='<%# Eval("history_end")%>'></asp:Literal>
     8                                                        </span>
     9                                                        <asp:Repeater ID="Repeater2" runat="server">
    10                                                            <ItemTemplate>
    11                                                                <p style="color: #000000; margin-left: -20px;">
    12                                                                    <asp:Literal ID="lblyear" runat="server" Text='<%# Eval("his_year") %>'></asp:Literal></p>
    13                                                                <asp:Repeater ID="Repeater3" runat="server">
    14                                                                    <ItemTemplate>
    15                                                                        <a href="history.aspx?id=<%# Eval("his_id") %>" style="padding-left: 30px; text-decoration: underline;">
    16                                                                            <%# Eval("his_title")%></a>
    17                                                                    </ItemTemplate>
    18                                                                </asp:Repeater>
    19                                                            </ItemTemplate>
    20                                                        </asp:Repeater>
    21                                                    </div>
    22                                                </ItemTemplate>
    23                                            </asp:Repeater>

    (其实repeater和平常的控件一样,所以别让心理打败就好,呵呵)
    此段HTML很简单,三个repeater,每一层都有标识字段(为了进行FindControl),此方法好像是地球人都知道#24,剩下的都是基本数据绑定了,至于内部样式不必去管。

    再看下CS文件:

    1   private void HisBind()
    2    //绑定左侧外层年段
    3        this.Repeater1.DataSource = his_p_mana.GetList();
    4        this.Repeater1.DataBind();
    5
    6        YearBind(); 
    7    }

    这个是最外层的年段列表绑定(简单)。

    关键在下面这个方法中:

     1private void YearBind()
     2    //绑定内部列表
     3        sqldb sql = new sqldb();
     4        IList<History_context> years = sql.GetYear();//获取所有年份信息
     5
     6        foreach (RepeaterItem item in this.Repeater1.Items)
     7        {
     8            string pid = (item.FindControl("lblid"as Literal).Text;
     9            Repeater repyear = item.FindControl("Repeater2"as Repeater;
    10            int start =int.Parse((item.FindControl("lblstart"as Literal).Text);//
    11            int end =int.Parse((item.FindControl("lblend"as Literal).Text);//
    12
    13            List<History_context> newyear = new List<History_context>();//储存临时在绑定信息
    14            for (int i = 0; i < years.Count; i++)
    15            {//时间段内的信息
    16                if (years[i].his_year>=start&&years[i].his_year<=end)
    17                {
    18                    newyear.Add(years[i]);
    19                }

    20            }

    21            repyear.DataSource = newyear;
    22            repyear.DataBind();
    23
    24            foreach (RepeaterItem rep3 in repyear.Items)
    25            {//绑定每年的信息(一年内有多个信息项)
    26                int year = int.Parse((rep3.FindControl("lblyear"as Literal).Text);
    27                Repeater rep = rep3.FindControl("Repeater3"as Repeater;
    28                rep.DataSource = his_c_mana.GetList(0" his_year="+year);
    29                rep.DataBind();
    30            }

    31        }

    可以看到此方法中用了多个循环,所以效率肯定不是很好。。
    看下功能,首先把所有年份信息查询出来~~信息量不算大,呵呵
    遍历最外层的repeater,也就是时间段,通过findcontrol找出标题起始时间与终止时间,以及要进行绑定的第二层repeater,通过遍历刚查询出来的所有年份信息来判断是否在此时间段内,若是,则存储在临时的IList year中,直至循环结束,第二层的数据也就绑定出来了~~

    在上面第二层的信息已经查询出来,repyear(第二层)的信息也就存在了,对它进行遍历,查询出内部标识具体年份的临时变量year,通过his_c_mana.GetList方法把这一年的所有信息查询出来并绑定在最内层repeater中。

    好像绑定完了,呵呵

    还是那句,这个功能只存在逻辑,并没有考虑到性能问题。

  • 相关阅读:
    xunjian.sh
    192.168.50.235配置
    自动备份并删除旧日志
    bg和fg命令
    linux之sed用法
    正则表示第二行,第二列
    linux下redis安装
    Hma梳理
    linux 系统监控、诊断工具之 lsof 用法简介
    java的基本数据类型有八种
  • 原文地址:https://www.cnblogs.com/quluqi/p/1381436.html
Copyright © 2020-2023  润新知