C# Listview 表格控件

介绍

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 // 取消勾选
    {

    }
}