当前位置: 首页 > news >正文

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

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

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

首先我们可以新建一个类库程序,主要需要引用System.Web.Dll文件
然后新建一个类,这个类继承与GridView控件,我们只需要对部分方法进行重新即可。
我的演示的例子,采用了单列排序,如果启用多列排序,把控件的AllowMultiColumnSorting设置为True就是
多列排序。
  public   class  WebGridView:GridView
    
... {
        属性
属性#region 属性
        
/**//**//**//// <summary>
        
/// 是否启用或者禁止多列排序
       
/// </summary>

        [
        Description(
"是否启用多列排序功能"),
        Category(
"排序"),
        DefaultValue(
"false"),
        ]
        
public bool AllowMultiColumnSorting
        
...{
            
get
            
...{
                
object o = ViewState["EnableMultiColumnSorting"];
                
return (o != null ? (bool)o : false);
            }

            
set
            
...{
                AllowSorting 
= true;
                ViewState[
"EnableMultiColumnSorting"= value;
            }

        }

        
/**//**//**//// <summary>
        
/// 升序时显示图标
        
/// </summary>

        [
        Description(
"升序时显示图标"),
        Category(
"排序"),
        Editor(
"System.Web.UI.Design.UrlEditor"typeof(System.Drawing.Design.UITypeEditor)),
        DefaultValue(
""),

        ]
        
public string SortAscImageUrl
        
...{
            
get
            
...{
                
object o = ViewState["SortImageAsc"];
                
return (o != null ? o.ToString() : "");
            }

            
set
            
...{
                ViewState[
"SortImageAsc"= value;
            }

        }

        
/**//**//**//// <summary>
        
/// 降序时显示图标
        
/// </summary>

        [
        Description(
"降序时显示图标"),
        Category(
"排序"),
        Editor(
"System.Web.UI.Design.UrlEditor"typeof(System.Drawing.Design.UITypeEditor)),
        DefaultValue(
""),
        ]
        
public string SortDescImageUrl
        
...{
            
get
            
...{
                
object o = ViewState["SortImageDesc"];
                
return (o != null ? o.ToString() : "");
            }

            
set
            
...{
                ViewState[
"SortImageDesc"= value;
            }

        }

        
#endregion

        重写方法
重写方法#region 重写方法
        
protected override void OnSorting(GridViewSortEventArgs e)
        
...{
            
if (AllowMultiColumnSorting)
            
...{
                e.SortExpression 
= GetSortExpression(e);
            }


            
base.OnSorting(e);
        }

        
protected override void OnRowCreated(GridViewRowEventArgs e)
        
...{
            
if (e.Row.RowType == DataControlRowType.Header)
            
...{
                
if (SortExpression != String.Empty)
                
...{
                    DisplaySortOrderImages(SortExpression, e.Row);
                    
this.CreateRow(00, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
                }

            }

            
base.OnRowCreated(e);
        }

        
#endregion

        受保护的方法
受保护的方法#region 受保护的方法
        
/**//**//**//// <summary>
        
///  获取排序表达式
        
/// </summary>

        protected string GetSortExpression(GridViewSortEventArgs e)
        
...{
            
string[] sortColumns = null;
            
string sortAttribute = SortExpression;

            
if (sortAttribute != String.Empty)
            
...{
                sortColumns 
= sortAttribute.Split(",".ToCharArray());
            }

            
if (sortAttribute.IndexOf(e.SortExpression) > 0 || sortAttribute.StartsWith(e.SortExpression))
            
...{
                sortAttribute 
= ModifySortExpression(sortColumns, e.SortExpression);
            }

            
else
            
...{
                sortAttribute 
+= String.Concat(",", e.SortExpression, " ASC ");
            }

            
return sortAttribute.TrimStart(",".ToCharArray()).TrimEnd(",".ToCharArray());

        }

        
/**//**//**//// <summary>
        
///  修改排序顺序
        
/// </summary>

        protected string ModifySortExpression(string[] sortColumns, string sortExpression)
        
...{
            
string ascSortExpression = String.Concat(sortExpression, " ASC ");
            
string descSortExpression = String.Concat(sortExpression, " DESC ");

            
for (int i = 0; i < sortColumns.Length; i++)
            
...{

                
if (ascSortExpression.Equals(sortColumns[i]))
                
...{
                    sortColumns[i] 
= descSortExpression;
                }


                
else if (descSortExpression.Equals(sortColumns[i]))
                
...{
                    Array.Clear(sortColumns, i, 
1);
                }

            }


            
return String.Join(",", sortColumns).Replace(",,"",").TrimStart(",".ToCharArray());

        }

        
/**//**//**//// <summary>
        
///  获取当前的表达式对所选列进行排序
        
/// </summary>

        protected void SearchSortExpression(string[] sortColumns, string sortColumn, out string sortOrder, out int sortOrderNo)
        
...{
            sortOrder 
= "";
            sortOrderNo 
= -1;
            
for (int i = 0; i < sortColumns.Length; i++)
            
...{
                
if (sortColumns[i].StartsWith(sortColumn))
                
...{
                    sortOrderNo 
= i + 1;
                    
if (AllowMultiColumnSorting)
                    
...{
                        sortOrder 
= sortColumns[i].Substring(sortColumn.Length).Trim();
                    }

                    
else
                    
...{
                        sortOrder 
= ((SortDirection == SortDirection.Ascending) ? "ASC" : "DESC");
                    }

                }

            }

        }

        
/**//**//**//// <summary>
        
///  绘制升序降序的图片
        
/// </summary>

        protected void DisplaySortOrderImages(string sortExpression, GridViewRow dgItem)
        
...{
            
string[] sortColumns = sortExpression.Split(",".ToCharArray());

            
for (int i = 0; i < dgItem.Cells.Count; i++)
            
...{
                
if (dgItem.Cells[i].Controls.Count > 0 && dgItem.Cells[i].Controls[0is LinkButton)
                
...{
                    
string sortOrder;
                    
int sortOrderNo;
                    
string column = ((LinkButton)dgItem.Cells[i].Controls[0]).CommandArgument;
                    SearchSortExpression(sortColumns, column, 
out sortOrder, out sortOrderNo);
                    
if (sortOrderNo > 0)
                    
...{
                        
string sortImgLoc = (sortOrder.Equals("ASC"? SortAscImageUrl : SortDescImageUrl);

                        
if (sortImgLoc != String.Empty)
                        
...{
                            Image imgSortDirection 
= new Image();
                            imgSortDirection.ImageUrl 
= sortImgLoc;
                            dgItem.Cells[i].Controls.Add(imgSortDirection);

                        }

                        
else
                        
...{

                            
if (AllowMultiColumnSorting)
                            
...{
                                Literal litSortSeq 
= new Literal();
                                litSortSeq.Text 
= sortOrderNo.ToString();
                                dgItem.Cells[i].Controls.Add(litSortSeq);

                            }

                       }

                    }

                }

            }


        }

        
#endregion

    }
第二:详尽的分页信息显示,此功能没有封装成控件形式,直接在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 = " ~imagesarrow-up.gif "  SortDescImageUrl = " ~imagesarrow-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 >

效果:

 

转载于:https://www.cnblogs.com/zjoch/archive/2008/08/29/1279275.html

相关文章:

  • C#正则表达式类Match和Group类的理解
  • 声音音质评价专业述语
  • 使用Document_Handler_Example修改的注意事项
  • iptables 范例
  • 将asp.net站点转化为sharepoint站点
  • Silverlight是什么
  • Sqlite DateTime 类型 读取和写入格式 注意的问题
  • 文档知多少---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十五)...
  • 我在博客园里的第一篇文章
  • C#模拟网站用户登录
  • 平时关注.net今个儿用java做了个计算器.
  • FLEX:改变FLEX的默认LOADING效果-分别使用swf,PNG,gif
  • 婚礼
  • 快手 (KuaiShou.NET) 之账本应用
  • 三大搜索引擎 承诺“公正搜索”
  • Docker下部署自己的LNMP工作环境
  • extjs4学习之配置
  • java正则表式的使用
  • k8s 面向应用开发者的基础命令
  • laravel5.5 视图共享数据
  • Laravel核心解读--Facades
  • nginx 负载服务器优化
  • PHP 7 修改了什么呢 -- 2
  • vue2.0项目引入element-ui
  • 关于for循环的简单归纳
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 设计模式(12)迭代器模式(讲解+应用)
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 数据仓库的几种建模方法
  • 用mpvue开发微信小程序
  • 终端用户监控:真实用户监控还是模拟监控?
  • 积累各种好的链接
  • #微信小程序:微信小程序常见的配置传旨
  • (4.10~4.16)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十六)Flask之蓝图
  • (四)图像的%2线性拉伸
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET中 MVC 工厂模式浅析
  • @软考考生,这份软考高分攻略你须知道
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [BT]BUUCTF刷题第4天(3.22)
  • [bzoj 3534][Sdoi2014] 重建
  • [C#]winform部署yolov5-onnx模型
  • [C++]priority_queue的介绍及模拟实现