以下是代码:
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(); }
}
执行此代码后,我可以看到所有项目属于一个名为&#34;默认&#34;。
的组。为什么? 项目和组的数量是否有任何限制?在这种情况下,我有列表项7841,我有6629个唯一的订单#值,所以6629组。
或者列顺序可能有限制?那么,组密钥只能是第一列?...
或者是否应首先添加组并仅添加列表项?
你能告诉我吗?
注意:它是.NET 3.5。应用程序使用System.Windows.Forms。 OS = Windows 10 Pro x64。
提前谢谢。
PS。我只是尝试先收集唯一值,然后添加组,然后添加列表项 - 这没有帮助。 : - \ 所以,我非常困惑 - 如果.NET Windows.Forms中的ListView控件的功能完全正常工作?!
答案 0 :(得分:2)
您需要正确分配ListViewItem.Group Property。
在你的情况下,像这样:
// ...
pView.Groups.AddRange(groupsArray);
foreach (ListViewItem item in pView.Items)
item.Group = pView.Groups[item.SubItems[1].Text];
// ...