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();

        }
       


有圖有真相:


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