我在 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/