在GridView中可以通過兩種方式來指定模板列的標題:
1 通過HeaderText屬性指定:
<asp:TemplateField SortExpression="..." HeaderText="..." > <ItemTemplate> ....... </ItemTemplate> </asp:TemplateField>
2 通過HeaderTemplate模板來指定
<asp:TemplateField SortExpression="..."> <ItemTemplate> ...... </ItemTemplate> <HeaderTemplate> .... </HeaderTemplate> </asp:TemplateField>
其中第一種方式會觸發(fā)Sorting事件,第二種方式不會。所以如果要想為模板列提供排序的,要采用第一種方式指定標題。
一下是一個完整的列子
1. 一個GridView
首先: 將GridView的 AllowSorting 屬性 設置為 true。(允許點擊每一列的頭來排序)
然后: 設置你想排序的列的 SortExpression="id" 為你要排序的數(shù)據(jù)源的相應屬性。
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" onsorting="GridView1_Sorting"> <Columns> <asp:TemplateField HeaderText="姓名" > <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("user.name") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="id" SortExpression="id"> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
2. 完成代碼
public partial class mastermanage_CarManage : System.Web.UI.Page{ /// <summary> /// 查詢出來的 car信息的list /// </summary> IEnumerable<Car> carList = null; UserDao userDao = new UserDao(); protected void Page_Load(object sender, EventArgs e) { carList = userDao.getUserCar(); this.GridView1.DataSource = carList; this.GridView1.DataBind(); } /// <summary> /// 模板列排序的方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { // 從事件參數(shù)獲取排序數(shù)據(jù)列 string sortExpression = e.SortExpression.ToString(); // 假定為排序方向為“順序” string sortDirection = "ASC"; // “ASC”與事件參數(shù)獲取到的排序方向進行比較,進行GridView排序方向參數(shù)的修改 if (sortExpression == this.GridView1.Attributes["SortExpression"]) { //獲得下一次的排序狀態(tài) sortDirection = (this.GridView1.Attributes["SortDirection"].ToString() == sortDirection ? "DESC" : "ASC"); } // 重新設定GridView排序數(shù)據(jù)列及排序方向 this.GridView1.Attributes["SortExpression"] = sortExpression; this.GridView1.Attributes["SortDirection"] = sortDirection; this.BindGridView(); } /// <summary> /// 這個 使用 linq幫定的 /// </summary> private void BindGridView() { // 獲取GridView排序數(shù)據(jù)列及排序方向 string sortExpression = this.GridView1.Attributes["SortExpression"]; string sortDirection = this.GridView1.Attributes["SortDirection"]; // 調用業(yè)務數(shù)據(jù)獲取方法 UserDao userDao = new UserDao(); // 根據(jù)GridView排序數(shù)據(jù)列及排序方向設置顯示的默認數(shù)據(jù)視圖 if ((!string.IsNullOrEmpty(sortExpression)) && (!string.IsNullOrEmpty(sortDirection))) { if (sortDirection.Equals("DESC")) { // l => l.id 這個應該按照 sortExpression的內容來寫 //carList = from l in carList orderby l.id ascending select l; carList = carList.OrderBy(l => l.id); } else { //carList = from l in carList orderby l.id descending select l; carList = carList.OrderByDescending(l => l.id); } } // GridView綁定并顯示數(shù)據(jù) this.GridView1.DataSource = carList.ToList<Car>(); this.GridView1.DataBind(); }}
/// <summary> /// 綁定到 DataTable 數(shù)據(jù)源 排序 /// </summary> private void BindGridView() { // 獲取GridView排序數(shù)據(jù)列及排序方向 string sortExpression = this.GridView1.Attributes["SortExpression"]; string sortDirection = this.GridView1.Attributes["SortDirection"]; // 調用業(yè)務數(shù)據(jù)獲取方法 DataTable dtBind = this.getDB(); // 根據(jù)GridView排序數(shù)據(jù)列及排序方向設置顯示的默認數(shù)據(jù)視圖 if ((!string.IsNullOrEmpty(sortExpression)) && (!string.IsNullOrEmpty(sortDirection))) { dtBind.DefaultView.Sort = string.Format("{0} {1}", sortExpression, sortDirection); } // GridView綁定并顯示數(shù)據(jù) this.GridView1.DataSource = dtBind; this.GridView1.DataBind(); } /// <summary> /// DataTable 數(shù)據(jù)源 /// </summary> /// <returns></returns> private DataTable getDB() { DataTable dt = new DataTable(); dt.Columns.Add("id"); dt.Columns.Add("name"); dt.Columns.Add("age"); dt.Rows.Add(new object[] { "000001", "hekui"}); dt.Rows.Add(new object[] { "000002", "zhangyu"}); dt.Rows.Add(new object[] { "000003", "zhukundian"}); dt.Rows.Add(new object[] { "000004", "liyang"}); dt.Rows.Add(new object[] { "000005", "caili"}); return dt; }