0

我有一个 DataGridView,其中包含数据库中布尔变量的复选框列。

当我单击此复选框时,它会触发以下事件。

在 uiPersonGridView_CellValueChanged 事件中,我在作为 DataGridView 的数据源的 Persons 数据表上调用数据表适配器更新方法。

更新工作正常,第二次,但它仍然不会更新当前行数据?

例如,如果我有两行,如果我勾选第一行复选框;更新返回为 int i 更新的 0 行,我检查了数据库并且没有任何更改。但是如果我勾选第二行复选框,更新返回 1 行为 int i 更新 - 我检查数据库并且第一条记录已经改变,而不是第二条?

我怎样才能让它工作,以便更新适用于初始更改和之后的更改?

    private void uiPersonGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
    {
        if (uiPersonGridView.IsCurrentCellDirty)
        {
            uiPersonGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
        }
    }

    private void uiPersonGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        if (uiPersonGridView.DataSource == null)
            return;

        if (e.RowIndex == -1)
            return;

        int i = _personAdapter.Update(_person);
    }
4

1 回答 1

0

为了让这个工作,我必须做的是将数据行状态设置为修改,这已经完成了我需要它做的事情。

private void uiPersonGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (uiPersonGridView.IsCurrentCellDirty)
    {
        uiPersonGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
           DataRowView drv = uiPersonGridView.CurrentRow.DataBoundItem as DataRowView;
            drv.Row.SetModified();
    }
} 
于 2015-03-30T23:02:19.753 回答