做项目的时候,DataGrid ,DataList,Repeater 三个控件都是很优秀的数据显示控件,DataGrid的方便,简单易用,功能强大,但对性能会有所影响,在loading页面的时候大量的Html会占用一些时间,DataList 较之DataGrid功能显然减少一些,经常在一些特殊的页面制作或需求中来用,经常简单的页面显示收据表格,使用Repeater+Table即方便又快捷,但是却没有DataGrid那样方便,最近做项目,全部使用Repeater,但是客户突然要求要对数据表格进行排序,惨了~~~~~,第一印象就是DataGrid控件有排序功能,要换控件吗?靠,那么多表单,全部换DataGrid会出人命,于是就想办法,来实现Repeater的排序。下面就是我做的一个Repeater实现双向排序的例子:主要使用LinkButton,Repeater,ViewState,Cache结合来完成的。
效果如下图:

下载原代码:/Files/vaiyanzi/Attch/RepeaterOrder.rar
前台Html代码:

<%@ Page language="c#" Codebehind="RepeaterOrderForm.aspx.cs" AutoEventWireup="false" Inherits="RepeaterOrder.RepeaterOrderForm" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>RepeaterOrderForm</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
            <table border=1 bordercolor=#330033 bordercolordark=#999933 bordercolorlight=black>
            <tr>
            <td colspan=5 align=center><font color=blue size=12>Repeater实现双向排序功能</font></td>
            </tr>
                <asp:Repeater id="rpOrder" runat="server">
                    <HeaderTemplate>
                        <tr align=center >
                            <td>
                                <asp:LinkButton ID="LastName" Runat="server" text="LastName" CommandName="LastName"></asp:LinkButton></td>
                            <td>
                                <asp:LinkButton ID="FirstName" Runat="server" text="FirstName" CommandName="FirstName"></asp:LinkButton></td>
                            <td>
                                <asp:LinkButton ID="Title" Runat="server" text="Title" CommandName="Title"></asp:LinkButton></td>
                            <td>
                                <asp:LinkButton ID="Address" Runat="server" text="Address" CommandName="Address"></asp:LinkButton></td>
                            <td>
                                <asp:LinkButton ID="City" Runat="server" text="City" CommandName="City"></asp:LinkButton></td>
                            
                        </tr>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <tr>
                            <td><%# DataBinder.Eval(Container.DataItem,"LastName")%></td>
                            <td><%# DataBinder.Eval(Container.DataItem,"FirstName")%></td>
                            <td><%# DataBinder.Eval(Container.DataItem,"Title")%></td>
                            <td><%# DataBinder.Eval(Container.DataItem,"Address")%></td>
                            <td><%# DataBinder.Eval(Container.DataItem,"City")%></td>                            
                        </tr>
                    </ItemTemplate>
                </asp:Repeater>
            </table>
        </form>
    </body>
</HTML>

后台CS文件:


  1using System;
  2using System.Collections;
  3using System.ComponentModel;
  4using System.Data;
  5using System.Drawing;
  6using System.Web;
  7using System.Web.SessionState;
  8using System.Web.UI;
  9using System.Web.UI.WebControls;
 10using System.Web.UI.HtmlControls;
 11using System.Data.SqlClient;
 12using System.Configuration;
 13
 14namespace RepeaterOrder
 15{
 16    /**//// <summary>
 17    /// RepeaterOrderForm 的摘要说明。
 18    /// </summary>
 19    public class RepeaterOrderForm : System.Web.UI.Page
 20    {
 21        protected System.Web.UI.WebControls.Repeater rpOrder;
 22        private readonly string CONNECTIONSTRING=ConfigurationSettings.AppSettings["ConnectionString"];
 23        private void Page_Load(object sender, System.EventArgs e)
 24        {
 25            if(!IsPostBack)
 26            {
 27                BindRepeater();
 28            }
 29        }
 30        private DataView GetData
 31        {
 32            get
 33            
 34                return Cache["_data"] as DataView;
 35            }
 36            set
 37            {
 38                if( Cache["_data"]==null)
 39                    Cache["_data"]=value;
 40            }
 41        }
 42        Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
 43        override protected void OnInit(EventArgs e)
 44        {
 45            //
 46            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
 47            //
 48            InitializeComponent();
 49            base.OnInit(e);
 50        }
 51        
 52        /**//// <summary>
 53        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
 54        /// 此方法的内容。
 55        /// </summary>
 56        private void InitializeComponent()
 57        {    
 58            this.Load += new System.EventHandler(this.Page_Load);
 59            this.rpOrder.ItemCommand+=new RepeaterCommandEventHandler(rpOrder_ItemCommand);
 60            this.rpOrder.ItemDataBound+=new RepeaterItemEventHandler(rpOrder_ItemDataBound);
 61
 62        }
 63        #endregion
 64
 65        private SqlConnection Conn()
 66        {
 67            return new SqlConnection(CONNECTIONSTRING);
 68        }
 69
 70        private void BindRepeater()
 71        {
 72            DataSet ds=new DataSet();
 73            SqlDataAdapter da=new SqlDataAdapter("Select * From Employees",Conn());
 74            da.Fill(ds);
 75            GetData=ds.Tables[0].DefaultView;
 76            rpOrder.DataSource=ds.Tables[0];
 77            rpOrder.DataBind();
 78        }
 79
 80        private void rpOrder_ItemCommand(object source, RepeaterCommandEventArgs e)
 81        {
 82            if(e.Item.ItemType==ListItemType.Header)
 83            {            
 84                LinkButton lkbtnSort=(LinkButton)e.Item.FindControl(e.CommandName.Trim());                
 85                if(ViewState[e.CommandName.Trim()]==null)
 86                {
 87                    ViewState[e.CommandName.Trim()]="ASC";                            
 88                    lkbtnSort.Text=lkbtnSort.Text+"▲";
 89                }
 90                else
 91                {
 92                    if(ViewState[e.CommandName.Trim()].ToString().Trim()=="ASC")
 93                    {
 94                        ViewState[e.CommandName.Trim()]="DESC";    
 95                        if(lkbtnSort.Text.IndexOf("▲")!=-1)
 96                            lkbtnSort.Text=lkbtnSort.Text.Replace("▲","▼");
 97                        else
 98                            lkbtnSort.Text=lkbtnSort.Text+"▼";
 99                    }
100                    else
101                    {
102                        ViewState[e.CommandName.Trim()]="ASC";    
103                        if(lkbtnSort.Text.IndexOf("▼")!=-1)
104                            lkbtnSort.Text=lkbtnSort.Text.Trim().Replace("▼","▲");
105                        else
106                            lkbtnSort.Text=lkbtnSort.Text+"▲";
107                    }
108                }
109                ViewState["text"]=lkbtnSort.Text;
110                ViewState["id"]=e.CommandName.Trim();
111                DataView dv=GetData;
112                dv.Sort=e.CommandName.ToString().Trim()+" "+ViewState[e.CommandName.Trim()].ToString().Trim();
113                rpOrder.DataSource=dv;
114                rpOrder.DataBind();
115            }            
116        }
117
118        private void rpOrder_ItemDataBound(object sender, RepeaterItemEventArgs e)
119        {
120            if(e.Item.ItemType==ListItemType.Header)
121            {
122                if(ViewState["id"]!=null)
123                {                    
124                    LinkButton lkbtnSort=(LinkButton)e.Item.FindControl(ViewState["id"].ToString().Trim());                        
125                    lkbtnSort.Text=ViewState["text"].ToString();
126                }
127            }
128        }
129    }
130}
131

Repeater 双向排序相关推荐

  1. Repeater点击表头双向排序

    repeater实现排序功能(双击升序排列,再双击降序排列).原理很简单,在<TD>中加个Ondblclick,用它来触发一个LinkButton的服务器事件.LinkButton的服务器 ...

  2. DataGrid双向排序以及给HeaderText加图标

    DataGrid双向排序以及给HeaderText加图标 DataGrid默认情况下只支持单向排序,而且默认是升序(ASC).能不能使之支持双向排序并且给HeaderText加图标呢?        ...

  3. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学B组 - I.双向排序

    2021年第十二届蓝桥杯 - 省赛 - C/C++大学B组 - I.双向排序 Ideas 题目中给出了两种操作: 当 pi = 0 时,表示将 a1, a2, · · · , aqi 降序排列: 当 ...

  4. Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序(三)

    第七步: 在自定义分页的Repeater 里添加排序功能 现在已经完成了自定义分页,我们再来添加排序功能.ProductsBLL类的GetProductsPagedAndSorted方法和GetPro ...

  5. 第十二届蓝桥杯A组省赛试题 I: 双向排序(Java)

    试题 I: 双向排序 本题总分:25 分 [问题描述] 给定序列 (a1, a2, · · · , an) = (1, 2, · · · , n),即 ai = i. 小蓝将对这个序列进行 m 次操作 ...

  6. Repeater内部排序

    Repeater内部排序,调用 <%# this.repUser.Items.Count + 1%> <asp:Repeater ID="repUser" run ...

  7. Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序

    Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序(一) 原文 | 下载本教程中的编码例子 | 下载本教程的PDF版 (以后比较长的部 ...

  8. 2021 第十二届 蓝桥杯 双向排序 题解 栈+文艺平衡树

    2021 第十二届蓝桥杯 双向排序 题解 栈+文艺平衡树 题目描述 思路 实现方法 代码 只用栈 只用栈的代码 题目描述 原题链接:https://www.lanqiao.cn/problems/14 ...

  9. datagrid的正反双向排序

    在asp.net中利用datagrid控件按列进行排序很是方便.可是我们只能单项排序!如果我们需要正反排序那么就需要加入一些代码控制一下. 首先我们需要将datagird控件的属性设置为 AllowS ...

最新文章

  1. 2021年大数据Spark(十四):Spark Core的RDD操作
  2. centos7 搭建本地git_本地服务调用K8S环境中的SpringCloud微服务实战
  3. Python创建daemon
  4. protobuf-c使用说明
  5. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第3章-具有扩散作用的多智能体系统领导-跟随一致性
  6. C#中的equals()和==
  7. Bokeh——交互式可视化库
  8. 论文浅尝 | 多内容实体和关系联合抽取的对抗训练
  9. 2020年中国直播电商行业研究报告
  10. 每次Title显示不同的名言
  11. 【WCF】服务并发中的“可重入模式”
  12. linux 测试本地端口是否打开,有效地测试Linux上的端口是否打开?
  13. Window上修改了mysql的配置文件my.ini后重启服务报错:本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
  14. linux基础命令(总结)
  15. Python循环遍历(cycle)
  16. c 函数 字符串 find_如何在C ++中使用字符串find()
  17. jasperReport - 多Table的PDF中文导出
  18. 1414 冰雕(思维+暴力)
  19. 互联网公司愚人节策划大盘点,在恶搞界谁是老大?
  20. 刷脸支付重磅来袭是业界的口碑代表

热门文章

  1. gps天线拆解图片_飞宇稳定器拆解:握杆的手,不怕颤抖
  2. 零基础学python数据分析_Python学习指南:使用Python学习数据分析
  3. iphone9发布_【60秒半导体新闻】消息称国外疫情爆发让苹果取消发布会 iPhone 9跳票/华为P40全家福:7种配色、陶瓷尊享版配豪华五摄...
  4. 新娘JAVA_Java之趣味编程结婚问题
  5. sapi cli php mac,make: *** [sapi/cli/php] Error 1 解决办法
  6. 工作分流是什么意思_【嘉陵特装要闻】重庆嘉陵召开持续推进职工分流安置工作布置会...
  7. 列表视图案例2——显示用户列表
  8. 基于注解使用MyBatis
  9. vscodepython技巧_VScode Python no module的解决方法
  10. java spark on hive_hive-on-spark 安装 以及 scala 实例