如何在datagridview列的单元格编辑中保留原始值?

时间:2019-04-24 06:52:45

标签: c# winforms datagridview

我有一个显示以下各列产品列表的网格:

ProductId,ProductName,MRP,FinalAmount

现在,我将MRP保持可编辑状态,以便用户可以根据某些产品的折扣对其进行更改。我在MRP列上保留了验证,以不允许用户输入null value,但是问题是我提出了验证消息原始MRP值为LOST

所以我想做的是,当用户输入负/空值时,我想显示消息并保留最后的MRP值。

代码:

private void grdProductList_CellEndEdit_1(object sender, DataGridViewCellEventArgs e)
        {
                if (grdProductList.CurrentCell == null ||
                            grdProductList.CurrentCell.Value == null ||
                            e.RowIndex == -1) return;

                if (grdProductList.CurrentCell.ColumnIndex.Equals(3))//MRP
                {
                    if(string.IsNullOrEmpty(grdProductList.Rows[grdProductList.CurrentRow.Index].Cells["MRP"].Value.ToString()))
                    {
                        MessageBox.Show("MRP cannot be empty.Please provide value", "Error");
                        return;
                    }

                    decimal.TryParse(grdProductList.Rows[grdProductList.CurrentRow.Index].Cells["MRP"].Value.ToString(), out decimal mrp);
                    if(mrp < 0)
                    {
                        MessageBox.Show("MRP cannot have negative value", "Error");
                        return;
                    }
                    grdProductList.Rows[grdProductList.CurrentRow.Index].Cells["FinalAmount"].Value = mrp;
                    //calculation code based on mrp
                }
       }

2 个答案:

答案 0 :(得分:1)

我发现DataGridView提供了一种名为CancelEdit的方法,该方法可以放弃更改,还有助于保留原始值。

我只需要像下面这样调用此方法,即可获得预期的行为:

if(string.IsNullOrEmpty(grdProductList.Rows[grdProductList.CurrentRow.Index].Cells["MRP"].Value.ToString()))
                    {
                        MessageBox.Show("MRP cannot be empty.Please provide value", "Error");
                        grdProductList.CancelEdit();
                        return;
                }

答案 1 :(得分:0)

MRP 原始值存储在临时变量中,  如果用户输入的是空值或负值,请将温度值恢复到当前网格单元格