首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >DataGridView.CellContentClick

DataGridView.CellContentClick
EN

Stack Overflow用户
提问于 2008-12-19 14:17:40
回答 4查看 37.1K关注 0票数 4

如果我以非常快的速度单击DataGridViewCheckBoxCell,则DataGridView.CellContentClick不会触发。我该如何解决这个问题呢?我需要知道CheckBox的复选状态何时更改

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-22 15:22:00

尝试处理CellMouseUp事件。

您可以检查发生MouseUp事件的列,看看它是否是您的复选框列。

您还可以确定它是否处于编辑模式,并以编程方式结束编辑模式,这将触发CellValueChanged事件。

在下面的示例中,我有一个包含两列的DataGridView。

第一个是DataGridViewTextBoxColumn,第二个是DataGridViewCheckBoxColumn

当复选框改变时,第一列将反映其选中状态,而不必从行或单元格移动。

代码语言:javascript
复制
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        dataGridView1.Rows.Add("False", false);
        dataGridView1.Rows.Add("True", true);
    }

    private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.ColumnIndex == 1 && e.RowIndex >-1 && dataGridView1.Rows[e.RowIndex].Cells[1].IsInEditMode)
        {
            dataGridView1.EndEdit();
        }
    }

    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex != -1)
        {
            dataGridView1.Rows[e.RowIndex].Cells[0].Value =
               dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); 
        }
    }
}
票数 6
EN

Stack Overflow用户

发布于 2008-12-19 14:41:54

无论用户在复选框单元格中单击的速度有多快,该值都不会从true更改为false,或者反之亦然,直到用户在该行之外单击,并且DataGridView退出编辑模式。

我在过去所做的就是将该列设置为ReadOnly = true。然后,在CellContentClick事件处理程序中,如果单击该列,则手动翻转布尔值,如下所示:

代码语言:javascript
复制
bool b = (bool)this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = !b;

然后,您可以像通常对CheckChanged所做的那样,在这一点上执行逻辑。

票数 5
EN

Stack Overflow用户

发布于 2013-01-21 11:35:07

我来晚了一点,但是msdn对这个问题有一个非常好的答案here

代码语言:javascript
复制
'Ends Edit Mode So CellValueChanged Event Can Fire
Private Sub EndEditMode(sender As System.Object, e As EventArgs) _
    Handles DataGridView1.CurrentCellDirtyStateChanged
    'if current cell of grid is dirty, commits edit
    If DataGridView1.IsCurrentCellDirty Then
        DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
    End If
End Sub

我还写了一个非常详细的msdn修复的详细说明,以及在这里的帖子Firing The DataGridView CellValueChanged Event Immediately上找到的那些修复。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/381072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档