经过自己一番简单的研究,发现在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;