C# DataGridView控件与ListView控件的对比学习(二):ListView控件学习

一、定义:

    表示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();//UIEndUpdate 
    for (int i = 0; i < 5; i++)   //10 
    {
        ListViewItem lvi = new ListViewItem(); 
        lvi.ImageIndex = i;     //imageListimageListi 
        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;
}

    运行效果如下:

    第二种,从数据库中自动获取:

        代码如下:

//listview
         private  void  button1_Click ( object  sender ,  EventArgs  e )
         {
             //
             listView1 . Columns . Add ( "" ) ;
             listView1 . Columns . Add ( "" ) ;
             listView1 . Columns . Add ( "" ) ;
             //
             SqlConnection  con  =  new  SqlConnection ( "server=.;database=data1220;user=sa;pwd=123" ) ;
             con . Open ( ) ;
             //conSqlCommand
             SqlCommand  cmd  =  con . CreateCommand ( ) ;
             //sqlcmd
             cmd . CommandText  =  "select*from users" ;
             //cmdSqlDataReaderdr
     ,dr
             SqlDataReader  dr  =  cmd . ExecuteReader ( ) ;
             //drreaddr
             while ( dr . Read ( ))
             {
                 //ListView便listView1
                 ListViewItem  lt  =  new  ListViewItem ( ) ;
                 //ListView
                 lt . Text = dr [ "code" ] . ToString ( ) ;
                 lt . SubItems . Add ( dr [ "name" ] . ToString ( )) ;
                 lt . SubItems . Add ( dr [ "pwd" ] . ToString ( )) ;
                 //ltlistView1
                 listView1 . Items . Add ( lt ) ;
             }
           
             con . Close ( ) ;
         }  

    效果如下:

 

总的来说,跟DataGridView比较而言,DataGridView通过数据源读取数据库,自带增、删、改、查及排序的功能;而ListView的增删改查需要自己手动编写,一般是在需要多种方式显示数据时使用。因此,在功能上,DataGridView更好,但在性能上,ListView更甚一筹。

你可能感兴趣的:(讲解)