C# Listview 表格控件 作者:马育民 • 2025-03-22 07:29 • 阅读:10008 # 介绍 listView一般用于展示数据,有多种视图显示方式,如果要显示成表格,需要设置视图 ### 应用场景 文件管理器,显示各钟文件图标,用的就是这个控件,适合显示图片 # 属性 常用代码(说明见下面): ``` selectListView.View = View.Details; selectListView.FullRowSelect = true; selectListView.CheckBoxes = true; selectListView.GridLines = true; ``` ### View 获取或设置项在控件中的显示方式 - LargeIcon:每个项都显示为一个最大化图标,在它的下面有一个标签; - SmallIcon:每个项都显示为一个小图标,在它的右边带一个标签; - List:每个项都显示为一个小图标,在它的右边带一个标签。各项排列在列中,没有列标头; - **Details**:表格,可以显示任意的列,但只有第一列可以包含一个小图标和标签,其它的列项只能显示文字信息,有列表头; - Tile:每个项都显示为一个完整大小的图标,在它的右边带项标签和子项信息。(只有Windows XP 和 Windows Server 2003 系列支持) ### HeaderStyle 获取或设置列标头样式,有三种样式供选择: - Clickable:列标头的作用类似于按钮,单击时可以执行操作(例如排序); - NonClickable:列标头不响应鼠标单击; - None:不显示列标头。 当 `HeaderStyle` 的样式为 `Clickable时`,就必须和 `ColumnClick` 配合使用,即当用户在列表视图控件中单击列标头时发生; 用户在点击表头时一般用于排序,所以,与之相关的属性有: - Soritng:对列表视图的项进行排序。(默认为None) - Ascending:项按递增顺序排序。 - Descending:项按递减顺序排序。 - None:项未排序。 ### CheckBoxes 设置控件中各项的旁边是否显示复选框(默认为False),当 `CheckBoxes` 为 `True` 时,便可以使用 `CheckedItems` 来获取控件中当前复选框选中的项; ### LabelEdit 设置用户是否可以编辑控件中项的标签,对于 `Detail` 视图,**只能编辑行第一列的内容**(默认为false); ### FullRowSelect 使用 `Details` 视图时,默认 **只能选第一列单元格** 该属性设置是否行选择模式(默认为false) ``` groupByListView.FullRowSelect = true; ``` ### GridLines 使用 `Details` 视图时,默认 **没有网格线** 该属性设置行和列之间是否显示网格线。(默认为false) ``` groupByListView.GridLines = true; ``` ### AllowColumnReorder 设置是否可拖动列标头来对改变列的顺序。(默认为false)提示:只有在Details视图该属性才有意义。 ### MultiSelect 设置是否可以选择多个项。(默认为false) ### SelectedItems 获取在控件中选定的项。 ### CheckedItems 当 `CheckBoxes` 为 `true` 时,获取勾选的项: 返回集合,该集是勾选项的项: ``` groupByListView.CheckedItems ``` 返回的总数 ``` groupByListView.CheckedItems.Count ``` 返回集合,该集合是勾选项的索引: ``` groupByListView.CheckedIndices ``` 打印勾选的项: ``` foreach(ListViewItem item in groupByListView.CheckedItems) { System.Diagnostics.Debug.WriteLine(item.Text); } ``` 打印勾选项的索引: ``` foreach (int i in groupByListView.CheckedIndices) { System.Diagnostics.Debug.WriteLine(i); } ``` # 使用 https://blog.csdn.net/u013180863/article/details/53815362 https://www.cnblogs.com/wuxinwuxin/p/8168975.html https://blog.csdn.net/u013180863/article/details/53815362 # 添加列名 ### 简单方式 ``` groupByListView.Columns.Add("性别", 100); ``` ### 高级方式 ``` ColumnHeader c1 = new ColumnHeader(); c1.Width = 100; c1.Text = "姓名"; groupByListView.Columns.Add(c1); ``` # 添加行 ### 方式一 ``` //创建对象,同时设置第一列的值 ListViewItem li = new ListViewItem("李雷"); //设置第二列 li.SubItems.Add("男"); //添加 groupByListView.Items.Add(li); ``` ### 方式二 ``` //创建对象 ListViewItem li2 = new ListViewItem(); // 设置第一列 li2.Text = "韩梅梅"; //设置第二列 li2.SubItems.Add("女"); //添加 groupByListView.Items.Add(li2); ``` # 遍历 ``` foreach (ListViewItem item in this.listView1.Items) { for (int i = 0; i < item.SubItems.Count; i++) { MessageBox.Show(item.SubItems[i].Text); } } ``` # 事件 ### 勾选复选框事件 ``` private void groupByListView_ItemCheck(object sender, ItemCheckEventArgs e) { // e.CurrentValue是勾选前的值,e.NewValue是勾选后的值 System.Diagnostics.Debug.WriteLine("ItemCheck-" + e.CurrentValue+","+e.NewValue+","+e.Index); // 勾选 if(e.NewValue == CheckState.Checked) { } else // 取消勾选 { } } ``` 原文出处:http://malaoshi.top/show_1GWnuNYj6WG.html