DataGridView CellContent复选框更改事件

时间:2016-04-05 06:50:37

标签: c# winforms

我有一个包含3列的datagridview:发票ID,价格和复选框。

如果单击复选框,则该行的价格变为0。现在正在发生。

但是当我取消选中复选框价格应该是这样的。但它仍然是零。下面是我的cellcontent点击代码。如果未选中复选框,我怎样才能获得之前的价格?

private void grvItems_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    var senderGrid = (DataGridView)sender;
    DataGridViewRow row = this.grvItems.CurrentRow;
    if (e.RowIndex >= 0)
    {
        if (senderGrid.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn &&
             e.RowIndex >= 0)
        {
            if (e.ColumnIndex == grvItems.Columns["UnderWarranty"].Index)
            {
                string returnAmt = lblReturnAmountVal.Text;
                bool isCheked = (bool)grvItems.Rows[e.RowIndex].Cells["UnderWarranty"].EditedFormattedValue;

                if (isCheked)
                {
                    grvItems.Rows[e.RowIndex].Cells["PRICE"].Value = "0.00";
                    lblReturnAmountVal.Text = "0.00";
                }
                else
                { 

                }
                grvItems.EndEdit();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您是否尝试过CheckedChanged事件?在Winforms上并使用应该有用的复选框。未经测试的代码如下:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
     if (checkBox1.Checked)
     {
         value = 0;
     }
     else
     {
         // whatever other logic should happen
     }
 }

答案 1 :(得分:0)

如果您想恢复原始数据值,则需要在某处存储

您可以随时使用单元格的Tag属性:

             DataGridViewCell cell = grvItems.Rows[e.RowIndex].Cells["PRICE"];
            if (isCheked)
            {
                cell.Tag = cell.Value;
                cell.Value = "0.00";
                lblReturnAmountVal.Text = "0.00";
            }
            else
            { 
                //            use your cell's datatype here!!  VVV
                if (cell.Tag != null) cell.Value = cell.Tag as decimal;
            }