【问题标题】:Cell click cancel in DataGridView checkbox在 DataGridView 复选框中单击取消单元格
【发布时间】:2015-07-02 02:32:44
【问题描述】:

我在 datagridview 中有一个复选框,允许用户计算所选行的总数量。 但我必须进行授权验证,任何用户都可以勾选行但只有 MASTER 可以取消勾选行。

所以我对CellClick 事件进行了计算。 这里我面临的问题是当我点击组合框时,无论我如何强制它打勾,它仍然会取消。

            if (e.ColumnIndex == gv.Columns["ColumnMark"].Index)
            {
                if (gv.Rows[e.RowIndex].Cells["ColumnMark"].Value.ToString() == "1")
                {
                    if (authorized == "TRUE")
                    {
                        gv.Rows[e.RowIndex].Cells["ColumnMark"].Value = 0;
                        DisplayItemTotalAmount();

                    }
                    else
                    {
                        gv.Rows[e.RowIndex].Cells["ColumnMark"].Value = 1;
                        DisplayItemTotalAmount();
                    }

                }
                else
                {
                    gv.Rows[e.RowIndex].Cells["ColumnMark"].Value = 1;
                    DisplayItemTotalAmount();
                }

            }

我已经尝试过CellBegin 事件和CellValueChanged 事件,但是当我第二次点击同一个复选框时,我不会验证或计算。

我认为应该为此设置一个Event Handler。因为CellClick 工作但标记仍然执行取消勾选。

希望任何人都可以帮助我,并为我的英语不好感到抱歉。

【问题讨论】:

  • Gridview 还是 Datagridview?
  • 你的目标是什么:Winforms? WPF? ASP? ...?? - 不要打电话给DataGridViewa GridView!!这是错误的、令人困惑的,而且肯定会得到错误的答案,浪费大家的时间。总是用他们的正确名字来称呼事物!是的,需要多输入四个个字母,但是在这里寻求帮助时不是的时候这么懒惰..! - 另外:总是正确标记您的问题
  • 对不起,我会记住你的建议。我已经改了。任何地方都感谢您通读..

标签: c# checkbox datagridview


【解决方案1】:

您的代码不起作用,因为ACheckBoxCell.Value.ToString() 不为空时,将始终为"true""false",而不是"1""0"。改变这个逻辑,问题就解决了。

另外:修复此问题后,您会注意到您的单元格检查状态在您离开单元格之前不会在视觉上更新。也有一个简单的解决方法。见下文:

private void gv_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == gv.Columns["ColumnMark"].Index)
    {
        if ((bool)gv.Rows[e.RowIndex].Cells["ColumnMark"].Value)
        {
            if (authorized == "TRUE")
            {
                gv.Rows[e.RowIndex].Cells["ColumnMark"].Value = 0;
            }
            else
            {
                gv.Rows[e.RowIndex].Cells["ColumnMark"].Value = 1;
            }
        }
        else
        {
            gv.Rows[e.RowIndex].Cells["ColumnMark"].Value = 1;
        }

        gv.RefreshEdit();
        gv.NotifyCurrentCellDirty(true);
        DisplayItemTotalAmount();
    }
}

private void gv_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    gv.RefreshEdit();
}

【讨论】:

    【解决方案2】:

    我假设您正在使用 datagridview,因为该标签仅适用于 C#,但适用于 Asp 和 c#。因此,您可以尝试更新currentcell 值。

    if (gv.CurrentCell.Value == 1 && authorized == "TRUE")
                    {
                        gv.CurrentCell.Value.ToString() == 0;
                        DisplayItemTotalAmount();
                    }
    

    【讨论】:

    • 它无法工作。就像 cellclick 不能取消取消勾选或强制取消勾选一样。
    猜你喜欢
    • 2015-06-06
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多