我有一个非常简单的datagridview表示订单商品列表。我有一列代表这个定义的折扣价值:
column = new DataGridViewTextBoxColumn();
column.DataPropertyName = "Discount";
column.DefaultCellStyle.Format = "0\\%";
column.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
column.Width = 80;
column.Name = "Discount";
dgvOrderDetails.Columns.Add(column);
列折扣形成为" 5%"如果Discount(INT)属性的值为5,但是当我尝试使用CellValidating编辑该值时,它会失败,因为它尝试验证格式化值" int值的5%插入' 5& #39;,如果我尝试使用Cell.Value进行验证,我会得到旧值,而不是新值。
private void dgvOrderDetails_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
switch(e.ColumnIndex)
{
case LINE_DISCOUNT:
{
decimal discount = 0;
// Valido que la cantidad haya sido ingresada correctamente
if (!Decimal.TryParse(e.FormattedValue.ToString(), out discount)
|| discount < 0 || discount > 100)
{
e.Cancel = true;
dgvOrderDetails.EndEdit();
MessageBox.Show("El porcentaje debe ser un número entero mayor o igual a 0 y menor o igual a 100");
}
if (OnDiscountModified != null)
OnDiscountModified(this, EventArgs.Empty);
}
break;
}
}