获取DataGridView行改变代码工作?

时间:2018-02-17 23:39:30

标签: c# winforms datagridview

有人可以帮我修复我找到的这段代码吗? 假设在winform datagridview上移动整行。

它的工作方式与预期相似,只是当只有一个选定的项目移位时,旧的行位置保持选中状态。

DataGridViewSelectedRowCollection selectedRows = dataGridView.SelectedRows;
dataGridView.ClearSelection();  //this does not work.
for (int i = 0; i <= selectedRows.Count - 1; i++)
{
    int selRowIndex = selectedRows[i].Index;
    if (selRowIndex > 0)
    {
        dataGridView.Rows.Remove(selectedRows[i]);
        dataGridView.Rows.Insert(selRowIndex - 1, selectedRows[i]);
        dataGridView.Rows[selRowIndex - 1].Selected = true; 
    }
}

1 个答案:

答案 0 :(得分:2)

不喜欢你发现的代码试图做的事情。尝试以这种方式移动选定的行:

for (int i = 1; i < dataGridView.Rows.Count; ++i) {
  if(dataGridView.Rows[i].Selected) {
    var prevRow = dataGridView.Rows[i - 1];
    dataGridView.Rows.RemoveAt(i - 1);
    dataGridView.Rows.Insert(i, prevRow);          
  }
}

不要调用ClearSelection()。

要向下移动选定的行,请按以下方式尝试:

for (int i = dataGridView.Rows.Count - 2; i >= 0; --i) {
  if (dataGridView.Rows[i].Selected) {
    var prevRow = dataGridView.Rows[i + 1];
    if (!prevRow.IsNewRow) {
      dataGridView.Rows.RemoveAt(i + 1);
      dataGridView.Rows.Insert(i, prevRow);
    }
  }
}