当前位置: 首页 > news >正文

【C#】【WinForm】ListView_列表视图控件

属性说明

属性描述
**FullRowSelect**设置是否行选择模式。
默认FullRowSelect=false
该属性只有在Details视图该属性才有意义。
**GridLines**设置行和列之间是否显示网格线。
默认GridLines=false
该属性只有在Details视图该属性才有意义。
**AllowColumnReorder**设置是否可拖动列标头来对改变列的顺序。
默认AllowColumnReorder=false
该属性只有在Details视图该属性才有意义。
**View**获取或设置项在控件中的显示方式。
显示方式包括DetailsLargelconListSmalllconTile
默认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设计模式,旨在让常用功能触手可及。
1. 添加列标题(Text、Name、Width)
  1. 下标为0的位置(即placeholder)由于框架限制,无法设置文字对齐,一般解决方法为:将0下标处的列的宽度设置0,仅用于占位不直接使用。
  2. alt + a 快捷键能快速添加一个列。
  3. 右侧属性页面中可以使用上下方向键进行属性选中,然后进行修改。

2. 设置BorderStyle属性

BorderStyle=FixedSingle

3. 设置FullRowSelect属性

FullRowSelect=true

4. 设置GridLines属性

GridLines=true

5. 设置View属性

6. 第一列与其他列

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,两者在数据绑定和格式控制上有显著差异。用户代码中需注意主列的赋值,避免首列为空。

7. 按钮点击事件的委托函数
/// <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});
}

}

http://www.dtcms.com/a/348109.html

相关文章:

  • [每周一更]-(第157期):深入理解Go语言的垃圾回收机制:调优与监控
  • BERT(Bidirectional Encoder Representations from Transformers)模型详解
  • 2.7 提示词调优编码实战(二)
  • 2025年8月第3周AI资讯
  • 将C++资源管理测试框架整合到GitLab CI/CD的完整实践指南
  • Ansible自动化配置
  • 手写MyBatis第31弹-用工厂模式重构MyBatis的SqlSession创建过程
  • 小迪安全v2023学习笔记(七十一讲)—— Python安全反序列化反编译格式化字符串安全
  • 深入解析MyBatis中#{}和${}的区别与应用场景
  • Implementing Redis in C++ : E(AVL树详解)
  • spring源码之事务篇(事务管理器整个流程)
  • 笔记 | Anaconda卸载重装
  • Hyperledger Fabric官方中文教程-改进笔记(十五)-从通道中删除组织
  • 【机器学习】3 Generative models for discrete data
  • HTML网页游戏五子棋
  • 电路学习(四)二极管
  • Spring框架相关面试题
  • 【机器学习】4 Gaussian models
  • 【网络运维】Shell 脚本编程:while 循环与 until 循环
  • Python自学笔记11 Numpy的索引和切片
  • Shell脚本-expect
  • VirtualBox安装openEuler24.03
  • 【C++】函数返回方式详解:传值、传引用与传地址
  • 校园跑腿小程序源码 | 跑腿便利店小程序 含搭建教程
  • 如何在 Ubuntu 上安装和配置 Samba ?
  • 2025年渗透测试面试题总结-30(题目+回答)
  • Java 20 新特性及具体应用
  • Cisdem Video Converter for mac 优秀的视频格式转换工具
  • 夜间跌倒检测响应速度↑150%!陌讯多模态骨架追踪算法在智慧养老院的落地实践
  • 埃氏筛|树dfs|差分计数