首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有办法停止DataGridViewCheckBoxColumn自动检查的点击吗?

有办法停止DataGridViewCheckBoxColumn自动检查的点击吗?
EN

Stack Overflow用户
提问于 2015-09-25 08:43:36
回答 1查看 1.2K关注 0票数 2

我正在使用DataGridView,并设置了一些DataGridViewCheckBoxColumns设置,其中两个设置的ThreeState属性设置为True。

对于网格中的某些行,我只希望复选框被选中或不确定。未选中的用户不应该可用。但是,如果用户重复单击复选框,则从选中到不确定到未选中。我只想检查一下,不确定,检查,不确定等等。

是否有一种方法可以在单击(类似于标准windows窗体复选框控件上的AutoCheck属性)时阻止复选框被选中/未选中,还是有一个事件可以用于取消DataGridViewCheckBoxCell的选中更改?

我曾尝试通过编程将选中的单元格从未选中的强制到选中的或不确定的,但是UI从来没有反映这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-25 19:09:32

假设您添加的任何DataGridViewCheckBoxColumn都遵循以下模式:

代码语言:javascript
复制
DataGridViewCheckBoxColumn cbc = new DataGridViewCheckBoxColumn();
cbc.ThreeState = true;
this.dataGridView1.Columns.Add(cbc);

然后,只需将以下事件处理程序添加到DataGridView中,以单击和双击CheckBox:

代码语言:javascript
复制
this.dataGridView1.CellContentClick += ThreeState_CheckBoxClick;
this.dataGridView1.CellContentDoubleClick += ThreeState_CheckBoxClick;

private void ThreeState_CheckBoxClick(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewCheckBoxColumn col = this.dataGridView1.Columns[e.ColumnIndex] as DataGridViewCheckBoxColumn;

    if (col != null && col.ThreeState)
    {
        CheckState state = (CheckState)this.dataGridView1[e.ColumnIndex, e.RowIndex].EditedFormattedValue;

        if (state == CheckState.Unchecked)
        {
            this.dataGridView1[e.ColumnIndex, e.RowIndex].Value = CheckState.Checked;
            this.dataGridView1.RefreshEdit();
            this.dataGridView1.NotifyCurrentCellDirty(true);
        } 
    }
}

本质上,默认情况下切换顺序是:Checked => Indeterminate => Unchecked => Checked。因此,当单击事件触发Uncheck值时,将其设置为Checked,并强制网格使用新值刷新。

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

https://stackoverflow.com/questions/32778212

复制
相关文章

相似问题

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