目录
一、前言
使用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