我有 databound
DataGridView
。
要插入新行,我处理DefaultValuesNeeded
。
新行显示我指定的值。到这里它工作正常。
此时该行尚未附加到基础DataTable
。 没关系。
接受新行的唯一方法是将任何单元格设置为编辑模式,更改
价值并关闭编辑。
现在,新行将添加到DataTable
。
我的问题是我想用最少的用户输入添加行
如果用户确定值很好,他/她应该能够确认
不改变某些单元格值(并将它们设置回原始值)
有没有办法实现这一目标,例如:按输入,捕获命令并强制
DataGridView
与单元格值更改一样吗?
我已尝试更改dgv_KeyDown()
中的值但未成功
有什么建议吗?
private void dgv_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (dgv.CurrentCell != null && dgv.CurrentCell.OwningRow.DataBoundItem == null)
{
//ToDo: Accept the new row
e.Handled = true;
}
}
}
答案 0 :(得分:0)
我的建议是,您可以使用CellValidating Even t和RowValidating Event来完成此任务。
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (dataGridView1.IsCurrentCellDirty) //or IsCurrentRowDirty
{
if (e.ColumnIndex == 1)
{
if (MessageBox.Show("You're about to change the value. Do you want to continue?\n\nPress ESC to cancel change.",
"Confirmation", MessageBoxButtons.OK, MessageBoxIcon.Information) != System.Windows.Forms.DialogResult.OK)
{
e.Cancel = true;
}
}
}
}
答案 1 :(得分:0)
我找到了解决方案 我必须将单元状态设置为脏并进入编辑模式。否则,当选择另一行时,内部状态将被破坏
private void dgv_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (dgv.CurrentCell != null && dgv.CurrentCell.OwningRow.DataBoundItem == null)
{
dgv.NotifyCurrentCellDirty(true);
dgv.BeginEdit(true);
e.Handled = true;
}
}
}