在DataGridView复选框中单击单击取消

时间:2015-07-01 05:22:09

标签: c# checkbox datagridview

我在datagridview中有一个复选框,允许用户计算所选行的总amt。 但我必须进行授权验证,任何用户都可以勾选行,但只有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工作但标记仍然执行取消。

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

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

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

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