【问题标题】:Stop unnecessary row creation in DataGridView在 DataGridView 中停止不必要的行创建
【发布时间】: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


【解决方案1】:

在 DataGridView 控件中,将 AllowUserToAddRows 属性设置为 False。这不会阻止您通过自己的自定义事件模型以编程方式添加行。它只会禁用那些您可能遇到问题的自动生成的行。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多