[转]Gridview实现多列排序,并显示图标
本文转自:http://blog.csdn.net/gmjinrong/article/details/4516301
GridView实现支持多列排序,并显示升、降序图标上网找了很多资料参考才解决了问题
现分享如下:
1.新建StyleSheet.css,图片自己准备及路径需自行更改.
.alternatingrowstyle{
/* background-color:#f9f9f9;*/
background-color:White;
}
.sortascheaderstyle{
background:#F2F2F2 url(../Img/sort_asc.gif) no-repeat scroll right center;
padding-left:5px;
}
.sortdescheaderstyle{
background:#F2F2F2 url(../Img/sort_desc.gif) no-repeat scroll right center;
padding-left:5px;
}
.ItemStyle
{
}
.gridview
{
word-break:break-all;
word-wrap:break-word
}
headerstyle{
/* background-color:#e5e5e5;*/
background-color:#F2F2F2;
height:23px;
}
.headerstyle th {
border:1px solid #bbbbbb;
padding-left:5px;
text-align:left;
}
.headerstyle a {
color:black;
}
.pagerstyle{
color:#444444;
background-color:#e5e5e5;
font-size:x-small;
text-align:right;
}
2.前台
引用:
<head runat="server">
<link href="css/StyleSheet.css" rel="Stylesheet" type="text/css" />
</head>
Gridview部分:
<asp:GridView ID="givOrder" runat="server" CssClass="gridview"
AutoGenerateColumns="False" OnRowDataBound="givOrder_RowDataBound"
DataKeyNames="Rowid" AllowSorting="True"
onsorting="givOrder_Sorting" >
<AlternatingRowStyle CssClass="alternatingrowstyle" />
<HeaderStyle CssClass="headerstyle" />
<PagerStyle CssClass="pagerstyle" />
<Columns>
<asp:TemplateField ItemStyle-HorizontalAlign="Center" ItemStyle-Width="30px">
<ItemTemplate>
<%# Convert.ToInt32(DataBinder.Eval(Container, "DataItemIndex")) + 1 %>
</ItemTemplate>
<ItemStyle CssClass="ItemStyle"/>
</asp:TemplateField>
<asp:TemplateField ItemStyle-HorizontalAlign="Center"
HeaderText="订单号" SortExpression="OrderNo">
<ItemTemplate>
<asp:TextBox ID="txtOrderNo" runat="server" TextMode="MultiLine" CssClass="textBox" Rows="1" Width="60px" Text='<%# Bind("orderNo") %>' ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ItemStyle-HorizontalAlign="Center"
HeaderText="客户" SortExpression="CustomerName" >
<ItemTemplate>
<asp:TextBox ID="txtCustomerName" runat="server" TextMode="MultiLine" CssClass="textBox" Rows="1" Width="100px" Text='<%# Bind("CustomerName") %>' ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
后台实现:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridViewDataBind(); //自己实现的数据绑定DataSource
IDictionary<string, string> idic = new Dictionary<string, string>();
ViewState["sortIDic"] = idic;
}
}
protected void givOrder_Sorting(object sender, GridViewSortEventArgs e)
{
int cellIndex = -1;
foreach (DataControlField field in givOrder.Columns)
{
if (field.SortExpression == e.SortExpression)
{
cellIndex =givOrder.Columns.IndexOf(field);
if (ViewState["cellindex"] != null)
{
int oldCellindex=int.Parse(ViewState["cellindex"].ToString());
if (oldCellindex != cellIndex)
givOrder.Columns[oldCellindex].HeaderStyle.CssClass = "";
}
break;
}
}
string sortExpression = e.SortExpression;
IDictionary<string, string> idic = ViewState["sortIDic"] as IDictionary<string, string>;
if (!idic.ContainsKey(sortExpression))
{
idic.Add(e.SortExpression, e.SortDirection.ToString().Replace("Ascending", "ASC").Replace("Descending", "DESC"));
givOrder.Columns[cellIndex].HeaderStyle.CssClass = "sortascheaderstyle";
}
else
{
string strSortDirection = idic[e.SortExpression];
if (strSortDirection == "ASC")
{
idic[e.SortExpression] = "DESC";
givOrder.Columns[cellIndex].HeaderStyle.CssClass = "sortdescheaderstyle";
}
else if (strSortDirection == "DESC")
{
idic.Remove(e.SortExpression);
givOrder.Columns[cellIndex].HeaderStyle.CssClass = "";
}
}
ViewState["sortIDic"] = idic;
ViewState["cellindex"] = cellIndex;
SortGridView();
}
/// <summary>
/// 实现多行排序
/// </summary>
private void SortGridView()
{
StringBuilder sbSortExpression = new StringBuilder();
IDictionary<string, string> idic = ViewState["sortIDic"] as IDictionary<string, string>;
string[] strkeys = new string[idic.Count];
if (idic.Count > 0)
{
idic.Keys.CopyTo(strkeys, 0);
for (int i = 0; i <idic.Count; i++)
{
sbSortExpression.Append(strkeys[i]);
sbSortExpression.Append(" ");
sbSortExpression.Append(idic[strkeys[i]]);
if (i != idic.Count-1)
sbSortExpression.Append(", ");
}
}
clsborder l_order = new clsborder();
DataTable dt = l_order.SelectOrder();
DataView dv = dt.DefaultView;
dv.Sort = sbSortExpression.ToString();
givOrder.DataSource = dv;
givOrder.DataBind();
}
[转]Gridview实现多列排序,并显示图标的更多相关文章
- GridView多列排序
public class WebGridView:GridView { 属性#region 属性 /**//// <summary> /// 是否启用或者禁止多列排序 /// </s ...
- ASP.NET 为GridView添加序号列,且支持分页连续累计显示
为GridView添加序号列,且支持分页连续累计显示,废话不多说,直接上代码: <%@ Page Language="C#" AutoEventWireup="tr ...
- python 全栈开发,Day114(装饰器,排序规则,显示列,添加按钮,定制ModelForm,自定义列表页面,自定制URL)
一.装饰器 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象. 装饰器的应用场景:比如插入日志,性能测试,事务处理, ...
- 详解ASP.NET4 GridView的四种排序样式
与ASP.NET 的其他Web控件一能够,Gridview控件拥有很多不同的CSS样式属性设置,包括象CssClass,Font字体,ForeColor,BackColor,BackColor, Wi ...
- Jtable 表格按多列排序(支持中文汉字排序)
这两天公司让做一个Jtable表格的排序,首先按A列排序,在A列相等时按B列排序,B列相等时按C列排序,ABC三列可以任意指定,最多分三列,这样的一个需求.由于我是大神,所以必须做了出来.ok,不自恋 ...
- 自定义多列排序:C++/Java实现
前言: 有些时候,我们在编程中会遇到多列排序的需求.假如在execle,这事儿就太easy了.不过没办法,现在就需要你用Java或者C++实现这样一个功能! 比如将下表无序的数据通过重排之后按照以下规 ...
- 向GridView的模板列绑定OnClientClick的函数时出现了奇怪的问题
原文:向GridView的模板列绑定OnClientClick的函数时出现了奇怪的问题 GridView的一个模板列中的内容是按钮,需要实现以下的效果: GridView分页显示数据,点击编辑按钮(模 ...
- 如何让Gridview在没有数据的时候显示表头(asp.net)
原文:如何让Gridview在没有数据的时候显示表头(asp.net) 1.前言 当对GridView控件进行数据绑定时,如果绑定的记录为空,网页上就不显示GridView,造成页面部分空白,页面布局 ...
- BootstrapTable的列排序怎么搞
1.BootstrapTable的列排序怎么搞. 先搞一个table,使用ajax将数据查询出来,然后可以在所有列都加上排序.满足自己的需求. data-sortable="true&quo ...
随机推荐
- Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性
在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...
- AbpZero兼容sql2008
笔者遇到的问题是公司服务器用的MSSQL的版本是2008,但AbpZero一些封装好的ORM语法只兼容到2012版本: 例如我遇到的问题就是AbpZero的分页就报这个错 然后我们要修改的是Entit ...
- 673. Number of Longest Increasing Subsequence
Given an unsorted array of integers, find the number of longest increasing subsequence. Example 1: I ...
- hdoj1757 A Simple Math Problem(矩阵快速幂)
构造矩阵. 1,当k<=9时,直接输出: 2,当k >9时,先求原矩阵的(k-9)次幂res矩阵,在求幂的过程中对m取余.最后res矩阵再与矩阵F相乘得到矩阵ans,相乘的过程中对m取余. ...
- 消息中间件(一)MQ详解及四大MQ比较
一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流 ...
- Java堆内存溢出模拟
先了解一下Java堆: 关于Java内存区域的分配,可以查看Java运行时数据区域一篇文章. Java堆是虚拟机内存管理中最大的一块区域,该区域是线程共享的,某Java进程中所有的线程都可以访问该区域 ...
- Java抽象工厂模式
Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...
- AppScan安全测试入门操作
appscan:可以对网站等 Web 应用进行自动化的应用安全扫描和测试,也就是经常说的安全测试 工作原理:是通过对web应用进行安全攻击来检查网站是否存在漏洞. 初步了解到的 创建新的扫描-> ...
- Vim实用技巧系列 - 开篇
作者使用Vim已经有一段时间了,深深觉得它是一个非常强大的编辑器,使用习惯之后效率很高.最大的缺点是学习曲线比较陡峭.因此作者希望分享一些自己在实际使用中的经验来帮助初学者,同时也帮助作者自己学习. ...
- 配置文件备份方案(expect+shell)
需求描述:备份所有线上服务器squid.httpd.mysql.nginx的配置文件 环境:在公司内网采用expect+shell脚本模式,进行批量备份.expect脚本通过ssh登录服务器,从本地c ...