2. 案例学习:编程实现ListView 控件的行列信息填充

1)从工具箱之中拖放三个Button控件和一个ListView 控件,同时设置ListView 控件的属性ViewDetails。如图2-32所示布局。
2-32  编程实现ListView 控件的行列信息填充界面
    2)具体功能的实现见下面的编码部分:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsApplication2
{
    public partial class Form001 : Form
    {
        public Form001()
        {
            InitializeComponent();
            listView1.View = View.Details;//设置listView对象的View属性值为Details
        }
        /// <summary>
        /// 在初始化事件之中配置当前listView1控件的基本属性
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form001_Load(object sender, EventArgs e)
        {
            ColumnHeader Header1 = new ColumnHeader();//确定一个表头对象
            //设置表头的名称、对齐方式和宽度属性
            Header1.Text = "姓名";
            Header1.TextAlign = HorizontalAlignment.Center;
            Header1.Width = 100;
            //将表头对象添加入listView控件
            listView1.Columns.Add(Header1);
        }
        /// <summary>
        /// 添加属性列编码部分
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            //此处学习如何添加表头列
            listView1.Columns.Add("年龄", 100, HorizontalAlignment.Center);
            listView1.Columns.Add("班级", 40, HorizontalAlignment.Center);
            listView1.Columns.Add("性别", 40, HorizontalAlignment.Center);
            listView1.Columns.Add("职业", 40, HorizontalAlignment.Center);
            button2.Enabled = false;
        }
         /// <summary>
        /// 移除行信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            //通过Remove移除listView行信息
            listView1.Columns.Remove(listView1.Columns[0]);
        }
        /// <summary>
        /// 添加数据行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            listView1.BeginUpdate();
          //如果希望使用 ListView.ListViewItemCollection 类的 Add 方法以每次一个的方式添加项,
          //则可以使用 BeginUpdate 方法防止控件在每次添加项时重新绘制 ListView。在完成将项添加//到控件的任务后,请调用 EndUpdate 方法以使 ListView 能够重新绘制。这种添加项的方法可以防止将//大量项添加到控件时发生闪烁的 ListView 绘制。
            listView1.Items.Add("row1", "张三", 0);
          //增加第一个Item,在View.Details模式下,有点像第一列中一个值。或者是二维表的索引值,//或者是数据库的主码位置。
            listView1.Items["row1"].SubItems.Add("21");
          //增加第一个Item的第一个子项SubItem,在View.Details模式下,有点像第一行中的第二个值
            listView1.Items["row1"].SubItems.Add("98001");
            listView1.Items["row1"].SubItems.Add("男");
            listView1.Items["row1"].SubItems.Add("学生");
            //以上内容,以此类推。
            listView1.Items.Add("row2", "李四", 1);
            listView1.Items["row2"].SubItems.Add("22");
            listView1.Items["row2"].SubItems.Add("98002");
            listView1.Items["row2"].SubItems.Add("女");
            listView1.Items["row2"].SubItems.Add("教师");
 
            listView1.Items.Add("row3", "王五", 2);
            listView1.Items["row3"].SubItems.Add("23");
            listView1.Items["row3"].SubItems.Add("98003");
            listView1.Items["row3"].SubItems.Add("男");
            listView1.Items["row3"].SubItems.Add("干部");
 
            listView1.Items.Add("row4", "赵六", 3);
            listView1.Items["row4"].SubItems.Add("24");
            listView1.Items["row4"].SubItems.Add("98004");
            listView1.Items["row4"].SubItems.Add("女");
            listView1.Items["row4"].SubItems.Add("军人");
            //与listView1.BeginUpdate()成对出现,结束更新
            listView1.EndUpdate();
            //下面开始学习如何添加行颜色变化
            for (int i = 0; i < listView1.Items.Count; i++)
            {
                if (i % 2 == 0)
                {
                    listView1.Items[i].BackColor = Color.Gray;
                }
            }
            //下面开始熟悉属性
            this.listView1.GridLines = true; //显示表格线
            this.listView1.View = View.Details;//显示表格细节
            this.listView1.LabelEdit = true; //是否可编辑,ListView只可编辑第一列。
            this.listView1.Scrollable = true;//有滚动条
            this.listView1.HeaderStyle = ColumnHeaderStyle.Clickable;//对表头进行设置
       }
        /// <summary>
        /// 清空全部的数据项
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            this.listView1.Clear();
        }
        /// <summary>
        /// 清除列表内容,不清除表头信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();
        }
        /// <summary>
        /// 当鼠标点击ListView某行时候弹出信息提示
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            foreach (ListViewItem lst in listView1.SelectedItems)
            {
                //在这里对lst进行处理,lst代表每一个被选中的ListViewItem  
                MessageBox.Show(lst.Text);//这里示例显示每一个被选中的项的第一列的文本  
            }
        }
    }
}
    3)运行后效果见图2-33
2-33  编程实现ListView 控件的行列信息填充运行界面