Devexpress Gridview如何获取十进制类型单元格中的行值?

时间:2016-11-01 08:38:55

标签: c# gridview devexpress

我有一个网格控件,我想得到所选行的值。我可以在行中获得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

谢谢,我希望你能帮我解决这个问题

1 个答案:

答案 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#将小数更改为字符串?找出正在做的事情,并制止它。

你当然可以取消格式化字符串,然后转换为小数,但这似乎是达到最终目标的漫长的路径。