水晶报表公式字段怎么将小整数化为分数整数

本帖子已过去太久远了,不再提供回复功能。&&&&&&&&&&&&&&&&&&
posts - 13,comments - 2,trackbacks - 0
水晶报表中动态显示小数位收藏水晶报表中动态显示小数位&大家都知道,在水晶报表里,小数点的保留是个比较讨厌的问题。因为在数字字段的格式化中,小数点格式化的位数是固定的。也就是说要么保留两位,要么保留三位&&,要么一位都不保留。其实在很多时候,客户更希望的是服务器端是几位就保留几位。曾经有N 个人问过我这个问题如何解决,今天又有人问了,干脆写了一个函数解决这个问题,以后再有客户有这样的需求,直接套用这个函数就行了。其实我以前也说过,解决这个问题有一个方法就是在服务器端直接把这个数字字段转换成字符型,这样在水晶报表这边就不需要做任何处理了。但是这种办法有个不好的地方就是要去改服务器端视图,这样有可能会影响其他业务的操作。虽然可以创建一个新的视图来在它基础上做此报表,但是为了一个字段而新建个视图有时候也比较郁闷。另外一个办法就是在水晶报表中添加一个公式字段,对那个数字字段进行处理。思路就是先把这个字段转换成字符型,然后把小数点后面多余的0去掉。水晶报表有个数字转换字符的函数&ToText&,这里就有一个问题,这个函数可恶之处就是它必须要指定小数位数,如果不指定,它就保留两位小数。如果非要指定那就指定吧,但是它又说了,小数不能超过10位,&ToText(123.456, 11)&是通不过的,真是昏死!水晶报表中的函数代码如下:Local StringVar strTemp := ToText({FLEX_PURCH_REQ_REP\.ORIGINAL_QTY},10);Local NumberVLocal StringVar str := "";Local NumberVar strLen := Length (strTemp);For i := strLen To 1 Step -1 Do(&& If strTemp[i] = "." Then && (& //Integer,we should delete the point&&&&& str := Left(strTemp, i-1);&&&&& Exit For&& )&& Else If strTemp[i]& && "0" then&& (&&&&& str := Left(strTemp, i);&&&&& Exit For&& ));//Leading ZeroIf str[1] = "." Then(str := "0"+);Str
在使用的时候,只要新建一个公式,把上面代码拷贝进去,然后修改一下要转换的字段(蓝色字)就可以了。这里有个要注意的地方是:不能转换超过10位小数的数字,这是水晶报表的限制,在水晶报表客户端没有办法解决。我们到数字字段的格式化里去看,那里也最多格式化10位。如果将来真要有家客户需要保留10位以上小数,我们只好还是采用第一种方法 ―― 改服务器端视图。
阅读(...) 评论()3668人阅读
水晶报表设计与学习(15)
默认的数字字段会带有2或3位小数位,而当字段小数部分为零时,小数位将变成2或3个&0&(如123.00),很多时候我们不想要这几个多余的0,需要字段在有小数时显示小数位,没有小数时自动去掉多余的0。
这个问题,我很久以前帮网友回答过,但现在仍经常看到网友问这个问题,索性写篇文章,以供大家参考:
1,&看下面的图片,分组小计字段中,数据默认保留两位小数点。
2,&我现在想让3M字段的小计(画了框的部分)动态保存小数位,并把多余的0去掉。
3,&右键格式化该小计字段,点&自定义&,如下图:
4,&在&十位&处,选择你默认需要保留的小数位数,然后点后面的&x+2&按钮,编写公式,如下图:
5,&保存并退出,运行看看效果,是不是已经把多余0去掉了,如下图:
&6,&如果字段本身有小数位,则结果如下图:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:50117次
排名:千里之外
原创:18篇
评论:30条
(1)(1)(1)(1)(1)(1)(5)(2)(2)(1)(1)(1)(2)(2)水晶报表传递参数及使用公式参数 - 龍騎少校 - 博客园
玩的就是技术。ko!!!
posts - 313, comments - 26, trackbacks - 1, articles - 0
向水晶报表传递参数及使用公式参数
下面的说明是关于向水晶报表里传递字符串类型参数和数字参数,以及用公式参数进行运算和转换。
阅读本站更多
相关的文章:
向水晶报表中传递参数,现在水晶报表中设置参数,然后把参数赋给选择公式
CrystalDecisions.Shared.ParameterValues&& mypaVal = new CrystalDecisions.Shared.ParameterValues();
CrystalDecisions.Shared.ParameterDiscreteValue mypaDVal = new CrystalDecisions.Shared.ParameterDiscreteValue();
mypaDVal.Value = 参数值;
mypaVal.Add(mypaDVal);
myrep.DataDefinition.ParameterFields[\"水晶报表中的参数\"].ApplyCurrentValues(mypaVal);
第一步:生成数据集DataSet1.xsd,连好数据库,这在“水晶报表打印二”里面有详细说明,这里不再说明。
第二步:添加一个空白水晶报表CrystalReport1.rpt,在字段资源管理器中,右击“参数字段”选择“添加”,此处我们命名为p1(值类型为字符串),p2(值类型为数字,并且设为区域值),如下图:其它不做修改。
右击“公式字段”,选“新建”,新建两个为:f1和f2,确定后会出现“公式编辑器”如下图,先不做改变,保存后关闭。
第三步:将p1,p2拖入报表中,并保存报表。
第四步:编写代码。在WebForm1.aspx中以CrystalReportViewer1为对象编写代码如下:
// 声明将参数传递给
&&&&&&&& //&&查看器控件所需的变量。
&&&&&&&& ParameterFields paramFields = new ParameterFields ();
&&&&&&&&&&&&&&ParameterField paramField = new ParameterField ();
&&&&&&&&&&&&&&ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
&&&&&&&&&&&&&&ParameterRangeValue rangeVal = new ParameterRangeValue ();
// 第一个参数是具有多个值的离散参数。
&&&&&&&&&&&&&&// 设置参数字段的名称,它必须
&&&&&&&&&&&&&&// 和报表中的参数相符。
&&&&&&&&&&&&&&paramField.ParameterFieldName = \"p1\";
// 设置第一个离散值并将其传递给该参数。
&&&&&&&&&&&&&&discreteVal.Value = \"dongliang\";
&&&&&&&&&&&&&&paramField.CurrentValues.Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
&&&&&&&&&&&&&&// discreteVal 变量被设置为新值,这样,以前的设置
&&&&&&&&&&&&&&// 就不会被覆盖。
&&&&&&&&&&&&&&discreteVal = new ParameterDiscreteValue ();
&&&&&&&&&&&&&&discreteVal.Value = \"DONGLIANG\";
&&&&&&&&&&&&&&paramField.CurrentValues.Add (discreteVal);
// 将该参数添加到参数字段集合。
&&&&&&&&&&&&&&paramFields.Add (paramField);
// 第二个参数为区域值。paramField 变量
&&&&&&&&&&&&&&// 被设置为新值,这样,以前的设置就不会被覆盖。
&&&&&&&&&&&&&&paramField = new ParameterField ();
// 设置参数字段的名称,它必须
&&&&&&&&&&&&&&// 和报表中的参数相符。
&&&&&&&&&&&&&&paramField.ParameterFieldName = \"p2\";
// 设置范围的开始值和结束值并将该范围传递给
&&&&&&&&&&&&&&// 该参数。
&&&&&&&&&&&&&&rangeVal.StartValue = 42;
&&&&&&&&&&&&&&rangeVal.EndValue = 72;
&&&&&&&&&&&&&&paramField.CurrentValues.Add (rangeVal);
// 将第二个参数添加到参数字段集合。
&&&&&&&&&&&&&&paramFields.Add (paramField);
// 将参数字段集合放入查看器控件。
&&&&&&&&&&&&&&CrystalReportViewer1.ParameterFieldInfo = paramF
&&&&&&&&&&&&&&rpt = new CrystalReport1();
CrystalReportViewer1.ReportSource =
还是要引用命名空间:
using CrystalDecisions.S
using CrystalDecisions.CrystalReports.E
rpt 为ReportD
以上即可完对于参数字段的说明,下面是用公式字段来处理加入的参数字段:
将公式字段f1拖入水晶报表,并右键选择“编辑公式”如上图(图3.2)选择字符串处理函数如下:Left ({?p1},5 )
其它的数字处理的类似,如下图:
运行,你会看到:
如何向水晶报表数据源中的存储过程传参数?
水晶报表会自动为每个“存储过程中的参数”建立一个“参数字段”,所以这就成了运行时给参数赋值的问题了……
参数字段运行时自定义
[Visual Basic]
' 声明将参数传递给
'查看器控件所需的变量。
Dim paramFields As New ParameterFields()
Dim paramField As New ParameterField()
Dim discreteVal As New ParameterDiscreteValue()
Dim rangeVal As New ParameterRangeValue()
' 第一个参数是具有多个值的离散参数。
' 设置参数字段的名称,它必须
'和报表中的参数相符。
paramField.ParameterFieldName = \"客户姓名\"
' 设置第一个离散值并将其传递给该参数
discreteVal.Value = \"AIC Childrens\"
paramField.CurrentValues.Add(discreteVal)
' 设置第二个离散值并将其传递给该参数。
' discreteVal 变量被设置为新值,这样,以前的设置
'就不会被覆盖。
discreteVal = New ParameterDiscreteValue()
discreteVal.Value = \"Aruba Sport\"
paramField.CurrentValues.Add(discreteVal)
' 将该参数添加到参数字段集合。
paramFields.Add(paramField)
' 第二个参数为区域值。paramField 变量
'被设置为新值,这样,以前的设置就不会被覆盖。
paramField = New ParameterField()
' 设置参数字段的名称,它必须
'和报表中的参数相符。
paramField.ParameterFieldName = \"客户 ID\"
' 设置区域的开始值和结束值并将区域传递给该参数。
rangeVal.StartValue = 42
rangeVal.EndValue = 72
paramField.CurrentValues.Add(rangeVal)
' 将第二个参数添加到参数字段集合。
paramFields.Add(paramField)
' 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields
crystalReportViewer1.ReportSource = \"c:reportsmy report.rpt\"
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue rangeVal = new ParameterRangeValue ();
// 第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = \"客户姓名\";
// 设置第一个离散值并将其传递给该参数。
discreteVal.Value = \"AIC Childrens\";
paramField.CurrentValues.Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
discreteVal.Value = \"Aruba Sport\";
paramField.CurrentValues.Add (discreteVal);
// 将该参数添加到参数字段集合。
paramFields.Add (paramField);
// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = \"客户 ID\";
// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal.StartValue = 42;
rangeVal.EndValue = 72;
paramField.CurrentValues.Add (rangeVal);
// 将第二个参数添加到参数字段集合。
paramFields.Add (paramField);
// 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramF
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields* paramFields = new ParameterFields ();
ParameterField* paramField = new ParameterField ();
ParameterDiscreteValue* discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue* rangeVal = new ParameterRangeValue ();
// 第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField-&ParameterFieldName = \"客户姓名\";
// 设置第一个离散值并将其传递给该参数。
String* val = \"AIC Childrens\";
discreteVal-&Value =
paramField-&CurrentValues-&Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
val = \"Aruba Sport\";
discreteVal-&Value =
paramField-&CurrentValues-&Add (discreteVal);
// 将该参数添加到参数字段集合。
paramFields-&Add (paramField);
// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField-&ParameterFieldName = \"客户 ID\";
// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal-&StartValue = __box(42);
rangeVal-&EndValue = __box(72);
paramField-&CurrentValues-&Add (rangeVal);
// 将第二个参数添加到参数字段集合。
paramFields-&Add (paramField);
// 将参数字段集合放入查看器控件。
crystalReportViewer1-&ParameterFieldInfo = paramF
crystalReportViewer1-&ExportReport();
阅读本站更多
相关的文章:
水晶报表传递参数&&使用水晶报表公式参数&&向水晶报表数据源中的存储过程传参数有一个水晶报表公式转换成数字字符串值,但保留非数字的空/空-水晶报表crystal-reports,null,公式formula-CodeGo.net
有一个水晶报表公式转换成数字字符串值,但保留非数字的空/空
我有一个字符串字段,它大多含有十进制值,但包含像“&0.10”或“溶血”的价值观。
我希望有一个公式来这些值的字符串转换为值,让非空值(NULL)。
if isNumeric({a_omgang.omg_resultat}) then
toNumber({a_omgang.omg_resultat})
所有非数值,这使得它很难计算,例如返回0平均值或计数的值的数目。 (当然,后者可以实现一个运行总计数与isNumeric评价公式。)
任何建议我怎样才能得到公式工作 CodeGo.net,我想要什么?
编辑:我要的值是空(NULL),不只是把可见性,如果非
本文地址 :CodeGo.net/534009/
-------------------------------------------------------------------------------------------------------------------------
1. 在过去,我已经创建了一个返回NULL SQL表达式:
-- {@DB_NULL}
-- Oracle syntax
SELECT NULL FROM DUAL
-- {@DB_NULL}
-- MS SQL syntax
SELECT NULL
然后,我引用的公式在此领域:
// {@FormulaField}
If IsNumberic({table.field} Then
ToNumber({table.field})
ToNumber({@DB_NULL})
你可以得到这个通过执行下列工作:
创建一个新的公式,只需输入一个数字,然后保存。水晶现在这个公式有返回值相关联。
回去代入公式,并删除号码并重新保存它。现在你有一个公式返回一个null,但华润已经关联了它作为是一个公式让你随时随地你一个类型就可以了。
if isNumeric({a_omgang.omg_resultat})
then toNumber({a_omgang.omg_resultat})
else {@NullNumeric}
请注意 CodeGo.net,您可以在此为任何其他数据类型(包括字符串,因为一个空字符串不等同于空字符串),它是在那里你只是想直线上升忽略某些行汇总函数非常有用。
不知道这是最好的解决方案,但它是一个解决方案。
创建运行总计公式字段的最大值。通过公式计算NumericText(Replace({a_omgang.omg_resultat}, ".", ","))和由式复位true这会给你的每个条目的最大结果。 (即项目)。只有可以转换为一个值的项将被评估,因此所有其他人将是null。有true作为重置公式可以确保您始终获得被评估的项目的值。
这个运行总计的结果然后可以在问题被转换为一个公式。
该Replace()是由于语言环境,并根据您的系统的设置可能并不需要。如果需要的话,它也必须在值变换式。
尽我所知,你不能直接做到这一点。如果公式字段返回一个空它会转换为0。
你说你无法抑制。你能不能转换为数字,然后返回一个字符串?
本文标题 :有一个水晶报表公式转换成数字字符串值,但保留非数字的空/空
本文地址 :CodeGo.net/534009/
Copyright (C) 2014 CodeGo.net

我要回帖

更多关于 将小数化为百分比 的文章

 

随机推荐