利用GridView自帶的Sorting方法進行表頭排序

相關的知識點

1.ViewState存儲List類數據

2 Gridview自帶sorting方法

3. 獲取List類的屬性

4.Linq的排序方法


1、在源碼中給GridView中加入AllowSorting屬性 和在列中加入SortExpression屬性(注意必須與List的屬性聲明一致且區別大小寫)

                <asp:GridView ID="GridView1" runat="server"  AllowSorting="true" OnSorting="GvList1_Sorting" >
                    <Columns>

                        <asp:BoundField DataField="SortID" HeaderText="序號"  SortExpression="SortID">
                            <FooterStyle Wrap="false" />
                            <HeaderStyle Wrap="false" />
                            <ItemStyle Wrap="false" />
                            </asp:BoundField>
                    </Columns>
                </asp:GridView>

2. 在後臺代碼中相對應的事件

        protected void GvList1_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sortExpression = e.SortExpression;
            List<ls> Gv1ist = ViewState["Gv1ist"] as List<ls>;

            //如果當前是升序排列則改成降序
            if (ViewState["sort"].ToString() == "ASC")
            {
                Gv1ist = Gv1ist.OrderBy(s => GetPropertyValue(s, sortExpression)).ToList<ls>();
                ViewState["sort"] = "DESC";
            }
            else //如果當前是降序排列則改成升序
            {
                Gv1ist = Gv1ist.OrderByDescending(s => GetPropertyValue(s, sortExpression)).ToList<ls>();
                ViewState["sort"] = "ASC";
            }
            if (GvOne1ist.Count > 0)
            {
                GridView1.DataSource = GvOne1ist;
                GridView1.DataBind();
            }
        }
 
        /// <summary>
        /// 根據屬性的字符串形式找到屬性的元數據信息
        /// </summary>
        /// <param name="obj">類名稱</param>
        /// <param name="property">列名</param>
        /// <returns></returns>
        public  object GetPropertyValue(object obj, string property)
        {
            System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
            return propertyInfo.GetValue(obj, null);
        } 

3.後臺的頁面開始位置初始化排序方向

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!Page.IsPostBack)
            {
                ViewState["sort"] = "ASC";                
            }

        }
       //查詢按鈕的事件
	protected void btnQuery_Click(object sender, EventArgs e)
        {
           IList< ls>  Gv1ist = getData();//自定義獲取ls類的方法
	   ///注意IList類要存儲到ViewState中必須先序列化
           ViewState["GvTwo1ist"] = Gv1ist;
        }


     

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