我有一个显示以下各列产品列表的网格:
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
}
}
答案 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 原始值存储在临时变量中, 如果用户输入的是空值或负值,请将温度值恢复到当前网格单元格