【问题标题】:How to sort data in an asp.net gridview by properties of sub-objects?如何按子对象的属性对 asp.net gridview 中的数据进行排序?
【发布时间】:2014-10-13 10:31:04
【问题描述】:

我有一个绑定到asp.net gridviewList<Role>(见下文)。我想使用SortExpression 对这些数据进行排序,使其按行的两个属性子对象 进行排序。具体来说,我想按ApplicationName排序,然后是ApplicationTypeApplicationTypeName

我该怎么做?

这里的类是:

public class Application
{
    public string Name {get; set;}
    public int Status {get; set;}
}

public class ApplicationType
{
    public string ApplicationTypeName {get; set;}
    public int ApplicationTypeStatus {get; set;}
}

public class Role
{
    public Application oApplication {get; set;}
    public ApplicationType oApplicationType {get; set;}
}

【问题讨论】:

  • 我知道这是您的第一个 stackoverflow 问题,但您可能想多思考一下:“读者需要哪些信息来回答我的问题?” - 例如,似乎 actual 问题是关于 asp.net gridview 的,问题中甚至没有暗示;另外,问题标题为“array”,示例为List<T>,标签为“arraylist”——这三件事完全不同且互斥。标签还写着“linq”,这在其他任何地方都不明显……我们很乐意提供帮助,但我们不是通灵者。我将进行编辑以说明...

标签: asp.net .net sorting gridview


【解决方案1】:

编辑:注意我在回复earlier verison of the question之前,它与gridview相关;不过,这可能很有用...

最坏的情况:您可以使用此处的方法对列表进行预排序,然后再将其绑定到 gridview。


多种选择:

  • 实现IComparable[<T>]
  • 实现IComparer[<T>]
  • 使用临时排序

我猜你只需要最后一个,所以也许:

list.Sort((x,y) => {
    int delta = string.Compare(x.Application.Name, y.Application.Name);
    if (delta == 0) delta = string.Compare(
        x.ApplicationType.ApplicationTypeName, y.ApplicationType.ApplicationTypeName);
    return delta;
});

或者,您也可以通过 LINQ 在源数据中执行此操作 - 但请注意,这是在创建 new 列表时完成的 - 它不是就地排序的 现有列表:

var list = source.OrderBy(x => x.Application.Name)
                 .ThenBy(x => x.ApplicationType.ApplicationTypeName)
                 .ToList();

【讨论】:

  • Marc Gravell :: 感谢您的回答:此列表将绑定到 Gridview,因此当我想按应用程序排序时,sortExpresion 将是“Application.Name”,这将如何完成?
  • @user2516342 备份一下;你甚至没有告诉我你正在使用什么 UI 实现;这个问题没有提到Gridview等;你在哪里使用/看到sortExpression
  • :: 我的错误是我使用 asp.net GridView 在其中绑定 List 以及 Application.Name 或 ApplicationType.Name 类中的一些列视图属性。
  • @user2516342 不知道Gridview是否支持按子对象的属性排序
  • :: 排序是自定义的,所以与 GridView 无关
猜你喜欢
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 2014-06-26
相关资源
最近更新 更多