一、 初步了解
DataTable是在.NET框架中最常见的数据表格控件之一,在WebForm和MVC环境下都可以使用。DataTable中一级属性中常用的是Sorting(排序)。Sorting属性根据数据类型自动排序。默认Sorting为Ascending(升序),通过设置为Descending(降序)也可实现相应的功能。
二、基本示例
接下来我们看一下如何在WebForm与MVC中实现DataTable的排序。
1. WebForm
在aspx页面中,使用
在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而在View中,我们需要在HTML中设置我们需要自定义排序的那一列,将列头改为一个链接,通过传递不同的参数来完成CustomSort的不同排序操作:
``` @Html.ActionLink("Age", "CustomSort", new { sortOrder = "Age" }) ```四、小结
DataTable排序是.NET WebForm和MVC中常见的需求,本文从最基本的升序和降序排序开始,逐步向读者展示了如何进行自定义排序的方法。希望读者们能够通过本篇文章掌握基础知识,实现DataTable的排序功能。