C# ListView 的用法

article/2025/9/26 9:39:36

ListView 是一种多列的列表视图控件,可以用于展示多个数据项及其相关信息。ListView 控件提供了丰富的属性和事件,可以用于实现各种各样的表格视图,包括带有单元格编辑、排序和分组等功能。

下面我们通过几个示例来演示如何使用 ListView 控件。

示例一:基本使用

在这个示例中,我们将创建一个基本的 ListView 控件,并在其中添加三列数据 —— 姓名、电话和地址。我们将使用 Items 属性向 ListView 控件中添加数据,每位客户信息将占用 ListView 中的一行,每个属性将在一行中的不同列中显示。以下是示例代码:

private void Form1_Load(object sender, EventArgs e)
{// 创建三列,分别代表姓名、电话和地址var colName = new ColumnHeader();colName.Text = "姓名";colName.Width = 100;var colPhone = new ColumnHeader();colPhone.Text = "电话";colPhone.Width = 150;var colAddress = new ColumnHeader();colAddress.Text = "地址";colAddress.Width = 200;// 添加列到 ListView 控件中listView1.Columns.Add(colName);listView1.Columns.Add(colPhone);listView1.Columns.Add(colAddress);// 添加客户信息到 ListView 控件中ListViewItem item1 = new ListViewItem("张三");item1.SubItems.Add("123456789");item1.SubItems.Add("北京市海淀区");ListViewItem item2 = new ListViewItem("李四");item2.SubItems.Add("234567890");item2.SubItems.Add("上海市浦东新区");ListViewItem item3 = new ListViewItem("王五");item3.SubItems.Add("345678901");item3.SubItems.Add("广州市天河区");listView1.Items.Add(item1);listView1.Items.Add(item2);listView1.Items.Add(item3);
}

在这个代码中,我们首先创建了三个 ColumnHeader 对象,分别表示列表视图中的三列 —— 姓名、电话和地址。我们使用 Text 属性来设置每列的标题,使用 Width 属性来设置每列的宽度,然后添加这三列到 ListView 控件中。在添加每列时,我们将其添加到 Columns 集合中,从而在列表视图中创建新列。

接下来,我们使用 ListViewItem 对象和 SubItems 属性来填充每一行的数据。在这个示例中,我们手动创建了三个对象,每个对象分别代表一个客户的姓名、电话和地址。我们将每个对象添加到 Items 集合中,从而在列表视图中创建新的行。我们使用 Add 方法添加每个 ListViewItem 对象到 Items 集合中,从而在列表视图中创建新行。我们使用 SubItems 属性来添加每个行中的列属性,这可以帮助我们显示多列数据。

示例二:动态添加和删除行

在这个示例中,我们将动态地添加和删除行。我们创建了两个按钮,一个用于添加行,一个用于删除选中的行。我们将添加两个事件处理程序,来响应用户单击这两个按钮的操作。以下是示例代码:

private void btnAdd_Click(object sender, EventArgs e)
{// 显示一个对话框,引导用户输入新的客户信息(姓名、电话、地址)using (var dlg = new AddCustomerDialog()){var result = dlg.ShowDialog();if (result == DialogResult.OK){// 当用户单击“确定”按钮时,添加一行数据到 ListView 控件中var item = new ListViewItem(dlg.Customer.Name);item.SubItems.Add(dlg.Customer.Phone);item.SubItems.Add(dlg.Customer.Address);listView1.Items.Add(item);}}
}private void btnDelete_Click(object sender, EventArgs e)
{// 删除选中的行foreach (ListViewItem item in listView1.SelectedItems){listView1.Items.Remove(item);}
}

在这个代码中,我们首先创建了两个事件处理程序,一个用于添加行,一个用于删除选中的行。在添加行的事件处理程序中,我们使用 AddCustomerDialog 模式对话框,引导用户输入新的客户信息。当用户单击“确定”按钮时,我们获取模式对话框中输入的客户信息,创建一个新的 ListViewItem 的 ListViewItem 对象并将其添加到 ListView 控件的项集合中,从而在列表视图中创建新行。注意,我们在添加新行之前,需要先检查用户单击了模式对话框的“确定”按钮,确保用户输入了有效的客户信息。在删除选中行的事件处理程序中,我们简单地遍历 SelectedItems 集合,对于每个选定的 ListViewItem 对象,使用 Remove 方法将其从 ListView 控件的项集合中移除。删除行的过程中,我们没有检查是否选择了任何行,但需要注意,如果未选择任何行,则 SelectedItems 集合将为空,而删除行的代码将什么也不做。

示例三:自定义列

在这个示例中,我们将向 ListView 控件中添加一个具有自定义列的数据。我们将创建一个新的 ListView 子类,覆盖 OnCreateControl 方法以向控件中添加自定义列。在自定义列的列标题区域中,我们将添加一个新的按钮控件,用于在列标题被单击时触发事件。以下是示例代码:

public class CustomListView : ListView
{private ColumnHeader customColumnHeader = null;protected override void OnCreateControl(){base.OnCreateControl();AddCustomColumn();}private void AddCustomColumn(){// 创建自定义列表头customColumnHeader = new ColumnHeader();customColumnHeader.Text = "操作";customColumnHeader.Width = 100;this.Columns.Add(customColumnHeader);// 添加按钮到自定义列表头中var btn = new Button();btn.Text = "新建客户";btn.AutoSize = true;btn.Click += (sender, e) =>{// TODO: 在这里添加新客户的代码};customColumnHeader.TextAlign = HorizontalAlignment.Center;customColumnHeader.Control = btn;}
}

在这个代码中,我们创建了一个名为 CustomListView 的新类,并继承了 ListView。我们覆盖了 OnCreateControl 方法,在控件第一次创建时添加了一个自定义列。我们创建了一个 ColumnHeader 对象来表示自定义列的列头,将自定义列添加到控件的 Columns 集合中。我们在 ColumnHeader 控件的 Control 属性中添加了按钮控件,该按钮控件将出现在列头中。在点击按钮时,我们可能通过添加代码来处理与新客户相关的操作。

值得注意的是,为了确保按钮仅占列头中的一部分,我们通过 AutoSize 属性来将控件的大小调整为其包含的内容同样的大小,从而将按钮置于列头的最前面。我们通过 TextAlign 属性和 HorizontalAlignment.Center 值来使按钮在整个列头中居中。

这个示例只是展示了如何向 ListView 控件中添加具有自定义列的数据,而按钮的具体事件处理程序需要根据具体的需求来自行定义。

当然有,这里再介绍一下 ListView 控件的集成视图模式和虚拟模式。

集成视图模式

集成视图模式允许将数据通过关联到 ListView 控件来显示。在这个模式下,我们可以指定一个数据源,该数据源必须实现 IList 接口。在这个模式下,当我们向 Items 集合中添加数据时,实际上是将数据项添加到数据源中。以下是使用集成视图模式实现的示例代码:

private void Form1_Load(object sender, EventArgs e)
{// 创建数据源var customers = new List<Customer>();customers.Add(new Customer() { Name = "张三", Phone = "123456789", Address = "北京市海淀区" });customers.Add(new Customer() { Name = "李四", Phone = "234567890", Address = "上海市浦东新区" });customers.Add(new Customer() { Name = "王五", Phone = "345678901", Address = "广州市天河区" });// 关联数据源和 ListView 控件listView1.View = View.Details;listView1.VirtualListSize = customers.Count;listView1.RetrieveVirtualItem += (s, args) =>{var customer = customers[args.ItemIndex];args.Item = new ListViewItem(customer.Name);args.Item.SubItems.Add(customer.Phone);args.Item.SubItems.Add(customer.Address);};
}

在这个代码中,我们创建了一个 List<Customer> 对象,并添加了几个客户信息。然后,我们将 View 属性设置为 Details,并将 VirtualListSize 属性设置为数据源的大小。我们使用 RetrieveVirtualItem 事件来提供数据。在这个事件中,我们使用 ListViewItem 和 SubItems 属性来向 ListView 控件中填充每行的数据。使用虚拟列表改进了数据量较大时的渲染速度。

虚拟模式

当我们需要显示大量数据时,使用虚拟模式可以显著提高 ListView 控件的性能。在虚拟模式下,ListView 控件只在需要显示时才从数据源中检索数据。以下是使用虚拟模式实现的示例代码:

private void Form1_Load(object sender, EventArgs e)
{// 创建数据源var customers = new List<Customer>();for (int i = 1; i <= 100000; i++){customers.Add(new Customer() { Name = $"客户{i}", Phone = $"Phone {i}", Address = $"Address {i}" });}// 设置列表视图的样式和虚拟模式listView1.View = View.Details;listView1.VirtualMode = true;listView1.VirtualListSize = customers.Count;// 为列添加数据listView1.Columns.Add("姓名");listView1.Columns.Add("电话");listView1.Columns.Add("地址");listView1.RetrieveVirtualItem += (s, args) =>{var customer = customers[args.ItemIndex];var item = new ListViewItem(customer.Name);item.SubItems.Add(customer.Phone);item.SubItems.Add(customer.Address);args.Item = item;};
}

在这个代码中,我们创建了一个包含 100,000 条客户信息的数据源,并将 VirtualMode 属性设置为 true。然后,我们将 View 属性设置为 Details,并为每列添加的标题。在 RetrieveVirtualItem 事件中在 RetrieveVirtualItem 事件中,我们首先获取 itemIndex 对应的数据项,然后将其添加到 ListViewItem 对象中并通过 args.Item 返回该项,从而使它在控件中显示。注意,由于在虚拟模式下,只有控件需要显示的项才会从数据源中检索,因此该事件在控件滚动时会被多次调用,以获取相应项的数据。

需要注意的是,使用虚拟模式时,如果要添加行、删除行或者更新行等操作,我们需要在数据源中进行相应的修改,而不是直接在 Items 集合中进行相应的操作。

使用虚拟模式时,控件只会从数据源中检索需要显示的数据,而不会将整个数据源加载到内存中。因此,在大量数据的情况下,虚拟模式可以有效节省内存和提高控件性能。

以上是一些常见的 ListView 控件的用法和示例代码。当然,ListView 控件的功能远不止于此,还提供了许多其他的属性和事件,如单元格编辑、排序、分组、满屏显示等,您可以根据自己的需求自由选择和使用。


http://chatgpt.dhexx.cn/article/aMHnSWFm.shtml

相关文章

Qt ListView使用

概述 Qt中ListView加载数据一般有两种方式&#xff0c;一种是直接qml文件中model直接定义并且放置数据&#xff0c;一种是C代码中定义Model&#xff0c;再setContextProperty的方式暴露给qml域。 步骤 &#xff08;1&#xff09;qml界面 import QtQuick 2.0 import QtQui…

Android控件listview ListView的用法

在Android开发中&#xff0c;ListView是一个比较常用的控件&#xff0c;它以列表的形式展示数据内容&#xff0c;并且能够根据列表的高度自适应屏幕显示。ListView的样式是由属性决定的&#xff0c;它的常用属性如下所示 android:listSelector 点击后改变背景颜色 android:divi…

Android之ListView实现

ListView 用来显示多个可滑动项&#xff08;Item&#xff09;列表的ViewGroup。 需要使用Adapter&#xff08;适配器&#xff09;将集合数据和每一个Item所对应的布局动态适配到ListView中显示 显示列表&#xff1a;listView.setAdapter(adapter) Adapter ArrayAdapter&#xf…

ListView使用方法

ListView使用方法总结 - 直接使用ListView组件创建列表 - 通过Activity继承ListActivity创建 - 定制ListView界面 直接使用ListView组件创建列表 通过数组资源文件指定列表项 先在XML布局文件中添加ListView标志&#xff0c;设置好相关属性&#xff1b;在values下创建数组资…

Android—— ListView 的简单用法及定制ListView界面

一、ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤&#xff1a; 1&#xff09;首先新建一个项目&#xff0c; 并让ADT 自动帮我们创建好活动。然后修改activity_main.xml 中的代码&#xff0c;如下所示&#xff1a; &…

QT listView学习

文章目录 listViewdemo说明demo演示model定义委托 QStyledItemDelegate总结 listView listView 对比 tableView 、 treeView来说&#xff0c;最大的不同就是数据结构的不同。treeView是像树一样的层次结构&#xff0c;而listView则就是像链表一样的结构 跟之前的treeView&…

还在用ListView?

还在用Lisview&#xff1f;RecyclerView都已经出来一年多了&#xff01; 想必大家多或多或少的接触过或者了解过RecyclerView&#xff0c;为什么没有用起来&#xff0c;原因大概如下&#xff1f; ListView我用的挺好的&#xff0c;为什么要换RecyclerView&#xff1f;ListView…

ListView用法

ListView是用于显示数据的&#xff0c;先在窗体中拉一个lisview控件&#xff0c;还有一些新增、修改、删除、查询按钮和文本框&#xff0c;控件名称为listview,按钮为btnInsert,btnUpate,btnDeleteOne,btnDelete,btnSelect,文本框的名称为txtName,txtSex,txtPhone,txtAddress,设…

ListView的基础用法

最近学到ListView和RecyclerView&#xff0c;感觉有点难理解&#xff0c;于是自己找到了篇文章&#xff0c;感觉写的挺详细的&#xff08;文章链接在文末&#xff09;&#xff0c;然后自己再整理敲了跑了一遍&#xff0c;总结了一下&#xff0c;方便自己以后回头温习。 一个Li…

Android(14) ArrayAdapter(数组适配器)的三种方法

ArrayAdapter数组适配器用于绑定格式单一的数据&#xff0c;数据源可以是集合或者数组 列表视图(ListView)以垂直的形式列出需要显示的列表项。 实现过程&#xff1a;新建适配器->添加数据源到适配器->视图加载适配器 第一种&#xff1a;直接用ListView组件创建 列表…

Android——列表视图(ListView)

1、什么是ListView&#xff1f;它可以实现怎样的功能&#xff1f; 列表视图是android中最常用的一种视图组件&#xff0c;它以垂直列表的形式列出需要显示的列表项。手机屏幕空间有限&#xff0c;能显示的内容不多。可以借助ListView来显示更多、更丰富的内容。ListView允许用…

ListView详细介绍与使用

前言介绍&#xff1a; 关于 ListView 我们大家都应该是非常的熟悉了&#xff0c;在 Android 开发中是经常用到的&#xff0c;今天就再来回顾一下&#xff0c;ListView 的使用方法&#xff0c;和一些需要优化注意的地方&#xff0c;还有日常开发过程中的一些小技巧和经验。 Li…

Android最常用的控件ListView(详解)

一.ListView简介 在Android开发中&#xff0c;ListView是一个比较常用的控件。它以列表的形式 展示具体数据内容&#xff0c;并且能够根据数据的长度自适应屏幕显示。 二.ListView简单用法 代码部分 1.布局界面 activity_main.xml 代码&#xff1a; <?xml version"1…

ListView的用法

一、 ListView的使用 <ListView>:用于展示大量数据的一种列表视图,通过上下滑动的方式将屏幕外的数据滚动到屏幕内。 数据无法直接传递给ListView,需要适配器 Adapter:作用是将各种数据以合适的形式展示到View上 实例&#xff1a; Food.java: public class Food {priv…

Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等

private void showAlerDialog() {AlertDialog dialog new AlertDialog.Builder(this).setTitle("AlerDialog").setMessage("这是一个AlertDialog").setPositiveButton("确定",null).setNegativeButton("取消",null).create();dialog.…

【android学习】Dialog对话框

1&#xff0c;Dialog 1&#xff09;onCreateDialog(int) 2&#xff09;showDialog(int) 第一次请求时&#xff0c;会从Activity中调用onCreateDialog。 3&#xff09;onPrepareDialog(int,Dialog) 在每次打开对话框时被调用。 4&#xff09;dismissDialog(int) 关闭对话…

Android Dialog使用详解

对话框是提示用户作出决定或输入额外信息的小窗口&#xff0c;通常不会填充整个屏幕&#xff0c;用于进行一些额外交互 Dialog 类是对话框的基类&#xff0c;但应该避免直接实例化 Dialog&#xff0c;而应使用其子类&#xff0c;比如 AlertDialog 此对话框可显示标题、提示信…

Android 修改AlertDialog原生setPositiveButton的字体颜色背景颜色大小边距位置

看效果图&#xff1a; public void lanyaClick(View v) {//点击确定之后转向登陆框LayoutInflater factory LayoutInflater.from(Beforestart.this);//得到自定义对话框final View DialogView factory.inflate(R.layout.item_alert_dialog, null);//创建对话框android.app.Al…

setPositiveButton和setNegativeButton的区别

setPositiveButton和setNegativeButton的区别和setNeutralButton的区别 三者都是AlertDialog弹出框的按钮&#xff0c;都是封装好的button&#xff0c;只是显示的位置不同&#xff0c;项目中可根据情况选择使用&#xff0c;setNegativeButton一般用于确认&#xff0c;setNegat…

GPS(rinex格式)数据解析详细解读

RINEX格式现如今已成为GPS测量应用中的标准数据格式&#xff0c;目前应用最为广泛、最普遍的是RINEX格式的第2个版本&#xff0c;该版本能够用于包括静态和动态GPS测量在内的不同观测模式数据。在该版本中定义了6种不同类型的数据文件&#xff0c;分别用于存放不同类型的数据&a…