【发布时间】:2016-03-27 04:01:29
【问题描述】:
我的 winform 中有一个 DataGridView(DGV) 控件。 DGV 有 4 列。前 2 列是 Combobox 类型,其余 2 列是 Textbox 类型。当我在任何单元格中按 Enter 键时,它会移动到下一个单元格。如果在最后一个单元格处按下 Enter,则会创建一个新行并焦点移动到第二行的第一列。我希望它始终以这种方式运行。当我设置“启用编辑”=true 时,我的问题就开始了。启用编辑=true,每当我从组合框中选择任何项目时第一列,创建了一个不必要的新行。此时我不想创建新行。请告知如何避免这种情况。
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
{
int col = dataGridView1.CurrentCell.ColumnIndex;
int row = dataGridView1.CurrentCell.RowIndex;
if (col < dataGridView1.ColumnCount - 1)
{
col++;
}
else
{
col = 0;
row++;
}
if (row == dataGridView1.RowCount)
dataGridView1.Rows.Add();
dataGridView1.CurrentCell = dataGridView1[col, row];
e.Handled = true;
}
}
【问题讨论】:
-
“每当我从第一列的组合框中选择任何项目时,都会创建一个不必要的新行。” 您发布的函数是创建新行的代码吗?如果是这样,请使用断点并检查调用堆栈以查看还触发了什么。
-
实际上并非如此。上面的代码只是在按 Enter 键时将光标从一列移动到另一列,而在最后一列创建一个有效的新行
-
是的,我知道它会创建一个新行。因此,如果 that 没有创建新行,您将不得不寻找其他地方。
-
嗯...我想这一定是默认行为,我将不得不忍受:)
标签: c# winforms datagridview