利用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;
        }


     

阅读更多
换一批

没有更多推荐了,返回首页