如何将 Groups 添加到 ListView,然后将 Items 添加到 Groups
Posted
技术标签:
【中文标题】如何将 Groups 添加到 ListView,然后将 Items 添加到 Groups【英文标题】:How to add Groups to ListView, then add Items to Groups 【发布时间】:2014-10-05 22:30:42 【问题描述】:我正在尝试在我的 ListView 控件中显示组,尽管我可以在设计器视图中手动添加它们,但这对我没有好处,因为我需要在运行时,我不可能知道运行时会添加哪些组。
我在网上搜索过,令我惊讶的是,我能找到的信息非常少(这很有意义)。我能找到的唯一看起来像是为我想做的事情而编写的示例代码来自我使用 Visual Studio 下载的离线文档,该代码示例有 18 个编译时错误和 2 个主要入口点!
那么,我们如何在运行时动态地将组添加到 ListView 控件,然后将项目添加到列表中。
所以你对我想要完成的事情有一个很好的了解,我在下面附上了一张图片:
【问题讨论】:
【参考方案1】:一种方法是将 ListViewGroup 添加到您的 ListView。然后在将 Items 添加到列表视图时,添加一个新的 ListViewItem 并指定组。
public class Form1
private ListViewGroup categoryGroup = new ListViewGroup("Categories", HorizontalAlignment.Left);
private ListViewGroup movieGroup = new ListViewGroup("Movies", HorizontalAlignment.Left);
private ListViewGroup castGroup = new ListViewGroup("Cast", HorizontalAlignment.Left);
private void Form1_Load(object sender, EventArgs e)
ListView1.BeginUpdate();
ListView1.Groups.Add(categoryGroup);
ListView1.Groups.Add(movieGroup);
ListView1.Groups.Add(castGroup);
ListView1.EndUpdate();
private void Button1_Click(object sender, EventArgs e)
ListView1.BeginUpdate();
Category.GetCategories().ForEach(x => ListView1.Items.Add(new ListViewItem(x.Name, categoryGroup)));
Movie.GetMovies().ForEach(x => ListView1.Items.Add(new ListViewItem(x.Name, movieGroup)));
Cast.GetCast().ForEach(x => ListView1.Items.Add(new ListViewItem(x.Names, castGroup)));
ListView1.EndUpdate();
我确信有一个更优雅的解决方案,但这应该可以很好地了解如何将项目添加到各个组。
【讨论】:
【参考方案2】:How to: Group Items in a Windows Forms ListView Control
或者长篇大论:
Grouping ListView items dynamically
【讨论】:
Microsoft 的“操作方法”不起作用 - 无法获得“奇数”和“偶数”,甚至没有谈论有问题的样本。首先,他们没有说明如何设置 View 属性,也没有说明如何设置所有其他属性。无论我如何设置,这些项目要么未对齐,要么在 View.List 的情况下,组名称消失。使用 View.Details 有组,但项目消失了。这篇文章不好。另一篇文章的页面坏了,不是显示图片而是显示“1.gif”、“2.gif”。以上是关于如何将 Groups 添加到 ListView,然后将 Items 添加到 Groups的主要内容,如果未能解决你的问题,请参考以下文章
C# listView,如何将项目添加到第 2、3 和 4 列等?
winform, ListView Groups 下面的项目如何实现折叠,展开(默认都是展开) 类似treeview的效果