C# winForm——Datagridview 记录上移下移

目录

一、前言

二、具体实现

2.1 预期效果

2.2 核心代码

三、小结


一、前言

使用Datagridview控件,对于每一行,需要添加上移下移操作,笔者这里先定义好序号,然后使用行交换的方式实现,一起来看看吧。

二、具体实现

2.1 预期效果

可以上下移动记录

2.2 核心代码

1、窗体初始化,datagridview新建类并注入数据

 private void Form1_Load(object sender, EventArgs e)
        {
            //创建DataSet对象
            DataSet ds = new DataSet();
            //创建DataTable对象
            DataTable dt = new DataTable();
            //创建列
            dt.Columns.Add("姓名", typeof(string));
            dt.Columns.Add("年龄", typeof(int));
            //创建行
            DataRow row = dt.NewRow();
            //添加数据
            row[0] = "张三";
            row[1] = "24";
            //将行添加到数据表的行集合中
            dt.Rows.Add(row);
            row = dt.NewRow();
            //添加数据
            row[0] = "李四";
            row[1] = "25";
            //将行添加到数据表的行集合中
            dt.Rows.Add(row);
            row = dt.NewRow();
            //添加数据
            row[0] = "王五";
            row[1] = "26";
            //将行添加到数据表的行集合中
            dt.Rows.Add(row);
            row = dt.NewRow();
            //添加数据
            row[0] = "赵六";
            row[1] = "27";
            //将行添加到数据表的行集合中
            dt.Rows.Add(row);
            //将数据表添加到DataSet中 
            ds.Tables.Add(dt);
            //将DataSet中的表添加到DataGridView之中
            this.dataGridView1.DataSource = ds.Tables[0];
            DataGridViewImageColumn _up_column = new DataGridViewImageColumn();
            _up_column.Image = Properties.Resources.上移;
            _up_column.HeaderText = "上移";
            _up_column.ImageLayout = DataGridViewImageCellLayout.Zoom;
            dataGridView1.Columns.Add(_up_column);
            DataGridViewImageColumn _down_column = new DataGridViewImageColumn();
            _down_column.Image = Properties.Resources.下移;
            _down_column.HeaderText = "下移";
            _down_column.ImageLayout = DataGridViewImageCellLayout.Zoom;
            dataGridView1.Columns.Add(_down_column);
        }

2、对于datagridview的行编号,编号是行记录上移下移的基础

  private void datagridview_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            //编号
            SolidBrush b = new SolidBrush(this.dataGridView1.RowHeadersDefaultCellStyle.ForeColor);
            e.Graphics.DrawString((e.RowIndex + 1).ToString(System.Globalization.CultureInfo.CurrentUICulture),
                this.dataGridView1.DefaultCellStyle.Font, b, e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4);
        }

 3、上移下移核心方法

  private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 2)
            {
                try
                {
                    DataTable dt1 = (DataTable)this.dataGridView1.DataSource;
                    StringBuilder s = new StringBuilder();
                    DataRow dr = null;
                    if (dt1 != null)
                        dr = dt1.Rows[e.RowIndex];
                    for (int i = 0; i < dt1.Columns.Count; i++)
                    {
                        s.Append(dr[i] + "|");
                    }
                    for (int i = 0; i < dt1.Columns.Count; i++)
                    {
                        dt1.Rows[e.RowIndex][i] = dt1.Rows[e.RowIndex - 1][i];
                    }
                    for (int i = 0; i < dt1.Columns.Count; i++)
                    {
                        dt1.Rows[e.RowIndex - 1][i] = s.ToString().Split('|')[i];
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("亲,已经在最上面了,移不动了,尴尬");
                }
            }
            if (e.ColumnIndex == 3)   //下移
            {
                try
                {
                    DataTable dt1 = (DataTable)this.dataGridView1.DataSource;
                    StringBuilder s = new StringBuilder();
                    DataRow dr = dt1.Rows[e.RowIndex];
                    for (int i = 0; i < dt1.Columns.Count; i++)
                    {
                        s.Append(dr[i] + "|");
                    }
                    for (int i = 0; i < dt1.Columns.Count; i++)
                    {
                        dt1.Rows[e.RowIndex][i] = dt1.Rows[e.RowIndex + 1][i];
                    }
                    for (int i = 0; i < dt1.Columns.Count; i++)
                    {
                        dt1.Rows[e.RowIndex + 1][i] = s.ToString().Split('|')[i];
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("亲,已经在最下面了,移不动了,尴尬");
                }
            }
        }

三、小结

本文介绍C# winForm中Datagridview控件,每一行上移下移操作,先定义好序号,然后使用行交换的方式实现,不难,读者一看就懂,希望可以帮助到软件开发工作者。

C# winForm工程源代码:https://download.csdn.net/download/qq_36963950/11785139

发布了190 篇原创文章 · 获赞 71 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_36963950/article/details/101040007