我有一个网格控件,我想得到所选行的值。我可以在行中获得varchar类型单元格的值,但是我在获取十进制类型的单元格值时遇到了麻烦。
这是我的每行代码点击:
private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
{
var productPrice = Convert.ToDecimal(gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "product_price").ToString());
MessageBox.Show(productPrice.ToString());
}
有关详细信息,product_price
列设置为十进制类型,长度为(10,2),因此其显示的值类似于13,233.00
谢谢,我希望你能帮我解决这个问题
答案 0 :(得分:0)
我的第一个想法:没有专注的行吗?添加此内容并查看是否可以解决问题:
div
那不是问题吗?好的,将其添加到您的代码并设置断点:
if (gridView1.SelectedRowsCount == 0)
return;
当您在object o = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "product_price");
Type t = o.GetType();
上添加监视(或悬停)时,它是否说System.Decimal或String?
如果它是小数,那么你应该处于良好状态,我建议只是将代码更改为以下内容:
t
我唯一省略的是var productPrice = Convert.ToDecimal(gridView1.GetRowCellValue(
gridView1.FocusedRowHandle, "product_price"));
,所以我们可以让Convert函数应用于(raw)对象。我不知道如何或为什么,它实际上似乎是一个长镜头,但也许ToString()
正在根据网格显示格式化输出。
我猜测情况并非如此,您的原始假设是正确的,因为来自MySQL的数据实际上是格式化为字符串,或者您的C#代码正在将其作为字符串读取。如果是这种情况,请运行实际的SQL并查看正在呈现的数据类型。它是数字吗?如果是这样,您的C#是否将其读取为数字(ToString()
),或者可能是忽略数据类型的reader.GetDecimal(x)
?
换句话说,MySQL是添加格式并发送字符串,还是C#将小数更改为字符串?找出正在做的事情,并制止它。
你当然可以取消格式化字符串,然后转换为小数,但这似乎是达到最终目标的漫长的路径。