今天有个需求,对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();
}
有图有真相: