c# - 在 DataGridView 中将 IsNewRow 状态更改为 false 或模拟单元格上的击键

标签 c# winforms datagridview simulation

我在 winforms 应用程序中使用 DGV。我想将行状态从新建 (IsNewRow) 更改为已编辑。每当我们开始在 DGV 的最后一行输入值时,它都会通过将当前行的 IsNewRow 属性设置为 false 在编辑行下方创建另一行。

在我的要求中,当用户位于最后一行并且按下 F6 时,我将几个单元格值从上一行复制到当前行。此时当前行仍处于新行状态(IsNewRow=true)。一旦我将值从上一行复制到当前行,我想将当前行的状态更改为已编辑,以便 DGV 在当前行下方创建另一行作为新行。不确定哪个事件使 DGV 创建新行,所以请帮助我。

无论如何我可以更改当前行的状态吗? IsNewRow 属性是只读的,因此无法修改它。

更新:我找到了一种设置当前行状态的方法 (IsNewRow=false)。使用以下方法:MyGridView.NotifyCurrentCellDirty(true);

至少我想模拟击键,这样我就可以通过编辑这一行来欺骗 DGV 创建另一行。谁能告诉我如何在 DGV 中执行此操作?

此 DGV 未进行数据绑定(bind)。

以下是用于将值从上一行复制到当前行的代码:

  switch (e.KeyData)
  {
    case Keys.F6: //Copy the row above.
      if (MyGridView.CurrentRow != null && MyGridView.CurrentRow.Index > 0)
      {
        MyGridView.CurrentRow.Cells[CustomColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[Customer.Index].Value;

        MyGridView.CurrentRow.Cells[DateColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[DateColumn.Index].Value;

        MyGridView.CurrentRow.Cells[RefColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[RefColumn.Index].Value;
       }
  }

最佳答案

我不知道如何操纵行状态来执行此操作,但您可以添加一个新行,然后设置当前行值。我发现当你添加一个新行时,它会出现在当前新行的上方,所以如果你不重置当前行,你会在网格中得到一个空白行。

尝试以下操作,看看它是否符合您的要求。我还更改了行索引测试,因此它仅在用户位于新行时才复制值。

  switch (e.KeyData)
  {
    case Keys.F6: //Copy the row above.
      if (MyGridView.NewRowIndex > 0 && MyGridView.NewRowIndex == rowIndex)
      {
        int colIndex = MyGridView.CurrentCell.ColumnIndex;

        MyGridView.Rows.Add();
        MyGridView.CurrentCell = MyGridView.Rows[rowIndex].Cells[colIndex];

        MyGridView.CurrentRow.Cells[CustomColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[Customer.Index].Value;

        MyGridView.CurrentRow.Cells[DateColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[DateColumn.Index].Value;

        MyGridView.CurrentRow.Cells[RefColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[RefColumn.Index].Value;
       }
  }

关于c# - 在 DataGridView 中将 IsNewRow 状态更改为 false 或模拟单元格上的击键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4375190/

相关文章:

c# - 具有日期范围的数据表过滤器

c# - 静态变量应该用枚举代替吗?

vb.net - 如何在 VB.net 2010 Express 中使用 Windows API 代码包?

c# - 如何创建一个 Button,它可以在不窃取焦点的情况下将键发送到控件 - Virtual Keyboard

mysql - 如何在不使用 For Each 的情况下将单元格数据添加到具有绑定(bind)列的未绑定(bind)列? - VB网络

c# - Convert.ToDbType() 方法的逻辑

c# - 不要用 clickonce 覆盖 settings.settings 文件

.net - VB.Net .Clear() 或 txtbox.Text = ""文本框清除方法

c# - c# Winforms中不存在时如何创建数据库

c# - 如何根据 DataPropertyName 列访问 DataRowView 中的单元格?