水晶报表中IFieldObject项空值怎么显示?(求救)

时间:2023-02-15 11:45:04
我在水晶报表中将IFieldObject某项filed的border都加上左右上下边框,但是在显示时
发现如果该字段在数据库的表中如果是空值,那么在水晶报表中显示出来是空的那项就回
什么都不显示,使上下表断开了,十分不好看,我想怎么样让它即使是空值也显示一个空的边框,让打印的表完整。请高手门多多指教!谢谢!

24 个解决方案

#1


------------------                       
 | name   |   id   | 
 ___________________
 | wang   |  001   |
 __________
 | zhang  |
 ___________________
 |  li    |   003  |
 __________________

画的不好,就是给大家说一下情况,就是如果数据库中第二项 id 如果是空的,那么在显示时
他的边框都不显示,请问有没有办法让他显示了。希望指点一下
  ------------------                       
 | name   |   id   | 
 ___________________
 | wang   |  001   |
 ——————————
 | zhang  |        |
 ——————————
 |  li    |   003  |
 ——————————

#2


先用isnull()判斷值是不是為null,若為null則賦值為""

#3


不是这样的,这是在水晶报表中从库中的表中对应出来时,打印断续的问题,在加入库时,因为有些
数据不是必须的,所以有可能是空的,所以不行的

#4


关注

#5


好高难度啊

#6


难吗?用过水晶报表的同志,你们没遇到这样的情况吗,说白了,就是如果用个别字段中存在空值,
那么在显示出的打印报表格式中就会断断续续,希望用过的人给点提示,如果解答了,可以单独给分的。

#7


加边框就没有用过,
方法一
在报表的Option中选中Convert Null to Default 这个CheckBox
然后设置字段的Default值为一个空格。。
方法二
用公式域进行处理,然后用公式域取代你原来的域
formula = IIF(ISNULL({field_name})," " , {field_name})
方法三
在DB里面将NULL处理掉
如果是SQL Server
大概是这样
SELECT CASE FIELD_1 WHEN NULL THEN " " ELSE FIELD_1 , ....
FROM TABLE_1
如果是Oracle
大概是这样
SELECT NVL(FIELD_1," ",FIELD_1) ,...
FROM TABLE_1

不知别人还有没有什么好建议
如果搞定,一定把做法告诉我
谢谢

#8


谢谢 ufcr(蓝石) 我对你提出的方法有点不太会用
方法一:我是在水晶报表中点击右健,然后再弹出的菜单中选择report-->report options 子菜单
出来后将Convert Null fiedl vaule to Default 选中,但是我找不见你说的"设置字段的Default值为一个空格"在那? 我这样操作对吗/?
方法二 :是在设置数据源时使用,还是在保存数据到数据库中时使用啊?

方法三:我用的是sql 2000,"SELECT CASE FIELD_1 WHEN NULL THEN " " ELSE FIELD_1 , .... FROM TABLE_1"这个语句我有点看不懂,case 像选择语句,而 then 则像条件语句,能否写的详细一点,谢谢了!!!
其他人有没有别的高建啊,帮我想一想,希望大家能帮我共同解决问题!水晶报表我第一次用啊。





#9


对了,问大家一句,如果想显示这样的表格,是将field 的 border 的左右上下都设为单划线,还是划个 box object 然后将field 放在box object 里? 还是其他办法?

#10


你可以在detail部分的Format事件中进行处理

"方法二
用公式域进行处理,然后用公式域取代你原来的域
formula = IIF(ISNULL({field_name})," " , {field_name})"
这个方法只能用在Access中
"对了,问大家一句,如果想显示这样的表格,是将field 的 border 的左右上下都设为单划线,还是划个 box object 然后将field 放在box object 里? 还是其他办法?
"
两中方法都可以

#11


问你们一个问题:
 ' The Salary, Team and Year formulas are shared between the details
    ' and group header - declare them here.
    Dim SalaryFormula As FormulaFieldDefinition
    Dim TeamFormula As FormulaFieldDefinition
    Dim YearFormula As FormulaFieldDefinition
    ' Add the formulas to the formula fields collection
    ' A field must be recurring if you want to group on a field or
    ' automatically bind it to a data source.
    ' Putting "WhileReadingRecords" into the formula text makes the formula
    ' into a recurring field.
    Const Recur = "WhileReadingRecords;" & vbNewLine
    Set PlayerFormula = m_Report.FormulaFields.Add("Player", Recur & "Space(10)")
    Set TeamFormula = m_Report.FormulaFields.Add("Team", Recur & "Space(10)")
    Set SalaryFormula = m_Report.FormulaFields.Add("Salary", Recur & "$0.0")
    Set YearFormula = m_Report.FormulaFields.Add("Year", Recur & "Space(10)")
水晶报表里的公式字段是干什么用的
请赐教

#12


Cocoky() 请你再说明一下我的问题好吗?为什么是断的?能不能给点程序看看 关于这样的

#13


up

#14


由于VB是解释型的语言

#15


怎么样解决我这个断的报表的问题,大家给点好的建议,行吗?或者说说你们是怎么样做网格样的打印的?

#16


用Box Object 框住你的字段吧
我侍过了
因该可以的

#17


公式域主要对Raw Data进行一些加工
有两种语法:
Crystal Clause
返回值是缺省的
Basic Clause
返回值用formula来表示
    formula = IIF(ISNULL({DataSource.FieldName})," ",Trim({DataSource.FieldName}))
Basic语法VB差不多

Crystal9中加入了自定义函数的功能
具体的,还是看看帮助吧:)

#18


我试过了
环境:VB5+Windows2000+Crystal Report 8.5
当字段值为空的时候表格还是可以完整的显示
不知道你的为什么不可以

#19


首先,感谢Cocoky() 和  ufcr(蓝石)  你俩的帮助!

因为我要做动态选择字段打印,所以字段全选上去,让他们不显示,选字段时,如果"用Box Object 框住你的字段"那么box 我也的隐藏了,所以相对麻烦一点,所以必须用这种加边框的方法。但是我真的显示不全,因为空字段。
另外 公式域的程序写到那我都不知道啊?在那调用啊?

#20


ufcr(蓝石)  :在报表的Option中选中Convert Null to Default 这个CheckBox
然后设置字段的Default值为一个空格。。的方法

我是在水晶报表中点击右健,然后再弹出的菜单中选择report-->report options 子菜单
出来后将Convert Null fiedl vaule to Default 选中,但是我找不见你说的"设置字段的Default值为一个空格"在那?

#21


我知道你是什么意思了
我回去试了一下确实如你所说
我正在努力解决

#22


我是这样做的:
       注:dbfldobj是动态添加的FieldObject类型
       report是动态建立的CRAXDRT.Report类型
       你可能是这样做的:        
        dbfldObj.LeftLineStyle = crLSSingleLine
        dbfldObj.RightLineStyle = crLSSingleLine
        dbfldObj.BottomLineStyle = crLSSingleLine
        dbfldObj.TopLineStyle = crLSSingleLine
        请你改为这样:
        report.AddLineObject dbfldObj.Left, dbfldObj.Top, dbfldObj.Left, dbfldObj.Top + dbfldObj.Height
        report.AddLineObject dbfldObj.Left, dbfldObj.Top, dbfldObj.Left + dbfldObj.Width, dbfldObj.Top
        report.AddLineObject dbfldObj.Left, dbfldObj.Top + dbfldObj.Height, dbfldObj.Left + dbfldObj.Width, dbfldObj.Top + dbfldObj.Height
        report.AddLineObject dbfldObj.Left + dbfldObj.Width, dbfldObj.Top, dbfldObj.Left + dbfldObj.Width, dbfldObj.Top + dbfldObj.Height

#23


我用公式域把空的字段保存成" "既空格,如果是varchar型还可以,但是如果int 或者 datatime 
等其他类型,就会再保存是出错,不行啊。
 Cocoky() 对水晶报表好像很是高手啊,你这种方法我还没试,因为我不是用语句划的边框,而是
再设计时就已经在字段周围就划好了。

#24


谢谢 Cocoky() 确实像你让你解决了,但是怎么调整网格间距啊,我现在是手工调整,调不好就有重叠的,我想怎么让它间距正好啊?
我这样 report.section(3).height=dbfldObj.height 好象也是不太理想

#1


------------------                       
 | name   |   id   | 
 ___________________
 | wang   |  001   |
 __________
 | zhang  |
 ___________________
 |  li    |   003  |
 __________________

画的不好,就是给大家说一下情况,就是如果数据库中第二项 id 如果是空的,那么在显示时
他的边框都不显示,请问有没有办法让他显示了。希望指点一下
  ------------------                       
 | name   |   id   | 
 ___________________
 | wang   |  001   |
 ——————————
 | zhang  |        |
 ——————————
 |  li    |   003  |
 ——————————

#2


先用isnull()判斷值是不是為null,若為null則賦值為""

#3


不是这样的,这是在水晶报表中从库中的表中对应出来时,打印断续的问题,在加入库时,因为有些
数据不是必须的,所以有可能是空的,所以不行的

#4


关注

#5


好高难度啊

#6


难吗?用过水晶报表的同志,你们没遇到这样的情况吗,说白了,就是如果用个别字段中存在空值,
那么在显示出的打印报表格式中就会断断续续,希望用过的人给点提示,如果解答了,可以单独给分的。

#7


加边框就没有用过,
方法一
在报表的Option中选中Convert Null to Default 这个CheckBox
然后设置字段的Default值为一个空格。。
方法二
用公式域进行处理,然后用公式域取代你原来的域
formula = IIF(ISNULL({field_name})," " , {field_name})
方法三
在DB里面将NULL处理掉
如果是SQL Server
大概是这样
SELECT CASE FIELD_1 WHEN NULL THEN " " ELSE FIELD_1 , ....
FROM TABLE_1
如果是Oracle
大概是这样
SELECT NVL(FIELD_1," ",FIELD_1) ,...
FROM TABLE_1

不知别人还有没有什么好建议
如果搞定,一定把做法告诉我
谢谢

#8


谢谢 ufcr(蓝石) 我对你提出的方法有点不太会用
方法一:我是在水晶报表中点击右健,然后再弹出的菜单中选择report-->report options 子菜单
出来后将Convert Null fiedl vaule to Default 选中,但是我找不见你说的"设置字段的Default值为一个空格"在那? 我这样操作对吗/?
方法二 :是在设置数据源时使用,还是在保存数据到数据库中时使用啊?

方法三:我用的是sql 2000,"SELECT CASE FIELD_1 WHEN NULL THEN " " ELSE FIELD_1 , .... FROM TABLE_1"这个语句我有点看不懂,case 像选择语句,而 then 则像条件语句,能否写的详细一点,谢谢了!!!
其他人有没有别的高建啊,帮我想一想,希望大家能帮我共同解决问题!水晶报表我第一次用啊。





#9


对了,问大家一句,如果想显示这样的表格,是将field 的 border 的左右上下都设为单划线,还是划个 box object 然后将field 放在box object 里? 还是其他办法?

#10


你可以在detail部分的Format事件中进行处理

"方法二
用公式域进行处理,然后用公式域取代你原来的域
formula = IIF(ISNULL({field_name})," " , {field_name})"
这个方法只能用在Access中
"对了,问大家一句,如果想显示这样的表格,是将field 的 border 的左右上下都设为单划线,还是划个 box object 然后将field 放在box object 里? 还是其他办法?
"
两中方法都可以

#11


问你们一个问题:
 ' The Salary, Team and Year formulas are shared between the details
    ' and group header - declare them here.
    Dim SalaryFormula As FormulaFieldDefinition
    Dim TeamFormula As FormulaFieldDefinition
    Dim YearFormula As FormulaFieldDefinition
    ' Add the formulas to the formula fields collection
    ' A field must be recurring if you want to group on a field or
    ' automatically bind it to a data source.
    ' Putting "WhileReadingRecords" into the formula text makes the formula
    ' into a recurring field.
    Const Recur = "WhileReadingRecords;" & vbNewLine
    Set PlayerFormula = m_Report.FormulaFields.Add("Player", Recur & "Space(10)")
    Set TeamFormula = m_Report.FormulaFields.Add("Team", Recur & "Space(10)")
    Set SalaryFormula = m_Report.FormulaFields.Add("Salary", Recur & "$0.0")
    Set YearFormula = m_Report.FormulaFields.Add("Year", Recur & "Space(10)")
水晶报表里的公式字段是干什么用的
请赐教

#12


Cocoky() 请你再说明一下我的问题好吗?为什么是断的?能不能给点程序看看 关于这样的

#13


up

#14


由于VB是解释型的语言

#15


怎么样解决我这个断的报表的问题,大家给点好的建议,行吗?或者说说你们是怎么样做网格样的打印的?

#16


用Box Object 框住你的字段吧
我侍过了
因该可以的

#17


公式域主要对Raw Data进行一些加工
有两种语法:
Crystal Clause
返回值是缺省的
Basic Clause
返回值用formula来表示
    formula = IIF(ISNULL({DataSource.FieldName})," ",Trim({DataSource.FieldName}))
Basic语法VB差不多

Crystal9中加入了自定义函数的功能
具体的,还是看看帮助吧:)

#18


我试过了
环境:VB5+Windows2000+Crystal Report 8.5
当字段值为空的时候表格还是可以完整的显示
不知道你的为什么不可以

#19


首先,感谢Cocoky() 和  ufcr(蓝石)  你俩的帮助!

因为我要做动态选择字段打印,所以字段全选上去,让他们不显示,选字段时,如果"用Box Object 框住你的字段"那么box 我也的隐藏了,所以相对麻烦一点,所以必须用这种加边框的方法。但是我真的显示不全,因为空字段。
另外 公式域的程序写到那我都不知道啊?在那调用啊?

#20


ufcr(蓝石)  :在报表的Option中选中Convert Null to Default 这个CheckBox
然后设置字段的Default值为一个空格。。的方法

我是在水晶报表中点击右健,然后再弹出的菜单中选择report-->report options 子菜单
出来后将Convert Null fiedl vaule to Default 选中,但是我找不见你说的"设置字段的Default值为一个空格"在那?

#21


我知道你是什么意思了
我回去试了一下确实如你所说
我正在努力解决

#22


我是这样做的:
       注:dbfldobj是动态添加的FieldObject类型
       report是动态建立的CRAXDRT.Report类型
       你可能是这样做的:        
        dbfldObj.LeftLineStyle = crLSSingleLine
        dbfldObj.RightLineStyle = crLSSingleLine
        dbfldObj.BottomLineStyle = crLSSingleLine
        dbfldObj.TopLineStyle = crLSSingleLine
        请你改为这样:
        report.AddLineObject dbfldObj.Left, dbfldObj.Top, dbfldObj.Left, dbfldObj.Top + dbfldObj.Height
        report.AddLineObject dbfldObj.Left, dbfldObj.Top, dbfldObj.Left + dbfldObj.Width, dbfldObj.Top
        report.AddLineObject dbfldObj.Left, dbfldObj.Top + dbfldObj.Height, dbfldObj.Left + dbfldObj.Width, dbfldObj.Top + dbfldObj.Height
        report.AddLineObject dbfldObj.Left + dbfldObj.Width, dbfldObj.Top, dbfldObj.Left + dbfldObj.Width, dbfldObj.Top + dbfldObj.Height

#23


我用公式域把空的字段保存成" "既空格,如果是varchar型还可以,但是如果int 或者 datatime 
等其他类型,就会再保存是出错,不行啊。
 Cocoky() 对水晶报表好像很是高手啊,你这种方法我还没试,因为我不是用语句划的边框,而是
再设计时就已经在字段周围就划好了。

#24


谢谢 Cocoky() 确实像你让你解决了,但是怎么调整网格间距啊,我现在是手工调整,调不好就有重叠的,我想怎么让它间距正好啊?
我这样 report.section(3).height=dbfldObj.height 好象也是不太理想