我有一个可编辑的无界数据网格视图。我正在以编程方式更改新行的值。
通常,当用户键入新行的任何字段时,它会变脏并在其下方插入另一个新行。
但在我的情况下,当用户进入新行的任何字段时,我正在捕获功能键并以编程方式更改单元格值。
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我的当前行(这是一个新行)是脏的,并且之后需要一个新行?
答案 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.