一、定义:
表示Windows列表视图控件,一般用来呈现数据,是一种轻量级的呈现数据的方法。
二、重要的属性:
1、第一个非常重要的属性是View:获取或设置项在控件中的显示方式,包括Details、LargeIcon、List、SmallIcon、Tile(默认为 LargeIcon)
(1)LargeIcon:每个项都显示为一个最大化图标,在它的下面有一个标签;
(2)SmallIcon:每个项都显示为一个小图标,在它的右边带一个标签;
(3)List:每个项都显示为一个小图标,在它的右边带一个标签。各项排列在列中,没有列标头;
(4)Details:可以显示任意的列,但只有第一列可以包含一个小图标和标签,其它的列项只能显示文字信息,有列表头;
(5)Tile:每个项都显示为一个完整大小的图标,在它的右边带项标签和子项信息。(只有Windows XP 和 Windows Server 2003 系列支持)
与之相关的属性有:
LargeImageList:大图标集。提示:只在LargeIcon视图使用。
SmallImageList:小图标集。提示:只有在SmallIcon视图使用。
2、第二个比较重要的属性是HeaderStyle:获取或设置列标头样式,有三种样式供选择:
Clickable:列标头的作用类似于按钮,单击时可以执行操作(例如排序);
NonClickable:列标头不响应鼠标单击;
None:不显示列标头。
当HeaderStyle的样式为Clickable时,就必须和ColumnClick配合使用,即当用户在列表视图控件中单击列标头时发生;
用户在点击表头时一般用于排序,所以,与之相关的属性有:
Soritng:对列表视图的项进行排序。(默认为None)
Ascending:项按递增顺序排序。
Descending:项按递减顺序排序。
None:项未排序。
3、第三个比较重要的属性是CheckBoxes:设置控件中各项的旁边是否显示复选框(默认为False),当CheckBoxes为True时,便可以使用CheckedItems来获取控件中当前复选框选中的项;
4、第四个比较重要的属性是LabelEdit:设置用户是否可以编辑控件中项的标签,对于Detail视图,只能编辑行第一列的内容(默认为false);
5、其他比较重要的属性有:
(1)FullRowSelect:设置是否行选择模式。(默认为false) 提示:只有在Details视图该属性才有意义。
(2) GridLines:设置行和列之间是否显示网格线。(默认为false)提示:只有在Details视图该属性才有意义。
(3)AllowColumnReorder:设置是否可拖动列标头来对改变列的顺序。(默认为false)提示:只有在Details视图该属性才有意义。
(4)MultiSelect:设置是否可以选择多个项。(默认为false)
(5)SelectedItems:获取在控件中选定的项。
三、重要的方法:
ListView控件比较重要的方法有两个:
· ListView.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
· ListView.EndUpdate(); //结束数据处理,UI界面一次性绘制。
四、呈现数据:
ListView控件呈现数据的来源有两种:第一种,手动添加数据;第二种,从数据库中自动获取。
第一种,手动添加数据:
手动添加数据也有两种方式,第一种是通过代码添加,第二种是通过操作控件的形式添加。当然,第二种比较简单,首先看第二种通过操作控件的形式添加:
首先,拖动ListView控件到窗口,调整大小和位置;
在“”属性“”窗口中,需要注意,“Columns”属性设置列,“Items”属性设置行,首先编辑Columns属性:
在弹出的窗口中,点击“添加”按钮之后,会出现”columnHeader1”的项,这是ListView控件中的列标题,此时,可以修改列标题的“Text”属性:
最后效果如下图所示:
注意,有时候,列标题出不来的,检查一下HeaderStyle是否设置为Clickable,以及View是否设置为Details;
然后,点击ListView控件右上角的倒三角形按钮,会弹出一个命令选择窗口,当然,点击Items属性效果一样。如下图:
点击”编辑项“,在出现的窗口中点击“添加(A)”,此时,会出现“ListViewItem”,需要明白ListViewItem是ListView控件中的项,即ListView中有很多的ListViewItem项:
在“属性”栏里编辑“SubItems”选项:
点击“添加”后,在“成员”组栏里,会出现“ListViewSubItem”,不难发现,ListViewItem与ListViewSubItem的关系。此时,编辑“Text”属性,最后效果图如下:
通过代码添加时,代码如下:
private ListView CreateLV(){
ListView listView1 = new ListView();
listView1.Bounds = new Rectangle(new Point(10,10), new Size(300,200));
listView1.View = View.Details;
listView1.LabelEdit = true;
listView1.AllowColumnReorder = true;//可以重新调节列的顺序
listView1.CheckBoxes = true;
//添加列标题
ColumnHeader ch1= new ColumnHeader();
ch1.Text = "序号"; //设置列标题
ch1.Width = 60; //设置列宽度
ch1.TextAlign = HorizontalAlignment.Left; //设置列的对齐方式
listView1.Columns.Add(ch1); //将列头添加到ListView控件。
ColumnHeader ch2= new ColumnHeader();
ch2.Text = "姓名"; //设置列标题
ch2.Width = 60; //设置列宽度
ch2.TextAlign = HorizontalAlignment.Left; //设置列的对齐方式
listView1.Columns.Add(ch2); //将列头添加到ListView控件。
//另外一种方法添加列标题
listView1.Columns.Add("密码", 60, HorizontalAlignment.Left); //一步添加
//添加数据项
listView1.BeginUpdate();//数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
for (int i = 0; i < 5; i++) //添加10行数据
{
ListViewItem lvi = new ListViewItem();
lvi.ImageIndex = i; //通过与imageList绑定,显示imageList中第i项图标
lvi.Text = "subitem" + i;
lvi.SubItems.Add("第2列,第"+i+"行");
lvi.SubItems.Add("第3列,第"+i+"行");
listView1.Items.Add(lvi);
}
listView1.EndUpdate(); //结束数据处理,UI界面一次性绘制。
// Create two ImageList objects.
ImageList imageListSmall = new ImageList();
// Initialize the ImageList objects with bitmaps.
imageListSmall.Images.Add(Bitmap.FromFile("C:\\MySmallImage1.bmp"));
imageListSmall.Images.Add(Bitmap.FromFile("C:\\MySmallImage2.bmp"));
imageListSmall.Images.Add(Bitmap.FromFile("C:\\MySmallImage3.bmp"));
imageListSmall.Images.Add(Bitmap.FromFile("C:\\MySmallImage4.bmp"));
imageListSmall.Images.Add(Bitmap.FromFile("C:\\MySmallImage5.bmp"));
//Assign the ImageList objects to the ListView.
listView1.SmallImageList = imageListSmall;
return listView1;
}
运行效果如下:
第二种,从数据库中自动获取:
代码如下:
效果如下:
总的来说,跟DataGridView比较而言,DataGridView通过数据源读取数据库,自带增、删、改、查及排序的功能;而ListView的增删改查需要自己手动编写,一般是在需要多种方式显示数据时使用。因此,在功能上,DataGridView更好,但在性能上,ListView更甚一筹。