2014-07-31 20:22:14|?次阅读|上传:wustguangh【已有?条评论】发表评论
众所周知主键是区分每条不同记录最可靠的方法,一旦主键不显示在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 (DataRow reader in stu.Rows) //前提是stu有数据,stu是DataTable { ListViewItem item = new ListViewItem((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开始计数的,很简单吧!
namespace ListViewExercise { public partial class Form1 : Form { public Form1() { InitializeComponent(); ListViewSet(); CreateViewItemMethodOne(); //CreateViewItemMethodTow(); } /// ListView 設置 private void ListViewSet() { //ListView顯示方式 listViewControl.View = View.Details; } /// //手動填加ListView方法1 private void CreateViewItemMethodOne() { 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 private void CreateViewItemMethodTow() { #region 增加Item的標題,共有三個列 //1、創建標題,共三列 listViewControl.Columns.Add("文件名"); listViewControl.Columns.Add("大小"); listViewControl.Columns.Add("創建日期"); #endregion listViewControl.BeginUpdate(); #region 增加第一個Item //2、定義一個ListViewItem,在View.Details模式下,有點像第一列中一個值 ListViewItem lvItem; //3、定義ListViewSubItem,在View.Details模式下,有點像第二列中一個值 ListViewItem.ListViewSubItem lvSubItem; //實列化一個Item,在View.Details模式下,有點像加第一行的第一個值 lvItem = new ListViewItem(); //Item的顯示的文字 lvItem.Text = "文件夾1"; //4、Item增加到ListView控件中,即增加第一行。在View.Details模式下,有點像增加了第一個項目的第一列的第一個值 listViewControl.Items.Add(lvItem); //實例化SubItem lvSubItem = new ListViewItem.ListViewSubItem(); lvSubItem.Text = "10"; //5、將SubItem增加到第一個Item中,在View.Details模式下,有點像增加了第一個項目的第二列的第一個值 lvItem.SubItems.Add(lvSubItem); lvSubItem = new ListViewItem.ListViewSubItem(); lvSubItem.Text = "20080114"; //將SubItem增加到第一個Item中,在View.Details模式下,有點像增加了第一個項目的第三列的第一個值 lvItem.SubItems.Add(lvSubItem); #endregion #region 增加第二個Item lvItem = new ListViewItem(); lvItem.Text = "文件夾2"; lvSubItem = new ListViewItem.ListViewSubItem(); lvSubItem.Text = "20"; lvItem.SubItems.Add(lvSubItem); lvSubItem = new ListViewItem.ListViewSubItem(); lvSubItem.Text = "20080115"; lvItem.SubItems.Add(lvSubItem); listViewControl.Items.Add(lvItem); #endregion listViewControl.EndUpdate(); } //第三种自己的方法,挺有效的,简单的 private void CreateViewItems() { 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(); } } }