怎样使用C#的listview控件

如题所述

ListView我认为是种数据型的控件,以装载和展示数据为目的,当然也能展示图片,这个功能没有试过。这里讲一下ListView的第一次使用后的一些小结。    ListView一些设置与添加字段。  Lv1=newListView();//实例化  Lv1.GridLines=true;file://显示各个记录的分隔线  Lv1.FullRowSelect=true;file://要选择就是一行  Lv1.View=View.Details;file://定义列表显示的方式  Lv1.Scrollable=true;file://需要时候显示滚动条  Lv1.MultiSelect=false;//不可以多行选择  listView1.Items.Remove(listView1.SelectedItems[0]);//这样可以在ListView中删除选择的行  Lv1.HeaderStyle=ColumnHeaderStyle.Nonclickable;//针对数据库的字段名称,建立与之适应显示表头    设置列名称:  Lv1.Columns.Add("A",60,HorizontalAlignment.Right);  Lv1.Columns.Add("B",100,HorizontalAlignment.Left);  Lv1.Columns.Add("C",100,HorizontalAlignment.Left);  Lv1.Visible=true;    用循环把数据插入进ListView,用reader方法读取中括号中的字段名。  lv1.Items.Clear();//清空lv1中的记录  ListViewItemli=newListViewItem();  li.SubItems.Clear();//清空每行数据的每一列数据。  foreach(DataRowreaderinstu.Rows)//前提是stu有数据,stu是DataTable  {  ListViewItemitem=newListViewItem((reader["EMP_NO"]).ToString());  item.SubItems.Add(reader["NAME"].ToString());  item.SubItems.Add(reader["ID"].ToString());  this.lv1.Items.Add(item);  }  接下来说说Listview中的一些小技巧。  一、鼠标选中一行记录,如何读取那行记录中的某列记录??  很简单用这句话:lv1.SelectedItems[0].SubItems[0].Text    SelectedItems[0]指的是你选中的行,如果你选中的是多行,那么第一行中括号里就是0,第二行就是1,以此类推。  SubItems[0]指的是你选中的列,第一列中括号里就是0,第二行就是1,以此类推。    二、Listview中双击记录事件。  在.cs文件里写:  privatevoidlv1_DoubleClick(objectsender,EventArgse)//双击listview  {  //这里写你想要产生的事件。例如:  MessageBox.Show("OK");  }  在.Designer.cs文件里找到相关的控件代码写入如下信息:  this.lv1.DoubleClick+=newSystem.EventHandler(this.lv1_DoubleClick);  例如:  //lv1  //  this.lv1.Location=newSystem.Drawing.Point(-3,98);  this.lv1.Name="lv1";  this.lv1.Size=newSystem.Drawing.Size(1018,527);  this.lv1.TabIndex=28;  this.lv1.UseCompatibleStateImageBehavior=false;  this.lv1.View=System.Windows.Forms.View.Details;  this.lv1.DoubleClick+=newSystem.EventHandler(this.lv1_DoubleClick);  三、Listview隐藏列  有时候用Listview会遇到这样的麻烦。  众所周知主键是区分每条不同记录最可靠的方法,一旦主键不显示在Listview中,那选中Listview某一行也就意味着在这一行中取不到这条记录的主键,只能取到其他显示的字段,那如何把这条记录传递给其他窗口呢?用其他字段?如果是这样的话就风险太大了,因为其他字段会有重复的可能,这样的程序就会出现BUG。  这时候就该发挥隐藏列的作用了,隐藏列方便使用,其作用是在前台页面看不出有那条主键的字段,但是在代码控制中却包含了这个字段,我们点击某一条记录时就能方便的获取这条记录的主键字段,这样只要把这字段字符传到其他窗体就没问题了,因为主键字段是唯一且不能为空的。  下面说说具体实现方法。  Lv1.Columns.Add("A",60,HorizontalAlignment.Right);  Lv1.Columns.Add("B",100,HorizontalAlignment.Left);  Lv1.Columns.Add("C",100,HorizontalAlignment.Left);  Lv1.Visible=true;    foreach(DataRowreaderinstu.Rows)//前提是stu有数据,stu是DataTable  {  ListViewItemitem=newListViewItem((reader["EMP_NO"]).ToString());  item.SubItems.Add(reader["NAME"].ToString());  item.SubItems.Add(reader["ID"].ToString());  item.SubItems.Add(reader["PrimaryKey"].ToString());  this.lv1.Items.Add(item);  }  红色的是列的标题,白色的是循环输出每一行数据,这样可以很明显的看出,只有3列,却插入了4列的数据,而最后一列就是主键,而显示是也只有3列,那有人会问了,既然第四列没有显示,如何去第四列的数据呢?  也是同样的代码:lv1.SelectedItems[0].SubItems[3].Text  这个3显示的就是第四列的数据,因为计算机是从0开始计数的,很简单吧!  namespaceListViewExercise  {  publicpartialclassForm1:Form  {  publicForm1()  {  InitializeComponent();  ListViewSet();  CreateViewItemMethodOne();  //CreateViewItemMethodTow();  }  ///ListView设置  privatevoidListViewSet()  {  //ListView显示方式  listViewControl.View=View.Details;  }  /////手动填加ListView方法1  privatevoidCreateViewItemMethodOne()  {  listViewControl.BeginUpdate();  #region增加Item的标题,共有三个列  //1、创建标题  listViewControl.Columns.Add("文件名");  listViewControl.Columns.Add("大小");  listViewControl.Columns.Add("创建日期");  #endregion  #region手动填加ListView方法  //2、增加第一个Item,在View.Details模式下,有点像第一列中一个值  listViewControl.Items.Add("folder1","文件夹1",0);  //3、增加第一个Item的第一个SubItem,在View.Details模式下,有点像第一列中一个值  listViewControl.Items["folder1"].SubItems.Add("11");  //增加第一个Item的第二个SubItem,在View.Details模式下,有点像第一列中一个值  listViewControl.Items["folder1"].SubItems.Add("20080114");  listViewControl.Items.Add("folder2","文件夹2",0);  listViewControl.Items["folder2"].SubItems.Add("21");  listViewControl.Items["folder2"].SubItems.Add("20080115");  listViewControl.Items.Add("文件夹3");  listViewControl.Items.Add("文件夹4");  #endregion  listViewControl.EndUpdate();  }  ///手动填加ListView方法2  privatevoidCreateViewItemMethodTow()  {  #region增加Item的标题,共有三个列  //1、创建标题,共三列  listViewControl.Columns.Add("文件名");  listViewControl.Columns.Add("大小");  listViewControl.Columns.Add("创建日期");  #endregion  listViewControl.BeginUpdate();  #region增加第一个Item  //2、定义一个ListViewItem,在View.Details模式下,有点像第一列中一个值  ListViewItemlvItem;  //3、定义ListViewSubItem,在View.Details模式下,有点像第二列中一个值  ListViewItem.ListViewSubItemlvSubItem;  //实列化一个Item,在View.Details模式下,有点像加第一行的第一个值  lvItem=newListViewItem();  //Item的显示的文字  lvItem.Text="文件夹1";  //4、Item增加到ListView控件中,即增加第一行。在View.Details模式下,有点像增加了第一个项目的第一列的第一个值  listViewControl.Items.Add(lvItem);    //实例化SubItem  lvSubItem=newListViewItem.ListViewSubItem();  lvSubItem.Text="10";  //5、将SubItem增加到第一个Item中,在View.Details模式下,有点像增加了第一个项目的第二列的第一个值  lvItem.SubItems.Add(lvSubItem);  lvSubItem=newListViewItem.ListViewSubItem();  lvSubItem.Text="20080114";  //将SubItem增加到第一个Item中,在View.Details模式下,有点像增加了第一个项目的第三列的第一个值  lvItem.SubItems.Add(lvSubItem);  #endregion  #region增加第二个Item  lvItem=newListViewItem();  lvItem.Text="文件夹2";  lvSubItem=newListViewItem.ListViewSubItem();  lvSubItem.Text="20";  lvItem.SubItems.Add(lvSubItem);  lvSubItem=newListViewItem.ListViewSubItem();  lvSubItem.Text="20080115";  lvItem.SubItems.Add(lvSubItem);  listViewControl.Items.Add(lvItem);  #endregion  listViewControl.EndUpdate();  }    //第三种自己的方法,挺有效的,简单的  privatevoidCreateViewItems()  {  listView1.BeginUpdate();  listView1.Columns.Add("矩阵控制命令");  listView1.Columns.Add("功能描述");  listView1.Columns[0].Width=145;  listView1.Columns[1].Width=515;  listView1.Items.Add("/%Lock;");  listView1.Items[0].SubItems.Add("锁定键盘");  listView1.Items.Add("/%Unlock;");  listView1.Items[1].SubItems.Add("解开键盘的锁定");  listView1.Items.Add("/Version;");  listView1.Items[2].SubItems.Add("查询软件版本");  listView1.Items.Add("/:BellOff;");  listView1.Items[3].SubItems.Add("关闭蜂鸣器");  listView1.EndUpdate();  }  }  }
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜