一、 初步了解
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的排序功能。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/188506.html