C# 水晶报表问题的一些总结(持续更新)

1.数据从DataSet导入到报表中不能直接oRpt.SetDataSource(ds);
            应该oRpt.SetDataSource(ds.Tables[0]);
            或者oRpt.SetDataSource(ds.Tables["表名"]);
2.ArrayList 二维数组的应用
      例子:
      原思路:将得到的每条二进制图片数据byte[] bt = br.ReadBytes((int)fs.Length);放入新定义的
              一个byteTemp数组中,显然不行,因为bt本身就是一个数组,而新定义的byteTemp数组的
              每个元素都要求是bt型。
      解决办法:二维数组ArrayList
            ArrayList btList = new ArrayList(6);
            for (int i = 0; i < getPath.Length; i++)
            {   
                FileStream fs = new FileStream(getPath[i], FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);
                byte[] bt = br.ReadBytes((int)fs.Length);
                btList.Insert(i, bt);
                fs.Close();
            }
            btList.Insert(i, bt);i表示位置,相当于第i个,bt表示当前值。
3.将图片的二进制变量赋为空
            string strTemp = "";
            byte[] temp;

            temp = new ASCIIEncoding().GetBytes(strTemp);//将符号""装换成二进制
            btList[5] = temp; 
4.怎么去掉水晶报表空白图片遗留的边框
        方法:1.在水晶报表上对需要去掉的图片点击右键,选择Format Object.
              2.选择Common,对Suppress勾上
              3.修改格式公式编辑器isnull({DataTable1.Pic6})
              这样图片6就OK了

5.oCR.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape;
  报表纸张明明设置的是A4,但打印出来的时候,一页大概还有1/5页空白在底下没用,由上面代码引起的

 

6.过段时间发现数据库连接错误
  主要是用户名更改后引起的,应该把连接全部重新设置为(local)

 

8.如果发现报表有很多数据
  (1)查看报表数据库专家里面的链接,不要有分支
  (2)如果要求一个模版打印多条数据,则要将字段放入详细资料里面

 

9.水晶报表映射问题
  1.强连接---
    又键点击手动生成的DataSet中强连接的表中属性,观察SQL语句
    如果在fill该表中,连接的数据为空,则会报错
  2.弱连接
    手动生成的DataSet中弱连接的表是手动添加的,不存在以上问题,也可以映射图片

 

10.水晶报表的关闭按钮事件处理--

 

11.报表数据为空:

     ①大部分情况都是数据库专家里面的各个表连接的影响的,表现在数据不唯一

     ②报表数据源修改后,如果数据不显示的一个原因就是字段得重新连接,原有的字段可能影响报表显示

     ③如果是PULL模式下,可能某个表字段并没有在报表上使用,导致数据为空

12.关于阿泰写的在水晶报表中实现任意选择指定字段显示-模板及C#升级版格式转换问题

     http://topic.csdn.net/u/20091224/16/c97a5f55-f5d9-436c-ac8a-e05baec10ce6.html

     http://topic.csdn.net/u/20090310/22/77529b37-898e-45ba-a551-892e9056f289.html

 

13.以泰哥的在水晶报表中实现任意选择指定字段显示-模板及C#升级版为指导思想,成功的实现了。
今天只更新了下数据库表UriResultPrint,同时更新了下报表的数据库专家的UriResultPrint,结果报错了,
问题一:
        错误如下:
        给该函数的参数太多
        文件C:/DOCUMEN~1/ADMINI~1/LOCALS~1/Temp/temp_6b252588-6042-4558-a09c-74df3fefe87a
        {C9378C35-463A-4CF9-BBC4-15D445C92EE6}.rpt内出错:
        公式 <uriResultField1>
        'totext({UriResultPrint.Rbc},'0')'
        给该函数的参数太多。
附:1.字段格式没有任何变化,而且数据库只是添加了稍许字段,也没有用到报表上
    2.totext({UriResultPrint.Rbc},'0')还原成'totext({UriResultPrint.Rbc})后,就不报错了。
    3.导入之前数据库没有改动的项目,'totext({UriResultPrint.Rbc},'0')'并没有错误。

问题二 :
        公式格式发生错误了:
        例如:if {UriResultPrint.SingularRbc} = 0 Then 100.00
              Else {UriResultPrint.WhackRbc}*100/({UriResultPrint.WhackRbc}+{UriResultPrint.SingularRbc})
        这段公式之前的项目中没有报错,而且很运行得很正常

数据库专家更新后则报错:
                      1.“if {UriResultPrint.SingularRbc} = 0中0应为字符型”
                      我改成“0”就可以了,怎么之前没有报错呢
                      2.“{UriResultPrint.SingularRbc})”应该为数字,日期。。
                      我将其转换为tonumber类型就OK了,怎么之前没有报错呢

 

解决方法:导致公式'totext({UriResultPrint.Rbc},'0')报错,
               因为式'totext({UriResultPrint.Rbc},'0')中UriResultPrint.Rbc必须是INT类型的,
               而不是VARCHAR类型的,唉,真是粗心。。。。

 相关帖子:http://topic.csdn.net/u/20100302/18/3d89e86d-6e6e-4679-887c-aa7623a98ed1.html?10774

发布了25 篇原创文章 · 获赞 4 · 访问量 17万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章