找回密码
 立即注册

QQ登录

只需一步,快速开始

dapsjj
初级会员   /  发表于:2016-11-22 12:49  /   查看:8261  /  回复:10
本帖最后由 dapsjj 于 2016-11-22 12:52 编辑

spread designer把一列设计为number类型后,这一列如果在数据库是空值,那么显示0.00,如图所示,如何能让这一列有数据时显示数据,没有数据时不显示0.00,显示空值,如何做?

2016-11-22_124249.png
2016-11-22_124338.png

10 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-22 15:57:28
沙发
您好,你是否还设置了空值显示,默认空置是不显示的。

检查下celltype的NullDisplay属性。
numberCellType3.NullDisplay=“”;
回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-22 17:02:29
板凳
dexteryao 发表于 2016-11-22 15:57
您好,你是否还设置了空值显示,默认空置是不显示的。

检查下celltype的NullDisplay属性。

这个是在代码里写的还是在spread designer属性面板能弄出来?我在spread designer属性面板没有看到您说的这个。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-22 17:22:44
地板
这个代码如果您没有写,disignter里也没有的话,建议您最好能发过来一个可以重现的Demo我看下。
回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-23 08:01:49
5#
本帖最后由 dapsjj 于 2016-11-23 10:37 编辑
dexteryao 发表于 2016-11-22 17:22
这个代码如果您没有写,disignter里也没有的话,建议您最好能发过来一个可以重现的Demo我看下。

您说的celltype的NullDisplay属性。能否给我段示例代码让我可以看一看,因为如果代码里写的话,我不知道应该写在什么地方。也不知道怎么个写法。另外由于数据库的值是空导致spread中显示0.00(循环dataset,把dataset的值放入spread),最终在判断spread的数据是否发生变化时(spread的值与dataset比较),会不会因为spread显示的是0.00而导致与dataset的空(null)值对应不上而把每一列的0.00都认为是新数据?其实不应该是新数据,因为0.00是spread显示的,如果是4.56这样的值与dataset比较确实发生了变化,但是这个0.00不应该认为是发生了变化,请指教!图中我这个写法没有发现CellTypeNullDisplay这个属性。


2016-11-23_094008.png
2016-11-23_094722.png
回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-23 10:38:34
6#
本帖最后由 dapsjj 于 2016-11-23 10:42 编辑
dexteryao 发表于 2016-11-22 17:22
这个代码如果您没有写,disignter里也没有的话,建议您最好能发过来一个可以重现的Demo我看下。

spread designer我把类型从number改为none后,由于这个值是乘法运算得来的,但是这边显示的小数如此之多是怎么回事?如何处理?
  1. if (e.Column == 7 && grdMain.ActiveSheet.Cells[e.Row, 7].Value != null)//第8列变化时
  2.                     {
  3.                             double newValue1 = 0;
  4.                             double newValue2 = 0;
  5.                             if (double.TryParse(grdMain.ActiveSheet.Cells[e.Row, 4].Value.ToString(), out newValue1) &&
  6.                                double.TryParse(grdMain.ActiveSheet.Cells[e.Row, 7].Value.ToString(), out newValue2))
  7.                             {   //给金额赋值
  8.                                 grdMain.ActiveSheet.Cells[e.Row, 10].Value = newValue1 * newValue2;
  9.                             }
  10.                     }
复制代码



2016-11-23_103615.png
2016-11-23_103326.png
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-23 15:04:39
7#
代码的话是用下面的方式设置

您说很多小数问题我没有重现,可能是浮点数精度的问题,您可以提供个Demo吗

        public Form2()
        {
            InitializeComponent();
            NumberCellType nct = new NumberCellType();
            nct.NullDisplay = string.Empty;
            fpSpread1.ActiveSheet.Columns[0].CellType = nct;
}
回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-23 15:21:07
8#
本帖最后由 dapsjj 于 2016-11-23 15:22 编辑
dexteryao 发表于 2016-11-23 15:04
代码的话是用下面的方式设置

您说很多小数问题我没有重现,可能是浮点数精度的问题,您可以提供个Demo吗 ...

您好,我这里没有这个属性。我也是写在构造方法里。
2016-11-23_152022.png
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-11-23 16:09:22
9#
哦,可能是老版本的问题,我看您用的是日文版的。估计老版本没有这个功能。

回复 使用道具 举报
dapsjj
初级会员   /  发表于:2016-11-23 17:09:33
10#
本帖最后由 dapsjj 于 2016-11-23 17:11 编辑
dexteryao 发表于 2016-11-23 16:09
哦,可能是老版本的问题,我看您用的是日文版的。估计老版本没有这个功能。

这样的话,是不是只能用Math.Round(45.367,2,MidpointRounding.AwayFromZero);//45.37这种四舍五入的方式去处理grdMain.ActiveSheet.Cells[e.Row, 10].Value = newValue1 * newValue2;?还有就是如果不用四舍五入的方式,那么改回将列从列的celltype从none改为number,“由于数据库的值是空导致spread中显示0.00(循环dataset,把dataset的值放入spread),最终在判断spread的数据是否发生变化时(spread的值与dataset比较),会不会因为spread显示的是0.00而导致与dataset的空(null)值对应不上而把每一列的0.00都认为是新数据?其实不应该是新数据,因为0.00是spread显示的,如果是4.56这样的值与dataset比较确实发生了变化,但是这个0.00不应该认为是发生了变化,请指教”。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部