以编程方式使新行变脏并在DataGridView中插入新行

时间:2010-12-21 07:22:41

标签: c# winforms datagridview c#-3.0

我有一个可编辑的无界数据网格视图。我正在以编程方式更改新行的值。

通常,当用户键入新行的任何字段时,它会变脏并在其下方插入另一个新行。

但在我的情况下,当用户进入新行的任何字段时,我正在捕获功能键并以编程方式更改单元格值。

  

myGrid.CurrentCell.Value =“xyz”;

并且它不会在它下面插入新行。

现在作为解决方法,我在CellValueChanged事件处理程序上尝试了这个。

  if (myGrid.NewRowIndex == e.RowIndex)
  {
    myGrid.Rows.Insert(e.RowIndex + 1, 1);
  }

但它会引发错误No row can be inserted after the uncommitted new row.

我怎么能告诉myGrid我的当前行(这是一个新行)是脏的,并且之后需要一个新行?

4 个答案:

答案 0 :(得分:7)

我正在使用winforms DataGridView。在我的情况下,我尝试了@iSid解决方案,但这里有一个帮助,我尝试了这个

myGrid.NotifyCurrentCellDirty(true);
myGrid.NotifyCurrentCellDirty(false);

通过仅使当前单元格不起作用,您还必须提交该单元格。在下一个命令中,我标记当前单元格不脏,这将​​强制datagridview添加脏行。它正在我的项目中工作。

答案 1 :(得分:6)

我在这里得到了解决方案

myGrid.NotifyCurrentCellDirty(true);

答案 2 :(得分:0)

我认为(我不确定),你试图在新行之后插入一行 ...这是不可能的。将代码更改为此

myGrid.Rows.Insert(e.RowIndex - 1, 1);

应该在新行之前插入行,这应该有效。

答案 3 :(得分:0)

考虑到问题的时间范围,这真的很晚,但接受的答案对我不起作用。最后为我解决的是首先在脏行上方插入一行,然后编辑“干净”行。

if (e.RowIndex == myGrid.Rows.Count - 1)
{
    myGrid.Rows.Add();
}
myGrid[e.ColumnIndex, e.RowIndex].Value = etd.ResultText; // Edit at your leisure.