C# 单元格单击DataGridView中的取消复选框

C# 单元格单击DataGridView中的取消复选框,c#,checkbox,datagridview,C#,Checkbox,Datagridview,我在datagridview中有一个复选框,允许用户计算所选行的总金额。 但我必须进行授权验证,任何用户都可以勾选行,但只有MASTER可以取消勾选行 因此,我对CellClick事件进行了计算。 这里我面临的问题是,当我点击组合框时,无论我如何强制它勾选,它仍然会取消勾选 if (e.ColumnIndex == gv.Columns["ColumnMark"].Index) { if (gv.Rows[e.Row

我在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
事件,但当我第二次单击同一复选框时,我将不会进行验证或计算

我认为应该有一个
事件处理程序来处理这个问题。因为
单元单击
工作,但标记仍处于执行取消勾选状态


希望任何人都能帮助我,并为我糟糕的英语感到抱歉。

我假设您使用的是datagridview,因为标记仅用于C,而不用于Asp和C。因此,您可以尝试更新
currentcell

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

您的代码无法工作,因为
ACheckBoxCell.Value.ToString()
当不为null时,将始终为
“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();
}

Gridview还是Datagridview?您的目标是什么:Winforms?WPF?ASP不要调用
DataGridView
a
GridView
!!这是错误的,令人困惑的,肯定会得到错误的答案,浪费每个人的时间。。总是用正确的名字来称呼事物!是的,要多打四个字母,但在这里寻求帮助的时候可不是这么懒的时候另外:请务必正确地标记您的问题。为此,我会记住您的建议。我已经换了。感谢大家通读……这是行不通的。就像cellclick不能取消取消勾选或强制取消勾选一样。