C# 以编程方式使新行变脏,并在DataGridView中在其后面插入新行
我有一个可编辑的无边界datagridview。我正在以编程方式更改新行的值 通常,当用户在新行的任何字段中键入时,该行变脏,并在其下方插入另一新行 但在我的例子中,当用户进入新行的任何字段时,我将捕获函数键并以编程方式更改单元格值 myGrid.CurrentCell.Value=“xyz” 它不会在下面插入新行 现在,作为一种解决方法,我在CellValueChanged事件处理程序上尝试了这种方法C# 以编程方式使新行变脏,并在DataGridView中在其后面插入新行,c#,winforms,datagridview,c#-3.0,C#,Winforms,Datagridview,C# 3.0,我有一个可编辑的无边界datagridview。我正在以编程方式更改新行的值 通常,当用户在新行的任何字段中键入时,该行变脏,并在其下方插入另一新行 但在我的例子中,当用户进入新行的任何字段时,我将捕获函数键并以编程方式更改单元格值 myGrid.CurrentCell.Value=“xyz” 它不会在下面插入新行 现在,作为一种解决方法,我在CellValueChanged事件处理程序上尝试了这种方法 if (myGrid.NewRowIndex == e.RowIndex) {
if (myGrid.NewRowIndex == e.RowIndex)
{
myGrid.Rows.Insert(e.RowIndex + 1, 1);
}
但它会抛出错误,说明在未提交的新行之后不能插入任何行。
我怎样才能告诉myGrid我已经将当前行(这是一个新行)弄脏了,并且在它之后需要一个新行呢?我认为(虽然我不确定),您正在尝试在新行之后插入一行……这是不可能的。将您的代码更改为此
myGrid.Rows.Insert(e.RowIndex - 1, 1);
应该在新行之前插入该行,这应该有效。这里我得到了解决方案
myGrid.NotifyCurrentCellDirty(true);
考虑到问题的时间框架,这真的太晚了,但被接受的答案对我来说并不适用。对我来说,最终解决它的方法是首先在脏行上方插入一行,然后编辑“干净”行
if (e.RowIndex == myGrid.Rows.Count - 1)
{
myGrid.Rows.Add();
}
myGrid[e.ColumnIndex, e.RowIndex].Value = etd.ResultText; // Edit at your leisure.
我正在处理winforms DataGridView。在我的例子中,我尝试了@iSid解决方案,但这里有一个帮助,我尝试了这个
myGrid.NotifyCurrentCellDirty(true);
myGrid.NotifyCurrentCellDirty(false);
通过只在不工作时弄脏当前单元格,您还必须提交该单元格。在下一个命令中,我标记当前单元格不脏,这将强制datagridview添加脏行。它正在我的项目中工作。我不需要当前行上方的行。我正在更改新行本身,在进行更改时,我需要另一个新行,因为更改后当前行变脏。我有办法了。我很快就发布了。在调用
myGrid.NotifyCurrentCellDirty(true)之前,您是否关注了相关的单元格代码>?是的,在系统填充单元格之前,用户必须双击单元格。它第一次运行得很好,但是重复插入的行为不起作用。我现在从事web开发。因此无法验证您的解决方案:(将等待有人投票,然后我才能勾选你的答案。我对此投了票,但经过更多测试,我发现我还需要按照@Haider的建议通知CellDirty(False)