【问题标题】:Devexpress Gridview how get row value in decimal type cell?Devexpress Gridview 如何获取十进制类型单元格中的行值?
【发布时间】:2016-11-01 08:38:55
【问题描述】:

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

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

【问题讨论】:

  • 你遇到了什么麻烦?它会抛出异常还是其他什么?
  • 嗯,我忘了说。是的,它会引发“对象引用未设置为对象实例”的异常。请帮帮我
  • 您的代码在我的机器上工作,但仅在标准视图上没有分组。您是否在此 gridview 上应用分组?
  • 我相信问题出现在我的mysql数据库中的数据类型上。小数点设置为 (10,2) 。也许这是问题所在,但现在我将其更改为 int。
  • 我在我的数据源上也使用了十进制(10,2),除非我应用分组,否则它可以工作。您能否附上运行时网格的屏幕截图?

标签: c# gridview devexpress


【解决方案1】:

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

if (gridView1.SelectedRowsCount == 0)
    return;

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

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

当您在t 上添加监视(或悬停)时,它显示的是 System.Decimal 还是 String?

如果是小数,你应该状态良好,我的建议是将代码更改为以下内容:

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

我唯一省略的是ToString(),所以我们可以让转换函数应用于(原始)对象。我不知道如何或为什么,实际上看起来很远,但也许ToString() 正在根据网格显示格式化输出。

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

换句话说,是 MySQL 添加格式并发送字符串,还是您的 C# 将小数更改为字符串?找出这是什么原因并制止它。

您当然可以取消格式化字符串,然后将其转换为小数,但这似乎是通往最终目标的漫长道路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多