如何使用C#中的值对listView中的项进行分组?

时间:2017-05-03 13:59:09

标签: c# visual-studio listview

我有一个listView,我想对共享相同ID但不同的SysDate 的项目进行分组,这样我不想显示具有相同值和不同日期的多行,而是只显示多行当ID发生变化时。

实施例

由此:

Session

对于此,只有Sysdate更改为同一行:

ID | Sysdate
1  | 12:00
1  | 12:01
1  | 12:02
2  | 12:03
2  | 12:05

如果添加的当前项目与ID | Sysdate 1 | 12:00 2 | 12:05 中已存在的项目相同,则只更改同一行中的 sysdate ,如果不是然后在listview

中添加新行

3 个答案:

答案 0 :(得分:0)

您提出的问题无法回答。存在"分组"的概念。在Windows ListView中,(例如,您在Windows资源管理器中看到的内容,如果您打开"我的电脑"并选择"查看" - >"内容& #34;,)但我不认为你的想法是什么。除了"分组"的概念之外,没有其他定义的"分组"可以在ListView上执行的操作。

您的问题无法通过分组来定义您的意思,因为对于每组ID(1,2),您选择了一个sysdate来任意显示。 (对于id = 1的情况,你选择了12:00,这是在id = 1的第一行,但是在id = 2的情况下你选择了12:05,这是在id =的第二行2。)

我建议您考虑对数据集的属性进行分组,而不是ListView的属性。换句话说,首先要仔细考虑分组的含义,然后提出对数据集执行分组的代码,然后将ListView与分组数据集一起提供。 ListView无法了解您的分组概念。

答案 1 :(得分:0)

var obj = objTest.OrderBy(x => x.ID).GroupBy(x => x.ID).Select(g => new {g, count = g.Count()}).SelectMany(t => t.g.Select(b=>b).Zip(Enumerable.Range(t.count, 1), (j, i) => new {j.Sysdate, j.ID}));

答案 2 :(得分:0)

如果您的数据对象具有ID和sysdate,以及您如何显示它们,则无法对它们进行分组。现在,如果您的数据对象具有ID和sysdates列表,则ListView中每个ID只会出现1次,并且每个ID都会获得一个sysdates列表。您必须为此编写自己的ViewCell代码。

如果从查询中获取数据对象,则必须自己格式化数据对象。