在DataGridView
中,我将Enter按钮设置为像Tab键一样转到下一列。但是如果有人编辑单元格,它会转到下一行。如何解决这个问题?
这是我的代码:
int col = dataGridView2.CurrentCell.ColumnIndex;
int row = dataGridView2.CurrentCell.RowIndex;
if(col<dataGridView1.ColumnCount-1)
{
col++;
}
else
{
col = 0;
row++;
}
if(row==dataGridView2.RowCount)
dataGridView1.Rows.Add();
dataGridView2.CurrentCell=dataGridView2[col,row];
//e.Handled = true;
答案 0 :(得分:1)
这有点棘手,因为DataGridView
控件会自动处理Enter键以转到下一行而不是下一列。此外,没有任何属性可以直接更改。
但是,只要用户编辑单元格并按Enter,就可以使用手动更改为下一列的解决方法。
您可以采取的一种方法是处理CellEndEdit
控件上的SelectionChanged
和DataGridView
事件。在CellEndEdit
事件中,您可以设置刚刚编辑过单元格的自定义标志。然后在SelectionChanged
事件中,您可以检测到此标志并将当前单元格更改为下一列而不是下一行。
以下是如何执行此操作的工作示例:
bool hasCellBeenEdited = false;
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
// Set flag that cell has been edited
hasCellBeenEdited = true;
}
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
// If edit flag is set and it's not already the last column, move to the next column
if (hasCellBeenEdited && dataGridView1.CurrentCell.ColumnIndex != dataGridView1.ColumnCount - 1)
{
int desiredColumn = dataGridView1.CurrentCell.ColumnIndex + 1;
int desiredRow = dataGridView1.CurrentCell.RowIndex - 1;
dataGridView1.CurrentCell = dataGridView1[desiredColumn, desiredRow];
hasCellBeenEdited = false;
}
// If edit flag is set and it is the last column, go to the first column of the next row
else if (hasCellBeenEdited && dataGridView1.CurrentCell.ColumnIndex == dataGridView1.ColumnCount - 1)
{
int desiredColumn = 0;
int desiredRow = dataGridView1.CurrentCell.RowIndex;
dataGridView1.CurrentCell = dataGridView1[desiredColumn, desiredRow];
hasCellBeenEdited = false;
}
}