DataGridView在键入时更新Cell Value

时间:2014-06-20 06:23:31

标签: c# winforms datagridview

我有一个QUANTITY,UNIT PRICE和VALUE列的数据网格视图。我想要做的是在更改QUANTITY时我需要更改VALUE。 VALUE = QUANTITY * UNIT PRICE

我为gridview编写了代码' CellValueChanged'事件。但是当仅离开细胞时,VALUE将会改变。输入QUANTITY时我需要更改VALUE。

我的代码是这样的。请提出任何想法。

private void dgvSale_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (dgvSale.Columns[e.ColumnIndex].Name == "Qty")
    {
       double qty = Convert.ToDouble(dgvSale["Qty", dgvSale.CurrentRow.Index].Value);
       double rate = Convert.ToDouble(dgvSale["Rate", dgvSale.CurrentRow.Index].Value);
       double totVal = qty * rate;
       dgvSale["Value", dgvSale.CurrentRow.Index].Value = totVal.ToString("#,###.00");
    }
 }

2 个答案:

答案 0 :(得分:6)

我不知道我是否理解你。您正在尝试在键入时动态更新值?如果是这样,那么您可能还应该使用 DataGridView.CurrentCellDirtyStateChanged 事件来提交单元格值更改。以下是基于MSDN的示例:

private void dgvSale_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dgvSale.IsCurrentCellDirty)
    {
        dgvSale.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

这就是你需要的吗?

答案 1 :(得分:0)

 private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex.Equals("column Index of Quantity"))
    {
        double total = Convert.ToDouble(dataGridView1["Subtotal column name", e.RowIndex].Value) * Convert.ToDouble(dataGridView1["Quantity column name", e.RowIndex].Value);
        dataGridView1["Total Column name", e.RowIndex].Value = total.ToString();
    }            
}

enter link description here