加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 对绑定到自定义通用对象列表的GridView进行排序

发布时间:2020-12-16 06:59:58 所属栏目:asp.Net 来源:网络整理
导读:我试图弄清楚如何使用多个列(String,DateTime,Decimal等数据类型)对GridView进行排序,这些列绑定到自定义对象的通用列表. MyObject.vb: Public Property IdPublic Property NamePublic Property DatePublic Property Amount MyObjects.aspx.vb: gridView.D
我试图弄清楚如何使用多个列(String,DateTime,Decimal等数据类型)对GridView进行排序,这些列绑定到自定义对象的通用列表.

MyObject.vb:

Public Property Id
Public Property Name
Public Property Date
Public Property Amount

MyObjects.aspx.vb:

gridView.DataSource = GetMyObjects()
gridView.DataBind()

注意:GetMyObjects()返回MyObject的List

基本上,我需要能够单击网格的列标题进行排序和反向排序,并且还能够在ViewState中存储排序方向,以便每次单击列标题时方向都会保留.

看起来我可能需要MyObject来实现IComparable,但我不确定如何将它们放在一起.

任何人都可以建议一个很好的教程,或指出我正确的方向?

解决方法

您需要启用排序( AllowSorting)并处理事件 OnSorting.

注意:示例代码使用C#,但VB版本应该类似.

创建GridView:

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" OnSorting="GridView1_Sorting">
</asp:GridView>

处理OnSorting:

protected void GridView1_Sorting(object sender,GridViewSortEventArgs e)
{
    GridView1.DataSource = GetObjects(e.SortDirection,e.SortExpression);
    GridView1.DataBind();
}

GetObjects返回一个已排序的List< MyObject>.你必须在这里创建自己的排序逻辑,一个替代方案可能是使用Dynamic Linq.如果你选择那个路径,GetObjects可以这样定义:(有更好的方法,但这足以显示理论)

private List<MyObject> GetObjects(SortDirection sd,string se)
{
    // Have we generated data before?
    if (SimulatedDB == null)
    {
        // Create a sample DB
        SimulatedDB = new List<MyObject>();
        var rnd = new Random();

        for (int i = 0; i < 20; i++)
        {
            var node = new MyObject();
            node.Id = i;
            node.Name = String.Format("Name {0}",i);
            node.CreationDate = DateTime.Now.AddDays(rnd.Next(100));
            node.Amount = (rnd.Next(1000) * rnd.NextDouble());

            SimulatedDB.Add(node);
        }
    }

    // Return sorted list
    if (sd == SortDirection.Ascending)
        return SimulatedDB.AsQueryable<MyObject>().OrderBy<MyObject>(se).ToList();
    else
        return SimulatedDB.AsQueryable<MyObject>().OrderByDescending<MyObject>(se).ToList();
}

希望能帮助到你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读