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

本文关键字:单元格 获取 类型 十进制 Gridview Devexpress | 更新日期: 2023-09-27 18:15:41

我有一个网格控件,我想获得所选行的值。我可以得到varchar类型cell的值但我在获取十进制类型cell的值时遇到了麻烦。

这是我的代码为每一行点击:

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

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

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

我的第一个想法是:没有焦点行吗?添加这个,看看是否能解决这个问题:

if (gridView1.SelectedRowsCount == 0)
    return;

这不是问题吗?好的,将它添加到代码中并设置一个断点:

object o = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "product_price");
Type t = o.GetType();

当您在t上添加监视(或悬停)时,它是否显示System ?十进制还是字符串?

如果它是一个小数,你应该在良好的形状,我的建议是只是改变代码如下:

var productPrice = Convert.ToDecimal(gridView1.GetRowCellValue(
    gridView1.FocusedRowHandle, "product_price"));

我省略的唯一东西是ToString(),因此我们可以让Convert函数应用于(原始)对象。我不知道如何或为什么,它实际上似乎是一个很长的镜头,但也许ToString()是根据网格显示格式化输出。

我猜情况并非如此,你原来的假设是正确的,因为来自MySQL的数据实际上被格式化为字符串,或者你的c#代码正在将其读取为字符串。如果是这种情况,请运行实际的SQL,看看呈现的是什么数据类型。是数字吗?如果是这样,您的c#是否将其读取为数字(reader.GetDecimal(x)),或者可能存在忽略数据类型的reader.GetValue(x).ToString() ?

换句话说,是MySQL添加格式并发送字符串,还是你的c#将十进制更改为字符串?找出原因并制止它。

您当然可以取消字符串的格式,然后将其转换为十进制,但这看起来对您的最终目标来说是一个很长的路径。