C# 如何处理值更改
当通过处理事件更改第一个(SupplierDiscountPerceTangSpinedit)SpinEdit中的值时,我正在尝试在另一个(supplierPriceWithDiscountSpinEdit)SpinEdit控件上设置值:C# 如何处理值更改,c#,.net,devexpress,C#,.net,Devexpress,当通过处理事件更改第一个(SupplierDiscountPerceTangSpinedit)SpinEdit中的值时,我正在尝试在另一个(supplierPriceWithDiscountSpinEdit)SpinEdit控件上设置值: private void supplierDiscountPercetangeSpinEdit_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.Changing
private void supplierDiscountPercetangeSpinEdit_EditValueChanging(object sender,
DevExpress.XtraEditors.Controls.ChangingEventArgs e)
{
try
{
decimal supplierPrice, supplierDiscount, supplierPriceWithDiscount;
supplierPrice = Convert.ToDecimal(supplierPriceSpinEdit.EditValue);
supplierDiscount = (decimal)e.NewValue;
supplierPriceWithDiscount = Discount.DoMath(
supplierPrice, supplierDiscount);
supplierPriceWithDiscountSpinEdit.EditValue = Convert.ToDecimal(
supplierPriceWithDiscount);
}
catch
{
throw; // Additional information: Specified cast is not valid.
}
}
当我在控件上使用向上和向下按钮时,这个方法工作得很好,但在按键时抛出异常,并显示消息附加信息:指定的强制转换无效
问题可能是第行:
supplierDiscount=(十进制)e.NewValue代码>无法将字符串强制转换为十进制,必须进行分析
decimal supplierDiscount = decimal.Parse("1.00");
您已经在前一行回答了您的问题:
supplierPrice = Convert.ToDecimal(supplierPriceSpinEdit.EditValue);
您在处理程序supplierDiscountPercetangeSpinEdit\u editValueChangeing
中,我只能假设它处理SpinEdit
对象的editValues
属性更改。因此,e.NewValue
反映了该属性值。以上是处理相同的属性,因此自然您应该以相同的方式处理此属性:
supplierDiscount = Convert.ToDecimal(e.NewValue);
我假设它不喜欢(decimal)e.NewValue
。您是否设置了一个断点
来查看e.NewValue
在该点是什么?假设ValueMember是decimal是否安全?跟踪并确定是哪一行。编写e.ToString()。来吧,在发布之前做一些调试。如果我按“1”,那么e.NewValue是“1.00”对象{String}。当使用控制按钮时,它应该是十进制的。但是解析必须是字符串,而e.NewValue是对象?来吧,应用自己的e.ToString()这是CultureInfo问题,必须设置percentage=Convert.ToDecimal(e.NewValue,CultureInfo.InvariantCulture)代码>