我在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
工作但标记仍然执行取消。
希望任何人都可以帮助我,抱歉我的英语不好。
答案 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();
}