【C#】【WinForm】ListView_列表视图控件
属性说明
属性 | 描述 |
---|---|
**FullRowSelect** | 设置是否行选择模式。 默认 FullRowSelect=false 。该属性只有在Details视图该属性才有意义。 |
**GridLines** | 设置行和列之间是否显示网格线。 默认 GridLines=false 。该属性只有在Details视图该属性才有意义。 |
**AllowColumnReorder** | 设置是否可拖动列标头来对改变列的顺序。 默认 AllowColumnReorder=false 。该属性只有在Details视图该属性才有意义。 |
**View** | 获取或设置项在控件中的显示方式。 显示方式包括 Details 、Largelcon 、List 、Smalllcon 、Tile 。默认 View=Largelcon 。 |
**MultiSelect** | 设罟是否可以选择多个项。 默认 MultiSelect=false 。 |
**HeaderStyle** | 获取或没置列标头样式。 样式属性值: + Clickable :列标头的作用类似于按钮,单击时可以执行操作(例如排序)。+ NonClickable :列标头不响应鼠标单击。+ None :不显不列标头。 |
**LabelEdit** | 设置用户是否可以编辑控件中项的标签。 对于Details视图,只能编辑行第一列的内容。 默认为 LabelEdit=false 。 |
**CheckBoxes** | 设置控件中各项的旁边是否显示复选框。 默认为 CheckBoxes=false 。 |
**LargelmageList** | 大图标集。 该属性只在Largelcon视图使用。 |
**LargelmageList** | 小图标集。 该属性只在Smalllcon视视图使用。 |
**StatelmageList** | 图像蒙板。 这些图像蒙板可用作LargelmageList和SmallmageList图像的爱盖图。 这些图像可用于指示项的应用程序定义的状态。 |
**Selectedltems** | 获取在控件中选定的项。 |
**Checkedltems** | 获取控件中当前复选框选中的项。 |
**Soritng** | 对列表视图的项进行排序。 属性值有: + Ascending :顶按递增顺序排序。+ Descending :项按递减顺序排序。+ None :项未排序。默认 Soritng=None 。 |
**Scrollable** | 设置当没有足够空间来显示所有项时是否显示滚动条。 默认为 Scrollable=true 。 |
**HoverSelection** | 设置当鼠标指针悬停于项上时是否自动选择项。 默认 HoverSelection=false 。 |
**HotTracking** | 设罟当鼠标指针经过项文本时,其外观是否变为超链接的形式。 默认 HotTracking=false 。 |
**HideSelection** | 设置选定项在控件没焦点时是否仍突出显示。 默认 HideSelection=false 。 |
**ShowGroups** | 设置是否以分组方式显示项。 默认 ShowGroups=false 。 |
**Groups** | 设置分组的对象集合。 |
**Topltem** | 获取或设置控件中的第一个可见项,可用于定位。 (属性效果类似于EnsureVisible方法) |
属性说明
方法 | 描述 |
---|---|
**BeginUpdate** | 避免在调用EndUpdate 方法之前描述控件。当插入大量数据时,可以有效避免控件闪烁,并能大大提高速度。 |
**EndUpdate** | 在BeginUpdate 方法挂起描述后,继续描述列表视图控件。(结束更新) |
**EnsureVisible** | 列表视图滚动定位到指定索引项的选项行。 (效果类似于 TopItem 属性) |
**FindItemWithText** | 查找以给定文本值开头的第一个ListViewItem 。 |
**FindNearestItem** | 按照指定的搜索方向,从给定点开始查找下一个项。 该方法只有在 LargeIcon 或者SmallIcon 视图才能够使用。 |
事件说明
事件 | 描述 |
---|---|
**AfterLabelEdit** | 当用户编辑完项的标签时发生,需要LabelEdit 属性为true 。 |
**BeforeLabelEdit** | 当用户开始编辑项的标签时发生。 |
**columnClick** | 当用户在列表视图控件中单机列标头时发生。 |
使用案例
什么是控件的智能标签?这个ListView控件右上角的小三角形,在Visual Studio设计器中的官方名称是“智能标签”(Smart Tag)。
- 功能:点击它会弹出一个任务菜单,里面列出了针对该控件(这里是ListView)最常用、最重要的属性和任务。例如,对于ListView,你可能会看到“选择数据源”、“编辑列”、“编辑项”、“视图”等选项。这避免了开发者必须完全在庞大的属性窗口中寻找这些设置,极大地提高了开发效率。
- 设计目的:智能标签是Microsoft为了简化复杂的控件配置而引入的UI设计模式,旨在让常用功能触手可及。
- 下标为0的位置(即
placeholder
)由于框架限制,无法设置文字对齐,一般解决方法为:将0下标处的列的宽度设置0,仅用于占位不直接使用。 - alt + a 快捷键能快速添加一个列。
- 右侧属性页面中可以使用上下方向键进行属性选中,然后进行修改。
BorderStyle=FixedSingle
。
FullRowSelect=true
。
GridLines=true
。
1. 第一列与子列的区别
- 第一列:
对应ListViewItem.Text
属性,是行的主标识。在代码中直接通过item.Text
赋值(如item.Text = "主数据"
),且无法单独设置对齐方式(默认左对齐)。
- 子列(其他列):
通过SubItems
集合添加,每个子列对应一个ListViewItem.ListViewSubItem
对象。子列支持独立设置对齐方式(左/右/居中),且需通过item.SubItems.Add()
方法添加。
2. 代码示例中的体现
在用户提供的代码中:
// 第一列未显式赋值(item.Text为空),实际应设置主列数据
item.SubItems.AddRange(new string[] { ... }); // 添加子列数据
问题:第一列(item.Text
)未被赋值,导致首列为空。正确做法应为:
item.Text = em.EmployeeID; // 假设EmployeeID是主列数据
item.SubItems.Add(em.EmployeeName); // 添加第一个子列
// 其他子列...
3. 数据结构关系
ListViewItem
:表示整行数据,其Text
属性对应第一列。ListViewSubItem
:表示子列数据,属于SubItems
集合的一部分。
例如,item.SubItems[0]
对应第二列(因为索引从0开始)。
4. 设计建议
- 明确主列:第一列应存放关键标识(如ID),子列存放辅助信息。
- 对齐控制:若需调整子列对齐方式,可通过
ColumnHeader.TextAlign
设置。
总结
ListView的第一列是主项(Text
属性),其他列均为子项(SubItems
),两者在数据绑定和格式控制上有显著差异。用户代码中需注意主列的赋值,避免首列为空。
/// <summary>
/// 点击按钮后在ListView中展示数据
/// </summary>
/// <param name="sender">触发事件的控件</param>
/// <param name="e">事件参数</param>
private void btnShowDataOnLV_Click(object sender, EventArgs e)
{// 构建一组List数据List<Employee> eList = new List<Employee>();for (int i = 0; i < 20; i++){eList.Add(new Employee(){EmployeeName = "员工" + i.ToString(),IDNumber = "12022919909191210" + i.ToString(),PhoneNumber = "12139976132" + i.ToString(),PositionName = "职位" + i.ToString(),Department = "部门" + i.ToString(),Province = "省份" + i.ToString(),Gender = "男" + i.ToString()});}
// 清空ListView
this.lvData.Items.Clear();// 给ListView绑定数据源
foreach (Employee em in eList)
{// 1. 创建ListViewItem对象ListViewItem item = new ListViewItem();// 2. 把ListViewItem对象加入到ListView中this.lvData.Items.Add(item);// 3. 在ListViewItem中添加子项(其他列)item.SubItems.AddRange(new string[]{em.EmployeeName,em.IDNumber,em.PhoneNumber,em.PositionName,em.Department,em.Province,em.Gender});
}
}