GridView多列排序

今天有个需求,对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();

        }
       


有图有真相:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章