废话不说,直接上例子:
前台代码:
<asp:GridView ID="GridView1" runat="server" AllowSorting="true" AutoGenerateColumns="false" onsorting="GridView1_Sorting"> <Columns> <asp:BoundField HeaderText="Column1" DataField="Field1" SortExpression="Field1" /> <asp:BoundField HeaderText="Column2" DataField="Field2" SortExpression="Field2" /> </Columns> </asp:GridView>
注意:
1、需要设置AllowSorting=true
2、需要设置每一列的SortExpression,设置的值为绑定数数据源中的一列,排序时,根据该设置值为排序依据
3、增加onsorting事件
后台代码:
1、本例子使用到的测试类
[Serializable] public class TestClass { public int Field1 { get; set; } public int Field2 { get; set; } }
2、为测试例子准备测试数据
protected void Page_Load(object sender, EventArgs e) { List<TestClass> oData = new List<TestClass>(); for (int i = 1; i <= 10; i++) { TestClass t = new TestClass() { Field1 = i, Field2 = 11 - i }; oData.Add(t); } ViewState["Data"] = oData; this.GridView1.DataSource = oData; this.GridView1.DataBind(); }
3、编辑排序事件
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { //从ViewState取得绑定在界面的数据源 List<TestClass> oDatas = (List<TestClass>)ViewState["Data"]; //从Session取得当前字段的排序状态 if (Session[e.SortExpression] == null) { Session[e.SortExpression] = SortDirection.Ascending; } //判断当前,如果为升序,则以倒序排序一次,如果为倒序,则以升序排序一次,并更新当前排序 //动态的重点在于利用反射,根据e.SortExpression取得排序栏位 if ((SortDirection)Session[e.SortExpression] == SortDirection.Ascending) { oDatas = oDatas.OrderBy(c => c.GetType().GetProperty(e.SortExpression).GetValue(c, null)).ToList(); Session[e.SortExpression] = SortDirection.Descending; } else { oDatas = oDatas.OrderByDescending(c => c.GetType().GetProperty(e.SortExpression).GetValue(c, null)).ToList(); Session[e.SortExpression] = SortDirection.Ascending; } //重新绑定一次排序後的数据以显示结果 GridView gv = sender as GridView; gv.DataSource = oDatas; gv.DataBind(); }
至此,本例子已完。
希望对各位有所帮助。
转载于:https://www.cnblogs.com/ZC_Mo-Blog/p/4648398.html
今天的文章GridView动态构建OrderBy进行排序分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/32410.html