DataGrid是ASP.NET中非常重要的一个控件。它能方便的让我们实现编辑、排序功能;但是排序功能默认的是升序(ASC),能不能让DataGrid同时实现升降序排列呢?这篇文章将给你一个比较好的解决方法。

下面的例子将告诉你如何给DataGrid动态添加sortexpression 和 sortdirection 属性,并通过DataView使DataGird中的数据按照这两个属性排列。在这个例子中使用的DataGrid的sortexpression属性只需要在sortcommand事件中设置(和通常的排序一样),DataGrid的sortexpression 属性保存了最后一次用来排序的字段名称,DataGrid的sortdirection 属性保存了最后一次用来排序的字段排列方式(“ASC”或者“DESC”)

页面设计:

1.       在页面上添加一个DataGrid;
2.       设置DataGrid的AllowSorting属性为True;
3.       设置AutogenerateColumns 属性为False;
4.       添加要绑定的字段到DataGrid,并按照下表设置其属性。Sortexpression属性和数据库中数据表中的字段名保持一致。

我使用Northwind数据库中的Employees来说明这个例子。

DataTextField Header Text  Sort Expression

EmployeeID Employee ID EmployeeID
LastName LastName LastName
FirstName FirstName FirstName
Title   Title   Title
City   City  City
Country  Country  Country

程序代码设计:

1.       在页面第一次被加载时给DATAGRID添加动态属性sortexpression 和 sortdirection;
2.       给指定的字段的sortexpression 和 sortdirection 赋值,在加载时初始化DataGrid的排序字段和排序方式;
3.       得到dataset 和 dataview 对象。设置dataview 的sort 属性为动态属性sortexpression 和 sortdirection的连接字符串;
4.       用dataview绑定datagrid;
5.       当表头被点击时,触发datagrid的sortcommand事件;
6.       得到sortcommand事件传递过来的sortexpression属性,并与datagrid的sortexpression属性比较;
7.       如果找到相等的
a)       先检查sortdirection属性;
b)       If sortdirection属性等于“ASC”then
          i.        设置sortdirection属性的值等于“DESC”
c)        Else
               i.        设置sortdirection属性的值等于“ASC”
d)       End If
8.       重复第3步

注意:当你运行下面的代码并点击同一列两次或者两次以上,此列的排列方式会自动根据现有的排列方式的反序排列。
下面的下面的代码将给你演示怎么使用DataGrid的动态属性和DataView对象。

C# Code:

private void Page_Load(object sender, System.EventArgs e)
{
    // 在此处放置用户代码以初始化页面

if(!Page.IsPostBack)
    {
        if(DataGrid1.Attributes["SortExpression"] == null)
        {
            DataGrid1.Attributes["SortExpression"] = "LastName";
            DataGrid1.Attributes["SortDirection"] = "ASC";
        }
        BindGrid();
    }
}

private void BindGrid()
{
    SqlConnection conn = new SqlConnection("server=localhost;uid=sa;pwd=sa;database=Northwind");
    conn.Open();
    SqlDataAdapter cmd = new SqlDataAdapter("select * from Employees",conn);
    DataSet ds = new DataSet();
    cmd.Fill(ds,"Employees");

DataView dv = new DataView();
    dv = ds.Tables[0].DefaultView;
    string SortExpression = DataGrid1.Attributes["SortExpression"];
    string SortDirection = DataGrid1.Attributes["SortDirection"];
    dv.Sort = SortExpression + " " + SortDirection;

DataGrid1.DataSource = dv;
    DataGrid1.DataBind();
}

private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
    string SortExpression = e.SortExpression.ToString();
    string SortDirection = "ASC";
    if(SortExpression == DataGrid1.Attributes["SortExpression"])
    {
        SortDirection = (DataGrid1.Attributes["SortDirection"].ToString() == SortDirection ? "DESC" : "ASC");
    }
    DataGrid1.Attributes["SortExpression"] = SortExpression;
    DataGrid1.Attributes["SortDirection"] = SortDirection;
    BindGrid();
}

DataGrid自动排序相关推荐

  1. 让Asp.NET的DataGrid可排序、可选择、可分页

    '*************************************************************** 'Author: 李洪根 'MAIL: lihonggen0@gci- ...

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

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

  3. vba 自动排序_学会这个Excel表格技巧之后,立刻实现自动排序,太牛了

    怎么实现自动排序呢?老师从网上下载的2018年各大城市最新平均工资排行表 当我改动其中一个城市的平均工资时,比如广州由7965改为10000,整个表格的顺序会自动调整: 是不是很神奇的样子,怎么做到的 ...

  4. python中用def实现自动排序_漫画排序算法Python实现

    冒泡排序 冒泡排序的思想,我们要把相邻的元素两两比较,当一个元素大于右侧相邻元素时, 交换它们的位置;当一个元素小于或等于右侧相邻元素时,位置不变. def bubbleSort(list): ran ...

  5. fastjson 1.2 版本之前的bug, 反序列化时自动排序,导致签名不过

    大家好,我是烤鸭: 今天分享一个问题,使用fastjson 导致签名不过. 1.  问题复现: fastjson 1.2.4 获取返回值: {"data":[{"id&q ...

  6. NetTiers学习笔记09---RADGrid + EntityDataSource设置默认排序, 及表格自动排序,分页的方法...

    前段时间虽然解决了排序和分页的问题,但始终没有解决默认排序的问题, 起初一直把焦点放在EntityDataSource的排序默认值上,但始终搞不定, 今天又花了不少时间Google和研究,终于通过设置 ...

  7. LeetCode-179:数组自动排序工具Arrays.sort(),比较器Comparator的正确打开方式

    题目描述:给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数 实例一:输入: [10,2] 输出: 210 实例二:输入: [3,30,34,5,9] 输出: 9534330 在这道题上花费的 ...

  8. excel设置自动排序123的详细教程

    excel作为主要用于电脑编写的电子表格,主要包括了数据记录和整理.数据的加工和计算.数据的统计和分析等等功能,那么excel怎么设置自动排序123呢?下面小编要讲的内容就是excel设置自动排序教程 ...

  9. C# dgv自动排序后,各种样式设定无效的解决办法

    C# dgv自动排序后,各种样式设定无效的解决办法 在网上搜索一些资料还是解决不了,所以自己写了记录一下: 给dgv添加一个sorted事件,每次点击小三角排序时就会调用这个方法,在这里将样式重新设定 ...

最新文章

  1. python与excel的应用-Python利用pandas处理Excel数据的应用
  2. 【CodeForces - 546C 】Soldier and Cards (模拟)
  3. 曲曲直直线条图计算机教案,【曲曲直直的美术画】_美术教案第三课:曲曲直直(三年级美术下册教案)——小学美术...
  4. dubbo调用超时回滚_面试必问之Dubbo面试题
  5. MATLAB 贪婪周边无状态路由协议(GPSR)路由仿真
  6. 数据库笔记02:查询与统计数据
  7. python计算在月球的体重_NumPy-快速处理数据--矩阵运算
  8. kr中的逆波兰表示法计算器
  9. FastJSON应用前测试
  10. 「leetcode」18. 四数之和:双指针法
  11. #西柚姨妈体#蹿红微博 流行体之风重袭网络
  12. 关于seo优化实用篇
  13. 解决”企业证书打包的ipa,点击app提示未受信任的企业级开发者“的问题
  14. 05,JavaScript脚本中cookie
  15. TaintDroid剖析之DVM变量级污点跟踪(下篇)
  16. Vlink——虚链路
  17. ol+天地图+geoserver_教程:使用GeoServer发布离线地图服务(WMS)
  18. strip指令——减小文件的大小(给文件脱衣服)
  19. F2. Promising String (hard version)(cf)树状数组
  20. 桌面计算机右击选项里没有管理员,为什么没有以管理员身份运行选项

热门文章

  1. java店铺装修功能_有赞美业店铺装修前端解决方案
  2. 普里姆(Prim)算法(P算法):修路问题
  3. Java后端面试题自我总结
  4. 招聘 | 国家电网-北京-2024电力设备认知智能技术研发实习生
  5. C++类和对象(中)(6个默认成员函数)
  6. php实现公历转阳历,PHP intl可以将公历日期转换为其他日历类型
  7. 算法提高 ADV-76 GDP计算
  8. python 计算gdp_有人知道这个Python公式有哪些问题吗??关于找到GDP的min,max还有用find方程。...
  9. InfoQ 最新 Java 发展趋势报告
  10. 手机上的三件事别乱去做,一不留神就会中毒,现在了解还来得及