事件LostFocus使datagridcell返回先前输入的值

时间:2013-11-27 13:09:32

标签: c# datagridview event-handling

我有以下代码:

if (GridSellProducts.CurrentCell.ColumnIndex == 1 && e.Control is TextBox)
{
     TextBox textBox = e.Control as TextBox;
     textBox.KeyPress -= new KeyPressEventHandler(QuantityFieldValidate);
     textBox.KeyPress += new KeyPressEventHandler(QuantityFieldValidate);
     textBox.LostFocus -= new EventHandler(QuantityCellLeave);
     textBox.LostFocus += new EventHandler(QuantityCellLeave);
}

private void QuantityCellLeave(object sender, EventArgs e)
{
     // calculate total value
     quantity = Convert.ToDecimal(GridSellProducts.Rows[GridSellProducts.CurrentCell.RowIndex].Cells["Qnty"].Value);
}

问题在于,当我第一次运行代码并在Qnty字段中输入数量时,无论我输入的是什么数字,小数quantity都会返回0。 18.当我单击返回单元格以输入另一个数字23时,十进制现在返回数字18。 为什么是这样?

1 个答案:

答案 0 :(得分:1)

你只需要消耗不同的事件; CellEndEdit

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex != qntyColumnIndex) { return; }

    quantity = Convert.ToDecimal(
        GridSellProducts.Rows[e.RowIndex]
                        .Cells["Qnty"].Value);

}

其中qntyColumnIndex是该列的索引。