有人可以帮我修复我找到的这段代码吗? 假设在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;
}
}
答案 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);
}
}
}