方式一 :非绑定数据
//向上调整选择行private void btnArrowUp_Click(object sender, EventArgs e)
{
// 选择的行号
int selectedRowIndex = GetSelectedRowIndex(this.dgvTasks);
if (selectedRowIndex >= 1)
{
// 拷贝选中的行
DataGridViewRow newRow = dgvTasks.Rows[selectedRowIndex];
// 删除选中的行
dgvTasks.Rows.Remove(dgvTasks.Rows[selectedRowIndex]);
// 将拷贝的行,插入到选中的上一行位置
dgvTasks.Rows.Insert(selectedRowIndex - 1, newRow);
dgvTasks.ClearSelection();
// 选中最初选中的行
dgvTasks.Rows[selectedRowIndex - 1].Selected = true;
}
}
//向下调整选择行
private void btnArrowDown_Click(object sender, EventArgs e)
{
int selectedRowIndex = GetSelectedRowIndex(this.dgvTasks);
if (selectedRowIndex < dgvTasks.Rows.Count - 1)
{
// 拷贝选中的行
DataGridViewRow newRow = dgvTasks.Rows[selectedRowIndex];
// 删除选中的行
dgvTasks.Rows.Remove(dgvTasks.Rows[selectedRowIndex]);
// 将拷贝的行,插入到选中的下一行位置
dgvTasks.Rows.Insert(selectedRowIndex + 1, newRow);
dgvTasks.ClearSelection();
// 选中最初选中的行
dgvTasks.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 btnArrowUp_Click(object sender, EventArgs e)
{
int CurrentRowIndex = dgvTasks.CurrentRow.Index;//获取当前单元格行索引
if (CurrentRowIndex == 0)//当选中行为第一行时,不可再往上移动
{
MessageBox.Show("已经是最上层了!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (CurrentRowIndex > 0 && Convert.ToInt32(dgvTasks.Rows[CurrentRowIndex].Cells["seqNum"].Value) > 0)//当选中行大于第一行时,可往上移动
{
Point pt = dgvTasks.CurrentCellAddress;//获取当前单元格坐标
dgvTasks.Rows[CurrentRowIndex - 1].Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value);//将当前行的序号赋给的上一行
dgvTasks.CurrentRow.Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value) - 1;//当前行序号-1
pt.Y -= 1;//当前单元格Y坐标-1,即当前单元格上移一行
dgvTasks.Sort(dgvTasks.Columns["seqNum"], ListSortDirection.Ascending);//指定排序的列和升序排序
dgvTasks.CurrentCell = dgvTasks.Rows[pt.Y].Cells[pt.X];//重新指定当前单元格
}
}
//向下调整选择行
private void btnArrowDown_Click(object sender, EventArgs e)
{
int CurrentRowIndex = dgvTasks.CurrentRow.Index;//获取当前单元格行索引
if (CurrentRowIndex == dgvTasks.Rows.Count - 1)//当选中行为第一行时,不可再往上移动
{
MessageBox.Show("已经是最底层了!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (CurrentRowIndex < dgvTasks.Rows.Count - 1 && Convert.ToInt32(dgvTasks.Rows[CurrentRowIndex].Cells["seqNum"].Value) < dgvTasks.Rows.Count)//当选中行大于第一行时,可往上移动
{
Point pt = dgvTasks.CurrentCellAddress;//获取当前单元格坐标
dgvTasks.Rows[CurrentRowIndex + 1].Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value);//将当前行的序号赋给的下一行
dgvTasks.CurrentRow.Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value) + 1;//当前行序号+1
pt.Y += 1;//当前单元格Y坐标+1,即当前单元格下移一行
dgvTasks.Sort(dgvTasks.Columns["seqNum"], ListSortDirection.Ascending);//指定排序的列和升序排序
dgvTasks.CurrentCell = dgvTasks.Rows[pt.Y].Cells[pt.X];//重新指定当前单元格
}
}
private void btnArrowUp_Click(object sender, EventArgs e)
{
int CurrentRowIndex = dgvTasks.CurrentRow.Index;//获取当前单元格行索引
if (CurrentRowIndex == 0)//当选中行为第一行时,不可再往上移动
{
MessageBox.Show("已经是最上层了!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (CurrentRowIndex > 0 && Convert.ToInt32(dgvTasks.Rows[CurrentRowIndex].Cells["seqNum"].Value) > 0)//当选中行大于第一行时,可往上移动
{
Point pt = dgvTasks.CurrentCellAddress;//获取当前单元格坐标
dgvTasks.Rows[CurrentRowIndex - 1].Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value);//将当前行的序号赋给的上一行
dgvTasks.CurrentRow.Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value) - 1;//当前行序号-1
pt.Y -= 1;//当前单元格Y坐标-1,即当前单元格上移一行
dgvTasks.Sort(dgvTasks.Columns["seqNum"], ListSortDirection.Ascending);//指定排序的列和升序排序
dgvTasks.CurrentCell = dgvTasks.Rows[pt.Y].Cells[pt.X];//重新指定当前单元格
}
}
//向下调整选择行
private void btnArrowDown_Click(object sender, EventArgs e)
{
int CurrentRowIndex = dgvTasks.CurrentRow.Index;//获取当前单元格行索引
if (CurrentRowIndex == dgvTasks.Rows.Count - 1)//当选中行为第一行时,不可再往上移动
{
MessageBox.Show("已经是最底层了!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (CurrentRowIndex < dgvTasks.Rows.Count - 1 && Convert.ToInt32(dgvTasks.Rows[CurrentRowIndex].Cells["seqNum"].Value) < dgvTasks.Rows.Count)//当选中行大于第一行时,可往上移动
{
Point pt = dgvTasks.CurrentCellAddress;//获取当前单元格坐标
dgvTasks.Rows[CurrentRowIndex + 1].Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value);//将当前行的序号赋给的下一行
dgvTasks.CurrentRow.Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value) + 1;//当前行序号+1
pt.Y += 1;//当前单元格Y坐标+1,即当前单元格下移一行
dgvTasks.Sort(dgvTasks.Columns["seqNum"], ListSortDirection.Ascending);//指定排序的列和升序排序
dgvTasks.CurrentCell = dgvTasks.Rows[pt.Y].Cells[pt.X];//重新指定当前单元格
}
}