【问题标题】:.NET: why Groups in ListView does not work? Are there any limitations?.NET:为什么 ListView 中的组不起作用?有什么限制吗?
【发布时间】:2016-03-03 17:08:16
【问题描述】:

代码如下:

    private void displayOrders(ListView pView)
    {
        pView.BeginUpdate();
        try
        {
            pView.Items.Clear();
            pView.Groups.Clear();

            List<string> uniqueValues = new List<string>();
            foreach (XxxOrder order in AppDocument.Instance.OrdersList)
            {
                ListViewItem li = new ListViewItem(new string[] { order.RecvTime, order.OrderNo, order.ErrorCode.ToString() });
                string value = order.OrderNo;
                int idx = uniqueValues.IndexOf(value);
                if (idx < 0) uniqueValues.Add(value);
                pView.Items.Add(li);
            }
            if (uniqueValues.Count < (int)(pView.Items.Count * 0.90f))
            {
                pView.ShowGroups = true;
                pView.Groups.Clear();
                ListViewGroup[] groupsArray = new ListViewGroup[uniqueValues.Count];
                int i=0;
                foreach (string it in uniqueValues)
                {
                    groupsArray[i++] = new ListViewGroup(it, it);
                }
                pView.Groups.AddRange(groupsArray);
            }
        }
        finally { pView.EndUpdate(); }
    }

执行此代码后,我可以看到所有项目都属于一个名为“默认”的组。

这是为什么呢? 项目和组的数量是否有任何限制?在这种情况下,我列出了 7841 个项目,并获得了 6629 个唯一的 Order# 值,因此有 6629 个组。

或者可能有列顺序的限制?那么,组键应该只是第一列吗?...

还是应该先添加组,然后只添加列表项?

您能建议吗?

注意:它是 .NET 3.5。应用程序使用 System.Windows.Forms。操作系统=Windows 10 Pro x64。

提前谢谢你。

PS。我只是尝试先收集唯一值,然后添加组,然后添加列表项 - 这没有帮助。 :-\ 所以,我很困惑——如果 .NET Windows.Forms 中的 ListView 控件的该功能是否有效?!

【问题讨论】:

  • 不向组中添加任何项目是标准错误。那个代码 sn-p 没有。

标签: .net winforms listview grouping


【解决方案1】:

您需要正确分配ListViewItem.Group Property

在你的情况下,是这样的:

// ...
pView.Groups.AddRange(groupsArray);
foreach (ListViewItem item in pView.Items)
    item.Group = pView.Groups[item.SubItems[1].Text];
// ...

【讨论】:

  • 啊...列表项中还有一个 Group 属性。我错过了。我记得当我开发自己的带有分组的列表视图时,我是在一个地方定义的,所以没想到微软会这样做。无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多