C# ListView 在指定行后面插入新行,并对行号重新排序。

本次来讲讲在c#中如何用ListView实现在指定行之后插入新的一行,并且不影响原有行的内容,最后对行号重新排序。

关于c#中用ListView的用法,这里有讲解:ListView详解 。不太熟悉的朋友可以看看。

首先:要实现的效果如下图:


实现步骤如下:

1.新建一个窗体,拖放好两个button和ListView,一个button命名为:button_AddNewRow,Text为:增加新行。用于在ListView中增加行,另一个button命名为:button_InsertNewRow,Text为:插入新行。用于在ListView中插入行。ListView命名为:filesList 。(以上名字自己喜欢就好)

2.拖好控件,改好名字后,先初始化ListView。在窗体类中,添加下面的方法代码:

   #region  设置ListView控件初始化
        // 自定义函数设置ListView控件初始属性  
        private void SetListView()
        {
            this.filesList.View = View.Details;                //显示方式(注意View是Details详细显示)  
            this.filesList.GridLines = true;                //行和列是否显示网格线  
            this.filesList.LabelEdit = true;                           //是否可编辑  
            this.filesList.Scrollable = true;                   //没有足够的空间显示时,是否添加滚动条  
            this.filesList.HeaderStyle = ColumnHeaderStyle.Clickable;              //对表头进行设置  
            this.filesList.FullRowSelect = true;               //是否可以选择行  
            filesList.MultiSelect = false;                        //禁止多选 
            this.filesList.Columns.Add("行号", 1 * filesList.Width / 14);   //设置listView列标题头
            this.filesList.Columns.Add("指令", 3 * filesList.Width / 14);      
            this.filesList.Columns.Add("描述", 9 * filesList.Width / 14);    
           this.filesList.Columns.Add("标号", 1 * filesList.Width / 14);
         this.filesList.Columns[3].Width = 0;              //用于隐藏第四列的指令标号   不让用户看见
        }
        #endregion

3. 初始化listview后,开始添加“增加新行”按钮的 事件。在窗体类中添加如下代码:

  int row_number = 0;                                      //全局变量,用于记录行数和点击新增和插入按钮的点击次数
        private void button_AddNewRow_Click(object sender, EventArgs e)              //使用增加新行按钮来添加新行。
        {
            row_number++;                              //用于记录行数
            this.filesList.BeginUpdate();   //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
            ListViewItem list = new ListViewItem();       //新建ListViewItem对象:list
            list.Text = "   " + row_number;    // 问本内容为 行号。  前面的空格式为了让 行号居中,并使后面观察行号变化直观
            list.SubItems.Add("第2列,第" + row_number + "行");
            list.SubItems.Add("第3列,第" + row_number + "行");
            this.filesList.Items.Add(list);
            this.filesList.EndUpdate();  //结束数据处理,UI界面一次性绘制。
      
        }
4.添加“插入新行”按钮的代码如下:

   private void button_InsertNewRow_Click(object sender, EventArgs e)               //使用插入新行按钮来添加新行。
        {
            if (this.filesList.SelectedItems.Count != 0)    //如果选中的行等于0,就不执行。默认设置了不能多选
            {
                int number = filesList.SelectedItems[0].Index + 1;     //用于记录选中行号,加一是因为本来是从0开始计数的。
                string Row_Number = (number + 1).ToString();     //然后将选中的行数加一
                ListViewItem item = new ListViewItem();       //   创建一个listview行的对象
                item.SubItems.Add("");             //  给新增的行第2列添加数据   插入空数据,因为没有数据的话,修改该行会报错!
                item.SubItems.Add("");             //  给新增的行第3列添加数据
                item.SubItems.Add("");              //  给新增的行第4列添加数据
                this.filesList.Items.Insert(number, item);     //     将新增的对象item插入到指定行
                this.filesList.BeginUpdate();   //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
                for (int i = 0; i <= row_number; i++)             // 重新绘制行号,不影响第二,第三列的内容
                {
                    this.filesList.Items[i].SubItems[0].Text = (i + 1).ToString();     //添加行号
                }
                this.filesList.EndUpdate();  //结束数据处理,UI界面一次性绘制。
                row_number++;                               //记录点击量
                filesList.SelectedItems.Clear();          //清空表格行的选择状态
            }
            else
            {
                MessageBox.Show(this, "前选择要在哪一行后进行插入", "信息提示",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            if (row_number > 0)
            {
                button_Delet.Enabled = true;                                                                        //当插入新行时,唤醒删除按钮。
                button_Change.Enabled = true;                                                                   //当插入新行时,唤醒修改按钮。
            }
        }


以上就是实现这个功能的步骤。



  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值