经过自己一番简单的研究,发现在C#中实现很容易。自己临时写的,可能方法不是很好,但基本实现了预期的效果。
// 上移
private void btnMoveUp_Click(object sender, EventArgs e)
{
// 选择的行号
int selectedRowIndex = GetSelectedRowIndex(this.dataGridView1);
if (selectedRowIndex >= 1)
{
// 拷贝选中的行
DataGridViewRow newRow = dataGridView1.Rows[selectedRowIndex];
// 删除选中的行
dataGridView1.Rows.Remove(dataGridView1.Rows[selectedRowIndex]);
// 将拷贝的行,插入到选中的上一行位置
dataGridView1.Rows.Insert(selectedRowIndex - 1, newRow);
// 选中最初选中的行
dataGridView1.Rows[selectedRowIndex - 1].Selected = true;
}
}
// 下移
private void btnMoveDown_Click(object sender, EventArgs e)
{
int selectedRowIndex = GetSelectedRowIndex(this.dataGridView1);
if (selectedRowIndex < dataGridView1.Rows.Count-1)
{
// 拷贝选中的行
DataGridViewRow newRow = dataGridView1.Rows[selectedRowIndex];
// 删除选中的行
dataGridView1.Rows.Remove(dataGridView1.Rows[selectedRowIndex]);
// 将拷贝的行,插入到选中的下一行位置
dataGridView1.Rows.Insert(selectedRowIndex + 1, newRow);
// 选中最初选中的行
dataGridView1.Rows[selectedRowIndex + 1].Selected = true;
}
}
// 获取DataGridView中选择的行索引号
private int GetSelectedRowIndex(DataGridView dgv)
{
if(dgv.Rows.Count==0)
{
return 0;
}
foreach(DataGridViewRow row in dgv.Rows)
{
if (row.Selected)
{
return row.Index;
}
}
return 0;
}
// 显示序号,行号
private void dataGridView1_RowPostPaint(object sender,DataGridViewRowPostPaintEventArgs e)
{
Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
e.RowBounds.Location.Y,
dataGridView1.RowHeadersWidth - 4,
e.RowBounds.Height); TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),
dataGridView1.RowHeadersDefaultCellStyle.Font,rectangle,
dataGridView1.RowHeadersDefaultCellStyle.ForeColor,
TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
}
// 不显示出dataGridView1的最后一行空白
dataGridView1.AllowUserToAddRows = false;