【问题标题】:How can I get the Items in a DataGrid into a List<T> or some other collection?如何将 DataGrid 中的项目放入 List<T> 或其他集合中?
【发布时间】:2015-07-15 21:06:30
【问题描述】:

我有一个充满自定义对象的 Datagrid。这些对象有一个称为 CurrentTime 的 DateTime 属性。

我想将最新的 CurrentTime 的值放入 DateTime 对象中。如何获取按 CurrentTime 排序的 DataGrid 项目列表?

类似这样的:

List<MyObject> myObjs = DataGrid.Items.ToList();
myObjs.SortBy(CurrentTime);
DateTime latestTime = myObjs[0].CurrentTime;

【问题讨论】:

    标签: c# wpf sorting datagrid


    【解决方案1】:

    我想你正在寻找OfType

    var list = DataGrid.Items.OfType<yourType>().OrderBy(q => q.CurrentTime).ToList();
    

    yourType 是具有称为 CurrentTime 的 DateTime 属性的对象的类型。

    【讨论】:

    • 我认为这些方法(OfType、OrderBy、ToList)中的任何一个都不会增加条目数。不幸的是,我没有看到您的代码,也无法说出导致这种行为的原因。我建议您将此行分成三个单独的行并进行调试。因此,您可以在哪些操作(DataGrid.Items、OfType、OrderBy、ToList)数量不正确后发现。请随意写更多的 cmets,我会尽力帮助你
    • 对不起,我试图快速删除我的评论。我有其他代码将项目插入数据网格两次。我已经修好了。很抱歉造成混乱。
    • 没关系。祝你工作顺利 =)
    【解决方案2】:
    myObjs.OrderBy(x=>x.CurrentTime);
    

    使用 OrderBy 方法对 Collection 进行排序。

    【讨论】:

      【解决方案3】:

      使用这个:

       var list = myObjs.OrderBy(x => x.CurrentTime).ToList();
      

      【讨论】:

        【解决方案4】:

        尝试使用这个表达式:

        DateTime latestTime = DataGrid.Items
                                      .OfType<MyObject>()
                                      .OrderBy(x=>x.CurrentTime)
                                      .First()
                                      .CurrentTime;
        

        【讨论】:

        • 这几乎奏效了。您的代码为我提供了正确的 MyObject,然后我可以从那里获得 CurrentTime。
        • 抱歉,我刚刚将最后一个操作(从我们的对象获取所需的属性)添加到此表达式中。但我建议使用 FirstOrDefault() 而不是 First() 因为如果你的 DataGrid.Items 集合中没有项目,你会得到一个异常。
        猜你喜欢
        • 2010-11-30
        • 2012-07-28
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多