ASP.Net2.0 GridView 多列排序,显示排序图标,分页

Asp.net中GridView使用详解 Asp.net中GridView的使用详解 立即下载
最近在使用ASP.net 2.0的GridView 控件时,发现排序与分页功能Microsoft实现的都很简单,比如排序,在点击列名的时候来触发整页的PostBack,然后排序,但是在列头上没有一个显示升序降序的图标,这会让最终用户使用时很迷惑,因为不知道是升序了还是降序了,所以今天首先解决的第一问题就是升序降序在列上显示图标,第二要解决的问题是默认GridView按列排序只能排一列的,也就是不能进行多列排序,而在实际应用中仅仅按照一列来排序是不能满足业务需求的,第三是GridView 分页问题,GridView预定义的分页页码显示,比较简单,而实际应用中,分页可能不是只显示首页,上一页,下一页,末页,或者是数字的页码那么简单,应该更需要,跳转,当前的页码,总页数等,更详尽的信息。

第一:GridView 多列排序与排序图标显示

首先我们可以新建一个类库程序,主要需要引用System.Web.Dll文件
然后新建一个类,这个类继承与GridView控件,我们只需要对部分方法进行重新即可。
我的演示的例子,采用了单列排序,如果启用多列排序,把控件的AllowMultiColumnSorting设置为True就是
多列排序。


  1    public class WebGridView:GridView
  2    {
  3        属性#region 属性
  4        /**//// <summary>
  5        /// 是否启用或者禁止多列排序
  6        /// </summary>

  7        [
  8        Description("是否启用多列排序功能"),
  9        Category("排序"),
 10        DefaultValue("false"),
 11        ]
 12        public bool AllowMultiColumnSorting
 13        {
 14            get
 15            {
 16                object o = ViewState["EnableMultiColumnSorting"];
 17                return (o != null ? (bool)o : false);
 18            }

 19            set
 20            {
 21                AllowSorting = true;
 22                ViewState["EnableMultiColumnSorting"] = value;
 23            }
 24        }
 25        /**//// <summary>
 26        /// 升序时显示图标
 27        /// </summary>
 28        [
 29        Description("升序时显示图标"),
 30        Category("排序"),
 31        Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
 32        DefaultValue(""),
 33
 34        ]
 35        public string SortAscImageUrl
 36        {
 37            get
 38            {
 39                object o = ViewState["SortImageAsc"];
 40                return (o != null ? o.ToString() : "");
 41            }
 42            set
 43            {
 44                ViewState["SortImageAsc"] = value;
 45            }
 46        }
 47        /**//// <summary>
 48        /// 降序时显示图标
 49        /// </summary>
 50        [
 51        Description("降序时显示图标"),
 52        Category("排序"),
 53        Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
 54        DefaultValue(""),
 55        ]
 56        public string SortDescImageUrl
 57        {
 58            get
 59            {
 60                object o = ViewState["SortImageDesc"];
 61                return (o != null ? o.ToString() : "");
 62            }
 63            set
 64            {
 65                ViewState["SortImageDesc"] = value;
 66            }
 67        }
 68        #endregion
 69        重写方法#region 重写方法
 70        protected override void OnSorting(GridViewSortEventArgs e)
 71        {
 72            if (AllowMultiColumnSorting)
 73            {
 74                e.SortExpression = GetSort;
 75            }

 76
 77            base.OnSorting(e);
 78        }
 79        protected override void OnRowCreated(GridViewRowEventArgs e)
 80        {
 81            if (e.Row.RowType == DataControlRowType.Header)
 82            {
 83                if (SortExpression != String.Empty)
 84                {
 85                    DisplaySortOrderImages(SortExpression, e.Row);
 86                    this.CreateRow(0, 0, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
 87                }
 88            }
 89            base.OnRowCreated(e);
 90        }
 91        #endregion
 92        受保护的方法#region 受保护的方法
 93        /**//// <summary>
 94        ///  获取排序表达式
 95        /// </summary>

 96        protected string GetSort
 97        {
 98            string[] sortColumns = null;
 99            string sortAttribute = SortExpression;
100
101            if (sortAttribute != String.Empty)
102            {
103                sortColumns = sortAttribute.Split(",".ToCharArray());
104            }
105            if (sortAttribute.IndexOf(e.SortExpression) > 0 || sortAttribute.StartsWith(e.SortExpression))
106            {
107                sortAttribute = ModifySort;
108            }
109            else
110            {
111                sortAttribute += String.Concat(",", e.SortExpression, " ASC ");
112            }
113            return sortAttribute.TrimStart(",".ToCharArray()).TrimEnd(",".ToCharArray());
114
115        }
116        /**//// <summary>
117        ///  修改排序顺序
118        /// </summary>
119        protected string ModifySort
120        {
121            string ascSortExpression = String.Concat(sortExpression, " ASC ");
122            string descSortExpression = String.Concat(sortExpression, " DESC ");
123
124            for (int i = 0; i < sortColumns.Length; i++)
125            {
126
127                if (ascSortExpression.Equals(sortColumns[i]))
128                {
129                    sortColumns[i] = descSortExpression;
130                }
131
132                else if (descSortExpression.Equals(sortColumns[i]))
133                {
134                    Array.Clear(sortColumns, i, 1);
135                }
136            }
137
138            return String.Join(",", sortColumns).Replace(",,", ",").TrimStart(",".ToCharArray());
139
140        }
141        /**//// <summary>
142        ///  获取当前的表达式对所选列进行排序
143        /// </summary>
144        protected void SearchSort
145        {
146            sortOrder = "";
147            sortOrderNo = -1;
148            for (int i = 0; i < sortColumns.Length; i++)
149            {
150                if (sortColumns[i].StartsWith(sortColumn))
151                {
152                    sortOrderNo = i + 1;
153                    if (AllowMultiColumnSorting)
154                    {
155                        sortOrder = sortColumns[i].Substring(sortColumn.Length).Trim();
156                    }
157                    else
158                    {
159                        sortOrder = ((SortDirection == SortDirection.Ascending) ? "ASC" : "DESC");
160                    }
161                }
162            }
163        }
164        /**//// <summary>
165        ///  绘制升序降序的图片
166        /// </summary>
167        protected void DisplaySortOrderImages(string sortExpression, GridViewRow dgItem)
168        {
169            string[] sortColumns = sortExpression.Split(",".ToCharArray());
170
171            for (int i = 0; i < dgItem.Cells.Count; i++)
172            {
173                if (dgItem.Cells[i].Controls.Count > 0 && dgItem.Cells[i].Controls[0] is LinkButton)
174                {
175                    string sortOrder;
176                    int sortOrderNo;
177                    string column = ((LinkButton)dgItem.Cells[i].Controls[0]).CommandArgument;
178                    SearchSort;
179                    if (sortOrderNo > 0)
180                    {
181                        string sortImgLoc = (sortOrder.Equals("ASC") ? SortAscImageUrl : SortDescImageUrl);
182
183                        if (sortImgLoc != String.Empty)
184                        {
185                            Image imgSortDirection = new Image();
186                            imgSortDirection.ImageUrl = sortImgLoc;
187                            dgItem.Cells[i].Controls.Add(imgSortDirection);
188
189                        }
190                        else
191                        {
192
193                            if (AllowMultiColumnSorting)
194                            {
195                                Literal litSortSeq = new Literal();
196                                litSortSeq.Text = sortOrderNo.ToString();
197                                dgItem.Cells[i].Controls.Add(litSortSeq);
198
199                            }
200                        }
201                    }
202                }
203            }
204
205        }
206        #endregion
207    }

第二:详尽的分页信息显示,此功能没有封装成控件形式,直接在GridView_DataBound事件中对尾页操作即可。
下面是多列排序与分页显示代码的演示

<script runat="server">
    
void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
    
{
        GridViewRow pagerRow 
= CustomersGridView.BottomPagerRow;
        DropDownList pageList 
= (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
        CustomersGridView.PageIndex 
= pageList.SelectedIndex;
    }

    
void CustomersGridView_DataBound(Object sender, EventArgs e)
    
{
        GridViewRow pagerRow 
= CustomersGridView.BottomPagerRow;

        LinkButton linkBtnFirst 
= (LinkButton)pagerRow.Cells[0].FindControl("linkBtnFirst");
        LinkButton linkBtnPrev 
= (LinkButton)pagerRow.Cells[0].FindControl("linkBtnPrev");
        LinkButton linkBtnNext 
= (LinkButton)pagerRow.Cells[0].FindControl("linkBtnNext");
        LinkButton linkBtnLast 
= (LinkButton)pagerRow.Cells[0].FindControl("linkBtnLast");

        
if (CustomersGridView.PageIndex == 0)
        
{
            linkBtnFirst.Enabled 
= false;
            linkBtnPrev.Enabled 
= false;
        }

        
else if (CustomersGridView.PageIndex == CustomersGridView.PageCount-1)
        
{
            linkBtnLast.Enabled  
= false;
            linkBtnNext.Enabled 
= false;
        }

        
else if (CustomersGridView.PageCount<=0)
        
{
            linkBtnFirst.Enabled 
= false;
            linkBtnPrev.Enabled 
= false;
            linkBtnNext.Enabled 
= false;
            linkBtnLast.Enabled 
= false;
        }

        DropDownList pageList 
= (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
        Label pageLabel 
= (Label)pagerRow.Cells[0].FindControl("CurrentPageLabel");

        
if (pageList != null)
        
{
            
for (int i = 0; i < CustomersGridView.PageCount; i++)
            
{
                
int pageNumber = i + 1;
                ListItem item 
= new ListItem(pageNumber.ToString() + "/" + CustomersGridView.PageCount.ToString(), pageNumber.ToString());
                
if (i == CustomersGridView.PageIndex)
                
{
                    item.Selected 
= true;
                }

                pageList.Items.Add(item);

            }


        }

        
if (pageLabel != null)
        
{
            
int currentPage = CustomersGridView.PageIndex + 1;
            pageLabel.Text 
= "当前页: " + currentPage.ToString() +
              
" / " + CustomersGridView.PageCount.ToString();
        }

    }


</script>

<html>
<body>
    
<form id="Form1" runat="server">
        
<h3>
            GridView PagerTemplate Example
</h3>
        
<asp:WebGridView ID="CustomersGridView" DataSourceID="CustomersSqlDataSource" AutoGenerateColumns="true"
            AllowPaging
="true" OnDataBound="CustomersGridView_DataBound" SortAscImageUrl="~/images/arrow-up.gif" SortDescImageUrl="~/images/arrow-down.gif" runat="server" AllowSorting="True" Width="723px">
            
<PagerStyle ForeColor="Blue" BackColor="LightBlue" />
            
<PagerTemplate>
                
<table width="100%">
                    
<tr>
                        
<td width="70%">
                            
<asp:Label ID="MessageLabel" ForeColor="Blue" Text="页码:" runat="server" />
                            
<asp:DropDownList ID="PageDropDownList" AutoPostBack="true" OnSelectedIndexChanged="PageDropDownList_SelectedIndexChanged"
                                runat
="server" />
                            
<asp:LinkButton CommandName="Page" CommandArgument="First" ID="linkBtnFirst" runat="server">首页</asp:LinkButton>
                            
<asp:LinkButton CommandName="Page" CommandArgument="Prev" ID="linkBtnPrev" runat="server">上一页</asp:LinkButton>
                            
<asp:LinkButton CommandName="Page" CommandArgument="Next" ID="linkBtnNext" runat="server">下一页</asp:LinkButton>
                            
<asp:LinkButton CommandName="Page" CommandArgument="Last" ID="linkBtnLast" runat="server">末页</asp:LinkButton>
                        
</td>
                        
<td width="70%" align="right">
                            
<asp:Label ID="CurrentPageLabel" ForeColor="Blue" runat="server" />
                        
</td>
                    
</tr>
                
</table>
            
</PagerTemplate>
       
</asp:WebGridView>
        
<asp:SqlDataSource ID="CustomersSqlDataSource" SelectCommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
            ConnectionString
="<%$ ConnectionStrings:NorthWindConnectionString%>" runat="server">
        
</asp:SqlDataSource>

    
</form>
</body>
</html>


效果:

 

 

 

 

 

 

 
ASP.NET4 GridView的四种排序样式详解 与ASP.NET 的其他Web控件一能够,Gridview控件拥有很多不同的CSS样式属性设置,包括象CssClass,Font字体,ForeColor,BackColor,BackColor, Width, Height等等。Gridview还包括了一些应用在表格的行上的样式属性,比如RowStyle, AlternatingRowStyle, HeaderStyle,和PagerStyle,它们都提供了象CssClass和Font这些基本的属性设置。  在 ASP.NET 4.0中的Gridview控件中,新增加了四个样式属性:SortedAscendingHeaderStlye,Sort 立即下载

相关推荐

Telegram 担保交易系统搭建指南:安全可靠的交易流程实现

本文介绍了基于Telegram Bot API搭建担保交易系统的完整方案。该系统通过第三方资金托管机制解决买卖双方信任问题,支持"付款后发货"和"收货后放款"的交易流程。文章详细阐述了系统架构设计,包括Telegram Bot交互层、后端业务逻辑层、数据库层和支付接口层。核心实现步骤涵盖:1)订单创建模块处理交易信息;2)支付处理模块集成Stripe Escrow实现资金托管;3)确认收货模块完成资金划转。系统采用PostgreSQL存储交易数据,并通过FastAPI

jingpide9527的博客 1945

asp.net中GridView排序的手动实现

GridView自带了数据排序功能。在设计视图下,只能对GridView的排序数据列和排序方向进行静态设置。如果要自己实现排序功能,在后台程序中,则需要用Attributes方式对GridView的这两个属性进行动态设置。 示例如下: (前台) @ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.asp

一百万个为什么的专栏 1324

VoIP概述

VoIP统一通信与VoIPVoIP与传统电话比较VoIP各项产品设备的类型及应用 统一通信与VoIP 统一通信指的是把计算机与传统通信技术统一成一体的新通信模式,融合计算机网络与传统通信网络在一个网络平台上,实现电话、传真、数据传输、音视频会议、呼叫中心、即时通信等众多应用服务 VoIP又称IP电话或IP网络电话,是Voice Over IP的缩写,这种技术通过对语音信号进行编码数字化,压缩处理成压缩帧,然后转换成为IP数据包在TCP/IP网络上进行传输,从而达到了在IP网络上进行语音通信目的 VoIP与传

kaminao的博客 4355

关于GridView点击列头排序

关于GridView列头点击排序 做ASP.NET Web项目开发,经常会和GridView打交道,免不了会根据需求要有列头点击排序的功能,在网上看了很多资料都没有把实例讲全,下面以linq原生语法完成点击列头排序实例: 1)在页面源码中设置AllowSorting属性为True并增加OnSorting事件,以及在绑定列中增加对应的SortExpression属性,如下图:

moshansk的专栏 3339

Stanford CS230深度学习(一)

斯坦福CS230可以作为深度学习的入门课,最近我也在跟着看视频、完成编程作业。首先列出使用的资源链接,然后给出第一课的理解和编程作业的代码。 所有资料如下: 一、课程连接: b站课堂讲授版:Stanford CS230(吴恩达 深度学习 Deep Learning | Autumn 2018)(中英双字幕) (一共10个视频,每周一个,但是每个视频对应下面的配套视频较多) Coursera配套视...

weixin_44750583的博客 2380

ARM双核锁步DCLS Lockstep技术研究(FPGA实现)

基于《Applying Dual-Core Lockstep in Embedded Processors to Mitigate Radiation-induced Soft Errors》文章总结 RISC-V双核锁步DCLS Lockstep技术参考之前文章: RISC-V双核锁步DCLS Lockstep技术总结_远古架构师alanwu的博客-优快云博客https://blog.csdn.net/heyuming20062007/article/details/123329537ARM+RIS

heyuming20062007的博客 8726

Gridview标题头添加排序图片

向gridview标题头中添加排序图片,当点击某一个头标题时,在标题中出现升序箭头向上的图片,再点击一次时降序,在标题中出现箭头向下的图片,初始页面时在标题头中并不现实任何图片。 先定义好一个gridview,在gridview数据绑定结束后调下面方法。 protected void SortForImage(string sortDirection, string sortExpress...

weixin_34391854的博客 163

STM32水质检测小船设计

近年来水资源的监测与保护越来越受到政府部门的重视,抓好源头问题才能做好环境治理,因此建立完善的水环境监测系统是很有必要的。针对当前水环境参数监测中存在的各种问题,例如水质信息采集范围固定、灵活部署监测能力差、信息采集不够智能化、人机交互能力不足等,这些问题导致水环境监测设备不够灵活。 针对上述问题,本文设计了一款基于STM32的水环境监测小船,提出了一种灵活、智能的监测水环境信息的方式。本文将船体作为传感器和控制板的载体,具有可移动性,有利于灵活广泛的采集水环境信息。 本设计选用STM32F103C8T

m0_74026776的博客 1368

python中十位怎么表示_在Python中基于单位,十位,百位数对列表进行排序

假设我有一个列表,我想按以下模式对数字进行排序:A = [3, 30, 34, 256, 5, 9]首先按单位数字排序,如果单位数字相同则我们将比较数十位然后百位.如果按此规则对A进行排序,则:A = [9, 5, 34, 3, 30, 256]9 is the highest digit at Unit place5 is second highest3, 34, 30 since unit d...

weixin_39696197的博客 1282

PCL 4PCS算法实现点云粗配准【2026最新版】

博客长期更新,本文最新更新时间为:2026年5月11日。

点云侠的博客 30万+

【雕爷学编程】Arduino FOC 之 AS5600 磁编码器的模拟电压与IIC通信

在Arduino平台上实现FOC可以提供平滑的运行和高度的扭矩、速度和位置控制,它通过精确控制电机的电流和电压来实现高效率、高精度和低噪声的操作。案例三在使用I2C通信读取角度值的基础上,添加了设置角度范围的功能。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。1、高性能电机控制:FOC是一种高级的电机控制算法,可以精准控制PMSM(永磁同步电机)和BLDC(无刷直流)电机,实现平滑的转速和扭矩输出。

雕爷学编程 1497

override ASP.Net2.0 GridView 多列排序,显示排序图标,分页

ASP.Net2.0 GridView 多列排序,显示排序图标,分页。          最近在使用ASP.net 2.0的GridView 控件时,发现排序与分页功能Microsoft实现的都很简单,比如排序,在点击列名的时候来触发整页的PostBack,然后排序,但是在列头上没有一个显示升序降序的图标,这会让最终用户使用时很迷惑,因为不知道是升序了还是降序了,所以今天首先解决的第一问题就是

MaoMao_1983的专栏 822

STM32入门教程:人脸识别

STM32CubeMX配置 打开STM32CubeMX,创建一个新的工程,并选择你使用的STM32系列和具体型号。根据摄像头模块的规格,将摄像头的输出引脚连接到相应的STM32引脚上。人脸识别是一种非常常见的人工智能应用,它可以通过摄像头捕捉到的图像,识别出图像中的人脸并进行相关的分析和处理。在本教程中,我们将使用STM32开发板和相关传感器,通过指导你搭建一个基于STM32的简单人脸识别系统,并编写相应的代码来实现该功能。另外,为了达到更好的人脸识别效果,可能需要使用更高性能的处理器和更复杂的算法。

吃不胖. 374

ASP.Net2.0GridView多列排序,显示排序图标,分页

最近在使用ASP.Net 2.0的GridView 控件时,发现排序与分页功能Microsoft实现的都很简单,比如排序,在点击列名的时候来触发整页的PostBack,然后排序,但是在列头上没有一个显示升序降序的图标,这会让最终用户使用时很迷惑,因为不知道是升序了还是降序了,所以今天首先解决的第一问题就是升序降序在列上显示图标,第二要解决的问题是默认GridView按列排序只能排一列的,也就是不能

zgqtxwd的专栏 494

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ASP.Net2.0 GridView 多列排序,显示排序图标,分页(转)

最近在使用ASP.net 2.0的GridView 控件时,发现排序与分页功能Microsoft实现的都很简单,比如排序,在点击列名的时候来触发整页的PostBack,然后排序,但是在列头上没有一个显示升序降序的图标,这会让最终用户使用时很迷惑,因为不知道是升序了还是降序了,所以今天首先解决的第一问题就是升序降序在列上显示图标,第二要解决的问题是默认GridView按列排序只能排一列的,也就是不能...

weixin_33770878的博客 124

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VS2005中分页和多列排序

       最近在使用ASP.net 2.0的GridView 控件时,发现排序与分页功能Microsoft实现的都很简单,比如排序,在点击列名的时候来触发整页的PostBack,然后排序,但是在列头上没有一个显示升序降序的图标,这会让最终用户使用时很迷惑,因为不知道是升序了还是降序了,所以今天首先解决的第一问题就是升序降序在列上显示图标,第二要解决的问题是默认GridView按列排序只能排

北风的专栏 559

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ASP.net web应用 GridView控件常用方法

上一步我们给GridView绑定了数据,但是他会把所有的数据全部显示出来,如果我们表中有部分信息不想显示出来怎么办?这个关键属性为 AutoGenerateColumns可设置值为bool类型 AutoGenerateColumns="false" 时会关闭自动加载全部列接下来的每列数据显示就需要我们在前台手动添加

2203_75593971的博客 3559

gridview 排序时候显示箭头

在asxc或aspx页面中的GridView中加入 如:OnRowCreated="GridView1_RowCreated"然后在cs文件中加入://在GridView的RowCreated事件中        protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)        {         i

kukufei的专栏 1552
上一篇: GridView控件自定义分页详解
下一篇: ASP.NET程序中常用的三十三种代码
Alexantao
博客等级 码龄19年 86粉丝 185原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值