ADO.NET TableAdapter 在 DataGridView 的 CellValueChanged 事件上更新

ADO.NET TableAdapter Updating on CellValueChanged Event for a DataGridView

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

当我点击这个复选框时,它会触发下面的事件。

在 uiPersonGridView_CellValueChanged 事件中,我对作为 DataGridView 的数据源的人员数据 Table 调用数据 Table 适配器更新方法。

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

例如,如果我有两行,如果我勾选了第一行的复选框;为 int i 更新 returns 0 行,我检查了数据库,没有任何改变。但是,如果我勾选第二行复选框,更新 returns 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);
    }

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

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();
    }
}