ListView浅谈

制作时间:2009-9-10 9:30-13:38
地点:北大青鸟公共机房

要求:
  1.用ListView显示数据
  2.实现模糊查询功能
  3.修改ListView中某项的值(比如:从活动改为非活动)
  4.可以修改多行,可以删除多行
  5.ListView列宽自动调整


实现:
  1.ListView显示数据
     1.写一个比较公用的方法,如果参数为空则查询所有,否则根据条件查询
            public void FillLvStudentByCondition(string condition)
            string sql = string.Format("select * from student {0}",condition);
     2.在此方法内,循环读取数据并填充到listview
        while (dr.Read())
        {
            //循环填充到lvStudent
            ListViewItem lviStudent = new ListViewItem(dr["Name"].ToString());
            lviStudent.Tag = dr["Id"].ToString();//把Id保存在Tag,方便以后修改或删除
            string state = Convert.ToInt32(dr["State"]) == 0 ? "活动" : "非活动";
            lviStudent.SubItems.AddRange(new string[] { dr["stuNo"].ToString(), state });
            lvStudent.Items.Add(lviStudent);
        }
   2.实现模糊查询功能:直接传参数调用上面的方法,比如:
            string sql = string.Format("where name like '%{0}%'",txtName.Text);
            FillLvStudentByCondition(sql);
   3.修改ListView中某项的值(可修改多行)
      1.先拼接sql语句,再调用通用的更新方法。
          foreach (ListViewItem lviStudent in lvStudent.SelectedItems)
          {
            sql += string.Format("{0} update student set State={1} where Id={2}", "",
                Convert.ToInt32(((ToolStripMenuItem)sender).Tag), Convert.ToInt32(lviStudent.Tag));
          }
          UpdateOrDelete(sql);
      2.解释:
         1.lvStudent.SelectedItems     表示lvStudent中被选中的项
         2.((ToolStripMenuItem)sender).Tag 当点快捷菜单(ContextMenuStrip)时得到它的Tag
            Tag在load事件给赋值,如:tsmiAction.Tag = 0;  tsmiInAction.Tag = 1;
         3.lviStudent.Tag 表示选中的行在数据库中对应的Id(在填充ListView时,给赋的值)
   4.删除多行同理(和修改差不多,就是sql语句不同)
   5.ListView列宽自动调整
       private void lvStudent_SizeChanged(object sender, EventArgs e)
        {
            lvStudent.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        }


额外知识:
  1.用了枚举,保证输入数据的正确性
    public enum State
    {
        Action=0,InAction=1
    }

    tsmiAction.Tag = Convert.ToInt32(State.Action);//tag里保存的值为0
    tsmiInAction.Tag = Convert.ToInt32(State.InAction);  
  2.ListView有项被选中时,才能弹出快捷菜单
        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            if (lvStudent.SelectedItems.Count == 0)
                e.Cancel = true;//取消此事件,呵呵
        }  

待改进:
  1.状态保持
      比如:listView显示的是第100行记录,修改后,用户看到的还是停留在100行,而不是第一行

你可能感兴趣的:(ListView)