我在winforms应用程序中使用DGV。我想将行状态从New(IsNewRow)更改为已编辑。每当我们开始在DGV的最后一行输入值时,它会通过将当前行IsNewRow属性设置为false来在编辑行下面创建另一行。
在我的要求中,当用户位于最后一行并且按下F6时,我将几个单元格值从上面的行复制到当前行。此时,当前行仍处于新行状态(IsNewRow = true)。一旦我将值复制到上一行的当前行,我想将当前行的状态更改为已编辑,以便DGV在当前行下创建另一行作为新行。不确定哪个事件会让DGV创建一个新行,所以请帮助我。
无论如何我可以改变当前行的状态吗? IsNewRow属性是只读的,所以无法修改它。
更新:我找到了设置当前行状态的方法(IsNewRow = false)。使用以下方法:MyGridView.NotifyCurrentCellDirty(true);
。
至少我想模拟击键,这样我就可以通过编辑这一行来欺骗DGV来创建另一行。任何人都可以告诉我如何在DGV中这样做吗?
此DGV不是数据绑定。
以下是用于将值从上一行复制到当前行的代码:
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;
}
}
答案 0 :(得分:1)
我不知道如何操作行状态来执行此操作,但您可以添加新行,然后设置当前行值。我发现当你添加一个新行时,它会显示在当前新行的上方,所以如果你没有重置当前行,你会在网格中得到一个空行。
尝试以下操作,看看它是否符合您的要求。我还更改了行索引测试,因此只有在用户位于新行时才会复制值。
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;
}
}