GridView之点击表头排序篇

    技术2022-05-20  36

    GridView点击表头排序

     

    示例

    GridView本身有一个Sort()函数:

    public virtual void Sort ( string sortExpression,    SortDirection sortDirection)    ---排序数据列和排序方向

    使用上相当方便。但在实际使用中,常用的是点击每一列的标题来排序,点击标题会触发:

    protected void GridView_Sorting(object sender, GridViewSortEventArgs e)事件。从GridViewSortEventArgs中可以拿到SortDirectionSortExpression

    使用DataView.Sort属性来排序,(Sort方法会触发Sorting 事件),再重新绑定到GridView上。

    1、在源码中给GridView中加入AllowSorting属性

    <asp:GridView ID="Grd"  AllowSorting="True"  OnSorting="Grd_Sorting" >

    1.1  需要设定排序的列都要加SortExpression属性

    <asp:BoundField DataField="Hot" HeaderText="热度" SortExpression="Hot">                                    <ItemStyle Width="65px" />                                </asp:BoundField>

    2. 定义排序列和排序方向属性,此属性用viewstate保存

        /// <summary>    ///  排序列    /// </summary>    public string SortOrder    {        get { return ViewState["SortOrder"].ToString(); }        set { ViewState["SortOrder"] = value; }    }

        /// <summary>    /// 排序方式    /// </summary>    public string OrderDire    {        get { return ViewState["OrderDire"].ToString(); }        set { ViewState["OrderDire"] = value; }    }

    3.Page_Load里面加载

        this.SortOrder = "Hot";//默认的排序列            --"Hot"为自定义默认列    this.OrderDire = "Desc";//默认排序方式          --排序方式Desc和ASC

    4. 绑定数据源 public void BindGrid(object sender, EventArgs e)

       DataTable dt = new DataTable();

        dt = gift.QueryGift(giftName, giftSpec, giftType, giftDesc, giftActive);    DataView dataView = dt.DefaultView;    string sort = SortOrder + " " + OrderDire;    dataView.Sort = sort;    Grd.DataSource = dataView;                      //将DataView绑定到GridView上    Grd.DataBind(); 5.Grd_Sorting 方法

        /// <summary>    /// 排序    /// </summary>    protected void Grd_Sorting(object sender, GridViewSortEventArgs e)    {        string sortExpression = e.SortExpression; //获取排序的列

            if (ViewState["SortOrder"].ToString() == sortExpression)        {            //默认的排序列Name            if (ViewState["OrderDire"].ToString() == "Desc")            {                ViewState["OrderDire"] = "ASC";            }            else            {                ViewState["OrderDire"] = "Desc";            }        }        else        {            //其他列的排序            ViewState["SortOrder"] = e.SortExpression;        }

            BindGrid(this, EventArgs.Empty);

        }


    最新回复(0)