调用CellContentClicked事件时,DataGridView值不会更改

时间:2015-06-17 09:00:18

标签: c# datagridview

我的期望:Is WashIs ReturnComboBox列;当我点击Is Wash时,我打算将Is Return更改为true

这是我的DataGridViewvalid XHTML

我尝试使用CellContentClickCellClick

以下是我的功能:

private void dtGridViewLoan_CellClick(object sender, DataGridViewCellEventArgs e)
{

    if (e.RowIndex == -1)
        return;
    if (dtGridViewLoan.SelectedRows[0].Cells["is_wash"].Value != DBNull.Value)
        if (Convert.ToBoolean(dtGridViewLoan.Rows[e.RowIndex].Cells["is_wash"].Value))
        {
            dtGridViewLoan.Rows[e.RowIndex].Cells["is_return"].Value = true;
        }
}

最后,无论我如何更改ComboBox值,数据本身都会一直返回false,即使它是true。请帮忙。

2 个答案:

答案 0 :(得分:3)

DataGridViewCheckboxCells中检查CellClick的问题是他们还没有新值。这对其他细胞类型更有意义,其可能或多或少地成功地通过或多或少复杂的验证程序,但我们必须忍受它。

根据MSDN,您有两种选择:

  

通常,复选框单元格值用于存储,例如   任何其他数据,或用于执行批量操作。如果你想   当用户单击复选框单元格时立即响应,您可以处理   DataGridView.CellClick事件,但此事件发生在之前   单元格值已更新。如果你需要新的价值   单击,一个选项是计算预期值   基于当前值。另一种方法是提交变更   立即,并处理DataGridView.CellValueChanged事件   回应它。要在单击单元格时提交更改,您必须   处理DataGridView.CurrentCellDirtyStateChanged事件。在里面   handler,如果当前单元格是复选框单元格,则调用   DataGridView.CommitEdit方法并传入Commit值。

我发现第一种方法看起来更简单,但相当黑客。

以下是第二种更清洁方法的示例: 首先,我们立即提交任何复选框点击:

// add the event handler to the grid view
dtGridViewLoan.CurrentCellDirtyStateChanged += 
               new EventHandler(dtGridViewLoan_CurrentCellDirtyStateChanged);

private void dtGridViewLoan_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dtGridViewLoan.CurrentCell is DataGridViewCheckBoxCell) 
        dtGridViewLoan.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

现在,此代码可用于处理新的复选框值:

private void dtGridViewLoan_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    // ..
    if (dtGridViewLoan.Columns[e.ColumnIndex].Name == "is_wash") 
       { your code here...  }
    // ..
}

答案 1 :(得分:-1)

谢天谢地,谢谢你的帮助。你的答案是错的,因为我已经使用了你要我使用的方法,但结果仍然相同。

最后,我意识到它有什么问题,因为当我勾选复选框时,列本身不会调用单元格值更改方法。因为当我启用编辑功能时,勾选复选框时,数据网格视图将进入编辑模式'当你退出列时,只调用单元格值改变的方法(请参见图片的行标题,图片显示铅笔图标)。我将尝试不对此案例使用启用编辑。感谢帮助。 http://i.stack.imgur.com/Rj1v1.png