gridview自定义排序
效果如图:
首先允许排序:AllowSorting="True";开启gridview的排序事件onsorting="GridView1_Sorting",也可以双击sorting事件;其次是设置nrowdatabound="GridView1_RowDataBound",也可以双击GridView1_RowDataBound
关联排序表达式SortExpression="字段名称"
代码明细:
前台代码:
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="4" ForeColor="#333333" Width="800px"
AllowSorting="True"
onrowdatabound="GridView1_RowDataBound" onsorting="GridView1_Sorting"
PageSize="15">
<PagerSettings Mode="NumericFirstLast"/>
<RowStyle BackColor="#EFF3FB"/>
<Columns>
<asp:BoundField DataField="CourseResID" HeaderText="课程ID"/>
<asp:BoundField DataField="CourseName" HeaderText="课程名" SortExpression="CourseName">
<ItemStyle Width="100px"/>
</asp:BoundField>
<asp:BoundField DataField="upTime" HeaderText="更新时间"
DataFormatString="{0:yyyy-MM-dd}" SortExpression="upTime">
<ItemStyle Width="160px" HorizontalAlign="Right"/>
</asp:BoundField>
<asp:BoundField DataField="UserName" HeaderText="用户名" SortExpression="UserName">
<ItemStyle Width="80px" ForeColor="#33CC33"/>
</asp:BoundField>
</Columns>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White"/>
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Right"/>
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333"/>
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White"/>
<EditRowStyle BackColor="#2461BF"/>
<AlternatingRowStyle BackColor="White"/>
</asp:GridView>
</div>
</form>
</body>
</html>
数据读取
/// 获取绑定数据
///</summary>
///<param name="orderFields">排序信息</param>
///<returns>返回表</returns>
public DataTable GetContents(string orderFields)
{
string cmdTxt ="Select top 30 * From CourseRes";
//判断排序字段是否为空,如果不为空则将排序信息加在Sql语句后面
if (!string.IsNullOrEmpty(orderFields))
{
cmdTxt +=" Order By "+ orderFields;
}
SqlConnection conn =new SqlConnection(@"Data Source=HAPPY-WITBANK;Initial Catalog=le2011;Persist Security Info=True;User ID=sa;Password=happy");
SqlCommand comm =new SqlCommand(cmdTxt, conn);
SqlDataAdapter adap =new SqlDataAdapter(comm);
DataTable dt =new DataTable();
adap.Fill(dt);
return dt;
}
排序信息代码,可以通用;注,要用时只需将上面的绑定Sql数据修改即可
{
protectedvoid Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataLoad();
}
}
///<summary>
/// 数据加载
///</summary>
privatevoid DataLoad()
{
string sortedField ="";
//获取排序字段的信息
if (ViewState["SortedField"] !=null)
{
//如果存在排序信息,则将排序信息转换为字典存储
Dictionary<string, string> sorted = (Dictionary<string, string>)ViewState["SortedField"];
//便利取值
foreach (KeyValuePair<string, string> kvp in sorted)
{
//key排序字段,value排序信息
sortedField = kvp.Key +""+ kvp.Value;
}
}
//数据绑定
this.GridView1.DataSource = GetContents(sortedField);
this.GridView1.DataBind();
}
protectedvoid GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
#region//加排序的头方法
//判断是否是表头
if (e.Row.RowType == DataControlRowType.Header)
{
//判断是否进行排序
if (ViewState["SortedField"] !=null)
{
//恢复排序信息
Dictionary<string, string> order = (Dictionary<string, string>)ViewState["SortedField"];
//循环表头的单元格,判断是否有需要排序的单元格
for (int i =0; i < e.Row.Cells.Count; i++)
{
if (e.Row.Cells[i].Controls.Count >0)
{
//是否是排序字段信息
LinkButton lb = e.Row.Cells[i].Controls[0] as LinkButton;
if (lb !=null)
{
//反序和降序
if (order.ContainsKey(lb.CommandArgument))
{
Literal li =new Literal();
if (order[lb.CommandArgument] =="ASC")
{
li.Text ="▲";
}
else
{
li.Text ="▼";
}
//
e.Row.Cells[i].Controls.Add(li);
}
}
}
}
}
}
#endregion 完成排序
}
protectedvoid GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
//
Dictionary<string, string> sorted =new Dictionary<string, string>();
//从ViewState读取上一次的排序信息。
if (ViewState["SortedField"] ==null)
{
//如果没有排序信息,则将当前点击的对象(即点击的排序字段)和排序信息添加到字典中
sorted.Add(e.SortExpression, "ASC");
//将排序信息放在字典中保存
ViewState["SortedField"] = sorted;
}
else
{
//判断是否点击相同的排序,如果是相同的排序,
//就是用反序
//如果不是想通的排序,那就新的派讯,是用升序
sorted = (Dictionary<string, string>)ViewState["SortedField"];
if (sorted.ContainsKey(e.SortExpression))
{
if (sorted[e.SortExpression] =="ASC")
{
sorted[e.SortExpression] ="DESC";
}
else
{
sorted[e.SortExpression] ="ASC";
}
}
else
{
sorted.Clear();
sorted.Add(e.SortExpression, "ASC");
ViewState["SortedField"] = sorted;
}
}
//重新加载数据
DataLoad();
}
}
gridview自定义排序的更多相关文章
- Java集合框架实现自定义排序
Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优 ...
- DataTable自定义排序
使用JQ DataTable 的时候,希望某列数据可以进行自定义排序,操作如下:(以中文排序和百分比排序为例) 1:定义排序类型: //百分率排序 jQuery.fn.dataTableExt.oSo ...
- 干货之UICollectionViewFlowLayout自定义排序和拖拽手势
使用UICollectionView,需要使用UICollectionViewLayout控制UICollectionViewCell布局,虽然UICollectionViewLayout提供了高度自 ...
- DataGridView 绑定List集合后实现自定义排序
这里只贴主要代码,dataList是已添加数据的全局变量,绑定数据源 datagridview1.DataSource = dataList,以下是核心代码. 实现点击列表头实现自定义排序 priva ...
- 【转】c++中Vector等STL容器的自定义排序
如果要自己定义STL容器的元素类最好满足STL容器对元素的要求 必须要求: 1.Copy构造函数 2.赋值=操作符 3.能够销毁对象的析构函数 另外: 1. ...
- mysql如何用order by 自定义排序
mysql如何用order by 自定义排序 id name roleId aaa bbb ccc ddd eee ,MySQL可以通过field()函数自定义排序,格式:field(value,st ...
- python 自定义排序函数
自定义排序函数 Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 ...
- 定制对ArrayList的sort方法的自定义排序
java中的ArrayList需要通过collections类的sort方法来进行排序 如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法 调用sort方法时将Arr ...
- Qt之QHeaderView自定义排序(获取正确的QModelIndex)
简述 前几节中分享过关于自定义排序的功能,貌似我们之前的内容已经可以很好地解决排序问题了,但是,会由此引发一些很难发现的问题...比如:获取QModelIndex索引错误. 下面,我们先来实现一个整行 ...
随机推荐
- 模拟赛1101d2
幸运数字(number)Time Limit:1000ms Memory Limit:64MB题目描述LYK 最近运气很差,例如在 NOIP 初赛中仅仅考了 90 分,刚刚卡进复赛,于是它决定使用一些 ...
- 开发一款完备的android应用所必备的知识
原文:http://blog.csdn.net/xyz_lmn/article/details/17575709
- 手机站点动态效果插件TouchSlide
今天看到TouchSlide插件,觉得非常不错,关于使用情况请看demo,下载地址:http://www.superslide2.com/TouchSlide/downLoad.html
- WCF分布式开发必备知识(2):.Net Remoting
.Net Remoting技术,我们可以将其看作是一种分布式处理方式.作为应用程序之间通信的一种机制,.Net Remoting与MSMQ消息队列不同,它不支持离线脱机消息,另外只适合.Net平台间程 ...
- 【131031】<meta http-equiv=...> 的功能
1.定义语言 格式: 〈meta http-equiv=″Content-Type″ content=″text/html; charset=gb2312″〉 这是META最常见的用法,在制作网页时, ...
- 攻城狮在路上(壹) Hibernate(七)--- 通过Hibernate操纵对象(下)
一.与触发器协同工作: 当Hibernate与数据库的触发器协同工作时,会出现以下两类问题: 1.触发器使Session缓存中的数据和数据库中的不一致: 出现此问题的原因是触发器运行在数据库内,它执行 ...
- WPF中使用ReportViewer报表
本篇博客将介绍如何在WPF中使用ReportViewer控件. 1. 环境准备:下载安装最新版ReportViewer(PS:需要安装Microsoft SQL Server System CLR T ...
- UDP通讯程序设计
UDP通讯程序设计 一.函数化 1.1服务器使用的函数 创建socket----->socket 绑定地址-------->bind 接受数据-------->recvfrom 发送 ...
- The Basics of 3D Printing in 2015 - from someone with 16 WHOLE HOURS' experience
全文转载自 Scott Hanselman的博文. I bought a 3D printer on Friday, specifically a Printrbot Simple Metal fro ...
- 计算第K个素数
暂时没有时间整理,先放在这里: http://www.quora.com/Prime-Numbers/What-are-good-ways-to-find-nth-prime-number-in-th ...