找回密码
 立即注册

QQ登录

只需一步,快速开始

LeeDongmei
金牌服务用户   /  发表于:2014-10-10 16:52  /   查看:5414  /  回复:5
我从数据库中取出数据,都是4位小数,但为何赋值到Spread中,某些单元格中的数字变成了整数。
附件是我调试时的变量值。可以看出,
取出的值commreader.GetValue(14)是小数,
但赋值给FpSpread.Sheets(0).Cells(RCount, 10)后,就变成整数了。
而取出的值commreader.GetValue(7)是小数,
赋值给FpSpread.Sheets(0).Cells(RCount, 9)后,还是小数。
请问是何原因。

Error_1.png (116.8 KB, 下载次数: 95)

5 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-10-10 19:11:00
沙发
回复 1楼LeeDongmei的帖子

抱歉让您久等了。
需要指定该列的单元格类型:

  1.             DataTable dt = new DataTable() ;
  2.             dt.Columns.Add("小数",typeof(System.Double));
  3.             dt.Rows.Add(1.3254);
  4.             dt.Rows.Add(1.3254);
  5.             dt.Rows.Add(1.3254);
  6.             dt.Rows.Add(1.3254);
  7.             
  8.             FpSpread1.Sheets[0].DataAutoCellTypes = false;
  9.             FpSpread1.DataSource = dt;

  10.             DoubleCellType dct = new DoubleCellType();
  11.             dct.DecimalDigits = 4;

  12.             FpSpread1.Sheets[0].Columns[0].CellType = dct;
复制代码


请使用以上代码测试,看能否解决您的问题。
回复 使用道具 举报
LeeDongmei
金牌服务用户   /  发表于:2014-10-11 08:39:00
板凳
按照上述方法设定,问题依旧。
附件是设定后的代码:

Error_2.png (98.82 KB, 下载次数: 90)
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-10-11 17:51:00
地板
回复 3楼LeeDongmei的帖子

通过以下代码我可以正常获取小数,请你尝试下:

  1.     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  2.         If IsPostBack Then
  3.             Return

  4.         End If

  5.         Dim dt As New DataTable()
  6.         dt.Columns.Add("小数", GetType(System.Double))
  7.         dt.Rows.Add(1.3254)
  8.         dt.Rows.Add(1.3254)
  9.         dt.Rows.Add(1.3254)
  10.         dt.Rows.Add(1.3254)

  11.         FpSpread1.Sheets(0).DataAutoCellTypes = False
  12.         FpSpread1.DataSource = dt

  13.         Dim dct As New DoubleCellType()
  14.         dct.DecimalDigits = 4

  15.         FpSpread1.Sheets(0).Columns(0).CellType = dct
  16.         Me.Response.Write(FpSpread1.Sheets(0).Cells(0, 0).Text)
  17.         Me.Response.Write(FpSpread1.Sheets(0).Cells(0, 0).Value.ToString())
  18.     End Sub
复制代码


或者把您的 Demo 发上来查看重现问题。
谢谢
回复 使用道具 举报
LeeDongmei
金牌服务用户   /  发表于:2014-10-14 11:48:00
5#
症结找到了。
原因是这段代码赋值前spread先有数据绑定,绑定时问题列的数据是整数型,因此这段代码再往spread里赋值时,问题列始终是整数型而非小数型。
对应方法:修改绑定数据的数据类型,将整数型改变为Double型。
感谢版主一遍遍耐心解答!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-10-14 14:46:00
6#
回复 5楼LeeDongmei的帖子

好的,感谢您反馈问题结果。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部