今天有個需求,對gridview實現多列排序,正反都得實現,剛接觸gridView不久,不是很瞭解,琢磨了一下,得到了結局方法,記錄下來,希望能對他人有所幫助
要求對lcstage和toolname兩列排序。
多列排序實質是在對多列的<asp:TemplateField 中添加SortExpression,而GridView1_Sorting事件通過e.SortExpression.ToString()獲取要排序的字段名稱,不用
自己單獨設置。
前臺代碼:
<div>
<asp:GridView ID="GridView1" runat="server" AllowSorting="True"
AutoGenerateColumns="False"
onsorting="GridView1_Sorting">
<Columns>
<asp:TemplateField HeaderText="ID" SortExpression="ID">
<HeaderStyle />
<ItemTemplate>
<asp:LinkButton ID="lblRegionName" runat="server" Text='<%#Eval("ID") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<ItemTemplate>
<asp:Label ID="lblCityName" runat="server" Text='<%#Eval("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Sex" SortExpression="Sex">
<ItemTemplate>
<asp:Label ID="lblUserName" runat="server" Text='<%#Eval("Sex") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//下面兩行代碼可要可不要,如果加上則在頁碼初始化時,默認對ID進行ASC排序,否則原樣顯示。
//this.GridView1.Attributes.Add("SortExpression", "Name");
// this.GridView1.Attributes.Add("SortDirection", "ASC");
GridViewBind();
}
}
private void GridViewBind()
{
string sortExpression = this.GridView1.Attributes["SortExpression"];
string sortDirection = this.GridView1.Attributes["SortDirection"];
DataTable dtBind = Data.BindData();
if ((!string.IsNullOrEmpty(sortExpression)) && (!string.IsNullOrEmpty(sortDirection)))
{
//對datatable排序,gridview實質是對datatable排序,然後顯示
//注意:sort的負值格式爲,Name ASC,和數據庫排序格式不一樣
dtBind.DefaultView.Sort = string.Format("{0} {1}", sortExpression, sortDirection);
}
this.GridView1.DataSource = dtBind;
this.GridView1.DataBind();
}
//根據dataset排序查詢結果
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
//獲得要排序的列字段名稱,如果點擊ID表頭,則sortExpression="Name",注意這裏ID是元數據表頭,即datatable中表頭。
string sortExpression = e.SortExpression.ToString();
//給定一個排序方式
string sortDirection = "ASC";
if (sortExpression == this.GridView1.Attributes["SortExpression"])
{
sortDirection = (this.GridView1.Attributes["SortDirection"].ToString() == sortDirection ? "DESC" : "ASC");
}
this.GridView1.Attributes["SortExpression"] = sortExpression;
this.GridView1.Attributes["SortDirection"] = sortDirection;
GridViewBind();
}
有圖有真相: