OrderByDescending 导致我的 datagridview 不填充

OrderByDescending is causing my datagridview to not populate

我想根据列 HitCount 对我的列表进行排序。当我将 OrderByDescending 附加到源的末尾时,不再填充 DataGridView。我可以把它取下来,而且效果很好。

  var source = CapturedLogs.CapturedIpAddresses.OrderByDescending(x => x.HitCount);
  dataGridView1.DataSource = source;

  public static List<CapturedLog> CapturedIpAddresses{set;get;}

  internal class CapturedLog
  {
    public string IpAddress { set; get; }
    public int HitCount { set; get; }
    public bool IsRecordedInFirewall { set; get; }
    public bool IsWhiteListed { set; get; }

  }

当我添加 .OrderByDescending(x => x.HitCount); 时,DataGridView 没有填充。

我做错了什么?

根据 the documentationDataSource 属性 只能设置为实现 IListIListSourceIBindingList, 或 IBindingListView.

当您简单地追加 .OrderByDescending() 而没有实际实现结果时,它 returns 一个 OrderedEnumerable 类型的对象,它 不是 实现上述任何接口。

您需要将 source 的类型更改为实现支持接口的类型。例如:

// List<CapturedLog>
var source = CapturedLogs.CapturedIpAddresses
    .OrderByDescending(x => x.HitCount)
    .ToList();

// CapturedLog[]
var source2 = CapturedLogs.CapturedIpAddresses
    .OrderByDescending(x => x.HitCount)
    .ToArray();

// BindingSource
var ordered = CapturedLogs.CapturedIpAddresses.OrderByDescending(x => x.HitCount);
var source3 = new BindingSource(ordered, null);