接受DataGridView中的新行而不手动更改其值

时间:2013-01-23 14:09:55

标签: c# datagridview

我有 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;
        }
    }
}

2 个答案:

答案 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;
        }
    }
}