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

数据绑定组件--ListView 组件

数据绑定组件--ListView 组件

一、ListView 核心功能

1.1、常用属性

1、View 设置显示模式

  • Details(详细视图):表格形式展示多列数据,支持自定义列宽、对齐方式

  • List(列表视图):单列垂直排列,适合简单选项

  • LargeIcon/SmallIcon(大/小图标):以图标形式展示,支持自定义图标集

  • Tile(平铺视图):类似卡片布局,展示图标和文本

listView1.View = View.Details;

2、Columns 详细信息视图中显示的列集合(表头)

listView1.Columns.Add("姓名", 100);// 第二个参数:width
listView1.Columns.Add("年龄", 80);

3、Items 行记录集合

ListViewItem : Items集合包含的是一个一个Item对象

  • Text: 第一列的文本

  • SubItems: 除第一列的其他列的集合

// 设置
ListViewItem item = new ListViewItem("张三");
item.SubItems.Add("25");
listView1.Items.Add(item);
// 获取
string s = listView1.Items[0].SubItems[1].Text; // 获取数据第一行的第一个值

4、FullRowSelect 是否整行选择(仅Details视图)

listView1.FullRowSelect = true;

5、GridLines 是否显示网格线(仅Details视图)

listView1.GridLines = true;

6、MultiSelect 是否允许多选

listView1.MultiSelect = true;

7、CheckBoxes 是否显示复选框

listView1.CheckBoxes = true;
var checkList = listView1.CheckedItems; // 获取所选复选项的列表的集合 元素为ListViewItem
string s = listView1.CheckedItems[0].SubItems[0].Text;// 获取所选复选项的第一行的第一个字段值

8、SelectedItems 获取当前选中的项目集合

var selectList = listView1.SelectedItems; // 获取所选项的列表集合 元素为ListViewItem
string s = listView1.SelectedItems[0].SubItems[0].Text;// 获取所选项第一行的第一个字段值

9、SelectedIndices 获取当前选中的项目的索引集合

// 获取选中的项
ListViewItem selectedItem = listView1.Items[firstIndex];

10、Sorting 设置排序方式(None, Ascending(升序), Descending(降序))

// 初始化比较器
ListViewItemComparer itemComparer = new ListViewItemComparer();
// 设置比较器
listView1.ListViewItemSorter = itemComparer;
// 使用ColumnClick点击事件触发排序
listView1.Sort(); 

1.2、常用方法

1、BeginUpdate()/EndUpdate() 批量操作时提高性能

  listView1.BeginUpdate();/*代码区*/listView1.EndUpdate();

2、EnsureVisible():确保指定项可见

  listView1.EnsureVisible(0); // 类似Excel的冻结

3、Sort():对列表进行排序

  listView1.Sort();

4、Clear():清除所有项目和列

  listView1.Clear();

二、基本使用

2.1、添加列(Details视图)

listView2.View = View.Details;
listView2.Columns.Add("编号", 100);
listView2.Columns.Add("姓名", 100);
listView2.Columns.Add("年龄", 80);
listView2.Columns.Add("部门", 150);

2.2、添加项目/添加记录

int id = 1;
private void btnAdd_Click(object sender, EventArgs e)
{ListViewItem item = new ListViewItem((id++).ToString());item.SubItems.Add(ev.Name);item.SubItems.Add(ev.Password);item.SubItems.Add(ev.State);listView1.Items.Add(item);
}

2.3、修改项目

 private void btnEdit_Click(object sender, EventArgs e) // 复选框修改{var checkItem = listView1.CheckedItems[0]; // 获取第一行checkItem.SubItems[1].Text = "lisi";checkItem.SubItems[2].Text = "22";checkItem.SubItems[3].Text = "市场部";}
private void btnEdit_Click(object sender, EventArgs e) // 选择项修改{var selectItem = listView1.SelectedItems[0]; // 获取第一行selectItem.SubItems[1].Text = "lisi";selectItem.SubItems[2].Text = "22";selectItem.SubItems[3].Text = "市场部";}

2.4、删除项目

foreach(ListViewItem item in listView1.CheckedItems) // 多选复选框删除
{listView1.Items.Remove(item);
}
foreach (ListViewItem item in listView1.SelectedItems) // 多选选择项删除
{listView1.Items.Remove(item);
}

2.5、添加图标

private void btnBatchAdd_Click(object sender, EventArgs e){//设置小图标和大图标的列表listView2.SmallImageList = smallImageList;listView2.LargeImageList = bigImageList;listView2.BeginUpdate(); // 启动高性能增加for (int i = 0; i < 5000; i++){//图像索引int index = i % smallImageList.Images.Count;// 添加带图标的项目ListViewItem item = new ListViewItem((idx++).ToString(), index);item.SubItems.Add("zhansan" + idx);item.SubItems.Add(21.ToString());item.SubItems.Add("研发部" + idx);listView2.Items.Add(item);}listView2.EndUpdate(); // 停止高性能增加}

注意:

  1. 设置ImageList控件

  2. 设置大小图标ImageList控件里面的ImageSize属性

  3. 代码绑定到ListView/手动绑定至SmallImageList/LargeImageList

2.6、不同视图切换

View.(Tile\SmallIcon\List\LargeIcon\Details)

private void btnListView_Click(object sender, EventArgs e)
{listView2.View = View.List;
}

2.7、排序

可以设置点击列头事件,按照指定列进行排序

1、列头比较器类

 /// <summary>/// 自定义 ListViewItem 比较器/// </summary>public class ListViewItemComparer : IComparer // 注意,不支持泛型{/// <summary>/// 指定按照哪一列进行排序/// </summary>private int _columnToSort;/// <summary>/// 指定排序方式/// </summary>private System.Windows.Forms.SortOrder _orderOfSort;/// <summary>/// 声明CaseInsensitiveComparer对象/// </summary>private System.Collections.CaseInsensitiveComparer _comparer;public ListViewItemComparer() {//默认按第一列排序_columnToSort = 0;//默认不排序_orderOfSort = System.Windows.Forms.SortOrder.None;//初始化比较器_comparer = new System.Collections.CaseInsensitiveComparer();}/// <summary>/// 重写 Compare 方法/// </summary>/// <param name="x">比较的第一个对象</param>/// <param name="y">比较的第二个对象</param>/// <returns>比较结果: 相等返回0, x大于y返回1,x小于y返回-1</returns>public int Compare(object x, object y){int compareResult;System.Windows.Forms.ListViewItem listviewX, listviewY;//将object转换为ListViewItemlistviewX = (System.Windows.Forms.ListViewItem)x;listviewY = (System.Windows.Forms.ListViewItem)y;string xText = listviewX.SubItems[_columnToSort].Text;  string yText = listviewY.SubItems[_columnToSort].Text;//比较//如果全是数字if (double.TryParse(xText, out double xInt) && double.TryParse(yText, out double yInt)) {//比较数字compareResult = xInt.CompareTo(yInt);}else//比较字符串{compareResult = xText.CompareTo(yText);}//根据比较结果和排序方式返回结果if (_orderOfSort == System.Windows.Forms.SortOrder.Ascending){//升序return compareResult;}else if (_orderOfSort == System.Windows.Forms.SortOrder.Descending){//降序return (-compareResult);}else{//相等返回0return 0;}}/// <summary>/// 获取或设置排序列/// </summary>public  int ColumnToSort {get {return  _columnToSort;}set {_columnToSort = value;}}/// <summary>/// 获取或设置排序方式/// </summary>public System.Windows.Forms.SortOrder OrderOfSort{get{return _orderOfSort;}set{_orderOfSort = value;}}}

2、比较器的使用

// 初始化比较器
private ListViewItemComparer comparer = new ListViewItemComparer();
//设置比较器
listView1.ListViewItemSorter = comparer;

3、给ListView添加一个ColumnClick事件

private void listView2_ColumnClick(object sender, ColumnClickEventArgs e)
{if (e.Column == comparer.ColumnToSort){if (comparer.OrderOfSort == SortOrder.Ascending){comparer.OrderOfSort = SortOrder.Descending;}else{comparer.OrderOfSort = SortOrder.Ascending;}}else {comparer.ColumnToSort = e.Column;comparer.OrderOfSort = SortOrder.Ascending;}listView2.Sort(); // 调用排序方法进行排序
}

三、使用事件机制实现 ListView 的增删改

http://www.jsqmd.com/news/535332/

相关文章:

  • 数据测试
  • 基于Laravel的企业级IT资产管理系统架构:构建可观测性驱动的资产全生命周期治理平台
  • 内网服务器部署SAM3
  • LuaScript:为Godot引擎注入Lua 5.4的无限魔力
  • 快速上手bert-base-chinese:镜像内置测试脚本,一键体验中文文本处理核心功能
  • 东京大学京都大学2026年入学考试试题
  • SIMA 2:Gemini赋能的3D虚拟世界AI智能体
  • AI Agent社交网络:为什么这是比AI工具更值得关注的方向?
  • Day45本地存储复杂数据类型
  • 通过学习分位数函数改进预测
  • V4L2 的 ioctl 调用流程
  • 经典蓝牙双机控制 APP-完整版1
  • 制造业生产管理闭环解决方案 - 智慧园区
  • QWEN-AUDIO快速部署:一键搭建语音合成平台,省心省力
  • Linux实用功能代码集(3) —— 线程间消息队列(1)
  • 北京回收宣纸|藏家急售无门路?丰宝斋上门回收,省心又靠谱 - 品牌排行榜单
  • Mermaid图表工具终极指南:三步学会专业图表零代码绘制
  • FPGA DSP48E2实战避坑:为什么你的32x32定点乘法性能上不去?从原理到优化全解析
  • 从N元文法到BERT:用Python代码串讲NLP核心模型演进(附实战代码)
  • 炫2张Nature主刊相关性热图
  • RadixAttention 技术详解:从原理到 SGLang 实践及 vLLM APC 对比
  • 2026年AI营销公司TOP5深度评估:从技术壁垒到实战效果的多维选型指南 - 小白条111
  • 惊艳效果展示:实时手机检测-通用镜像识别复杂场景手机案例
  • 接口频繁变化时,Flutter 项目如何保证稳定性?
  • NanoMsg vs ZeroMQ:轻量级通信库选型指南(性能对比+迁移成本分析)
  • 新手编程初体验:在快马用ai生成win11右键菜单还原win10的详细教程代码
  • 在职考公考编党必看!27公考备考APP性价比测评
  • 计算机毕业设计springboot社区物业管理系统 基于SpringBoot的智慧社区综合服务平台 基于SpringBoot的小区数字化运营管理系统
  • Windows Defender禁用技术深度解析:通过WSC API实现安全控制
  • ROS2 MoveIt配置实战:解决机械臂在RViz中‘只规划不执行’和模型不显示的常见问题