您的位置:

DataTable排序

一、 初步了解

DataTable是在.NET框架中最常见的数据表格控件之一,在WebForm和MVC环境下都可以使用。DataTable中一级属性中常用的是Sorting(排序)。Sorting属性根据数据类型自动排序。默认Sorting为Ascending(升序),通过设置为Descending(降序)也可实现相应的功能。

二、基本示例

接下来我们看一下如何在WebForm与MVC中实现DataTable的排序。

1. WebForm

在aspx页面中,使用 控件需要注意,sortexpression与sortdirection属性必须均设置。

``` ```

在Code-behind中,我们需要设置GridView的Sorting事件,代码示例:

``` protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { DataTable table = GridView1.DataSource as DataTable; if (table != null) { DataView view = new DataView(table); view.Sort = e.SortExpression + " " + (e.SortDirection == SortDirection.Ascending ? "ASC" : "DESC"); GridView1.DataSource = view; GridView1.DataBind(); } } ```

2. MVC

在MVC中,我们需要在Controller中进行数据的排序,再传到View中,代码示例:

``` public ActionResult Index(string sortOrder) { ViewBag.NameSortParm = sortOrder == "Name" ? "Name_Desc" : "Name"; ViewBag.AgeSortParm = sortOrder == "Age" ? "Age_Desc" : "Age"; ViewBag.GenderSortParm = sortOrder == "Gender" ? "Gender_Desc" : "Gender"; var students = from s in db.Students select s; switch (sortOrder) { case "Name_Desc": students = students.OrderByDescending(s => s.Name); break; case "Name": students = students.OrderBy(s => s.Name); break; case "Age_Desc": students = students.OrderByDescending(s => s.Age); break; case "Age": students = students.OrderBy(s => s.Age); break; case "Gender_Desc": students = students.OrderByDescending(s => s.Gender); break; case "Gender": students = students.OrderBy(s => s.Gender); break; default: students = students.OrderBy(s => s.ID); break; } return View(students.ToList()); } ```

三、自定义排序

除了基本的升序和降序排序,我们还可以自定义排序。比如按照人的年龄段划分,年龄段小的在前,年龄段大的在后。

我们在这里以MVC项目为例,首先需要在Model中定义一个枚举:

``` public enum Age_Range { Under_20, Between_21_30, Between_31_40, Above_40 } ```

然后在Controller中设置这个排序规则:

``` public ActionResult CustomSort(string sortOrder) { List students = db.Students.ToList(); switch (sortOrder) { case "Age": students.OrderBy(s => s.Age_Range == Age_Range.Under_20 ? 1 : s.Age_Range == Age_Range.Between_21_30 ? 2 : s.Age_Range == Age_Range.Between_31_40 ? 3 : 4); break; default: students.OrderByDescending(s => s.ID); break; } ViewBag.SortOrder = sortOrder; return View(students); } ```

而在View中,我们需要在HTML中设置我们需要自定义排序的那一列,将列头改为一个链接,通过传递不同的参数来完成CustomSort的不同排序操作:

``` @Html.ActionLink("Age", "CustomSort", new { sortOrder = "Age" }) ```

四、小结

DataTable排序是.NET WebForm和MVC中常见的需求,本文从最基本的升序和降序排序开始,逐步向读者展示了如何进行自定义排序的方法。希望读者们能够通过本篇文章掌握基础知识,实现DataTable的排序功能。