設定 GridView.AllowSorting = true,點擊欄位標題觸發 Sorting 事件。
public int CompareByClientName(ClientInfo c1, ClientInfo c2)
=> c1.ClientName.CompareTo(c2.ClientName);
public int CompareByPostCodeAndAddress(ClientInfo c1, ClientInfo c2)
{
int r = c1.PostCode.CompareTo(c2.PostCode);
return r != 0 ? r : c1.AddressStr.CompareTo(c2.AddressStr);
}
public int CompareByPostCode(ClientInfo c1, ClientInfo c2)
=> c1.PostCode.CompareTo(c2.PostCode);
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
var clients = new ClientInfoAccessObj().GetAllClients();
switch (e.SortExpression)
{
case "ClientName": clients.Sort(CompareByClientName); break;
case "MultiColumnSort": clients.Sort(CompareByPostCodeAndAddress); break;
case "PostCode": clients.Sort(CompareByPostCode); break;
default:
ClientScript.RegisterClientScriptBlock(this.GetType(), "InfoMsg", "alert('不支援對此欄位排序');", true);
return;
}
GridView1.DataSource = clients;
GridView1.DataBind();
}
protected void btnSortByName_Click(object sender, EventArgs e)
=> GridView1.Sort("ClientName", SortDirection.Ascending);
protected void btnSortByPostCodeAndAddress_Click(object sender, EventArgs e)
=> GridView1.Sort("MultiColumnSort", SortDirection.Ascending);
透過 Comparison<T> 委派靈活實現單欄、多欄混合排序。