当前位置:编程学习 > C#/ASP.NET >>

水晶报表的怪异现象

有一个添加样品检验的需求,注册一个样品,然后填写检验报告单,生成检验报告(水晶报表)
现在生成检验报告我是从检验报告数据库(包含刚填写的样品检验报告单信息)中提取的某种样品id数最大的信息,这样就是获得的最后添加的这个报告,绑定水晶报表
第一个样品a添加检验报告单,绑定,OK,水晶报表出来了,没问题
换一个样品b添加检验报告单,绑定,OK,水晶报表也出来了,没问题
在添加一个样品a的检验报告单,绑定,这次就不OK了,水晶报表也出来了,不过现实的不是最后我添加的这条,而是第一次添加的样品a的信息
后面无论添加多少个a,都是出来第一个的检验报告单
b也如此,只要是之前数据库中有添加数据,他就不显示最新的

于是我就把一个datagridview放到窗体里面,看看到底提取出来什么数据,这时候出来一个可笑的事情,datagirdview和水晶报表绑定的是同一个dataset的同一个table的同一个row,结果datagridveiw上面显示的是最新的,可是水晶报表显示的是最老的,这是怎么回事?莫非水晶报表还有session一样的功能?能够缓冲数据?

我又在每次crystalreportviewer的load事件里面,让水晶报表的数据源为空,结果还是不行

谁能帮帮忙阿,这是什么原因阿,愁死了,项目就这么一点,死活就卡这里了 --------------------编程问答-------------------- 我用的是winform --------------------编程问答-------------------- 上去 --------------------编程问答-------------------- 调试一下看看从数据库取出来的到底和显示的是不是同一条记录  --------------------编程问答-------------------- 不是一条数据,我断点调试运行出来的数据和我让datagridview上面显示的数据是一致的,但是水晶报表就和这个不一样,可是他们都是使用的相同的sql语句 --------------------编程问答-------------------- 拿点代码出来瞧瞧!可能是你水晶报表做的方式不对吧! --------------------编程问答--------------------

        private void crystalReportViewer1_Load(object sender, EventArgs e)
        {
            DataSet pud = new DataSet();
            String str = Path.GetFullPath("Crystalnew.rpt");
            this.crystalnew1.Load(str);
            Bussiness.HandleExample he = new food.Bussiness.HandleExample();
            pud = he.ShowCheckReport(SampName, FacName);
            DataSet _pud = he.ShowCheckReport(SampName, FacName);
            crystalnew1.SetDataSource(pud.Tables[0]);
            this.crystalReportViewer1.ReportSource = crystalnew1;
            this.data.DataSource = pud.Tables[0];
        }

这个是绑定水晶报表绑定数据并且和水晶报表查看器关联的那部分语句 --------------------编程问答-------------------- 水晶报表上面直接扔的数据库字段 --------------------编程问答-------------------- 朋友们谁帮忙看看阿 --------------------编程问答--------------------  private void crystalReportViewer1_Load(object sender, EventArgs e)
        {
            DataSet pud = new DataSet();
            String str = Path.GetFullPath("Crystalnew.rpt");
            this.crystalnew1.Load(str);
            Bussiness.HandleExample he = new food.Bussiness.HandleExample();
            pud = he.ShowCheckReport(SampName, FacName);
            DataSet _pud = he.ShowCheckReport(SampName, FacName);
            //这个地方填写类似这样的代码
              //crystalnew1.DataSource.Clear();//就是把他的datasource清空
            crystalnew1.SetDataSource(pud.Tables[0]);
            this.crystalReportViewer1.ReportSource = crystalnew1;
            this.data.DataSource = pud.Tables[0];
        }

由于我机器上没有水晶报表,我不知道那里具体应该怎么写,但应该是那块的问题 --------------------编程问答-------------------- 楼上的朋友我看了你的代码了,不过crystalnew1没有.datasource的属性,后来我+了一条
            crystalnew1.DataSourceConnections.Clear();
但是还是不行,谁能帮帮再看看呢,谢谢了 --------------------编程问答-------------------- 来大大阿,受不了了 --------------------编程问答-------------------- 100分,谁能拿走都拿走吧,不行我再开个帖子给您100分,就差这么点了,哪位大大给我个支持阿 --------------------编程问答-------------------- 不是水晶报表的问题,是你取数据的问题.调试下就应该很明白了. --------------------编程问答-------------------- 我又调试了一次,没问题数据,数据库提取出来的dataset就是最新的数据,可是在水晶报表里面显示的就是最老的,无奈了 --------------------编程问答-------------------- 咱这得高人呢?怎么都不来我这个帖子,莫非都不用水晶报表么? --------------------编程问答-------------------- 帅哥,你这个需要调用报表的一个刷新的方法, Refresh --------------------编程问答-------------------- 好像一直有这个问题,不想GridView一样,Bind 一下就好了。。  --------------------编程问答-------------------- 回复16楼的帅哥,我不论是

        private void crystalReportViewer1_Load(object sender, EventArgs e)
        {
            DataSet pud = new DataSet();
            String str = Path.GetFullPath("Crystalnew.rpt");
            this.crystalnew1.Load(str);
            Bussiness.HandleExample he = new food.Bussiness.HandleExample();
            pud = he.ShowCheckReport(SampName, FacName);
            DataSet _pud = he.ShowCheckReport(SampName, FacName);
            crystalnew1.SetDataSource(pud.Tables[0]);
            crystalnew1.Refresh();
            this.crystalReportViewer1.ReportSource = crystalnew1;
            this.data.DataSource = pud.Tables[0];
        }

还是

        private void crystalReportViewer1_Load(object sender, EventArgs e)
        {
            DataSet pud = new DataSet();
            String str = Path.GetFullPath("Crystalnew.rpt");
            this.crystalnew1.Load(str);
            crystalnew1.Refresh();
            Bussiness.HandleExample he = new food.Bussiness.HandleExample();
            pud = he.ShowCheckReport(SampName, FacName);
            DataSet _pud = he.ShowCheckReport(SampName, FacName);
            crystalnew1.SetDataSource(pud.Tables[0]);
            this.crystalReportViewer1.ReportSource = crystalnew1;
            this.data.DataSource = pud.Tables[0];
        }

还是

[code=C#]
        private void crystalReportViewer1_Load(object sender, EventArgs e)
        {
            crystalReportViewer1.Refresh();
            DataSet pud = new DataSet();
            String str = Path.GetFullPath("Crystalnew.rpt");
            this.crystalnew1.Load(str);
            Bussiness.HandleExample he = new food.Bussiness.HandleExample();
            pud = he.ShowCheckReport(SampName, FacName);
            DataSet _pud = he.ShowCheckReport(SampName, FacName);
            crystalnew1.SetDataSource(pud.Tables[0]);
            this.crystalReportViewer1.ReportSource = crystalnew1;
            this.data.DataSource = pud.Tables[0];
        }

都是一个结果,不行,仍然在显示最老的记录
--------------------编程问答-------------------- 还有,这个水晶报表没有DataBinding --------------------编程问答-------------------- --------------------编程问答-------------------- 我手头上没有现成的代码,忘了是Report的Refresh还是ReportViewer的Refresh了。
你的问题我遇到过,解决方法就是需要Refresh --------------------编程问答-------------------- 求20楼的以后少来我帖子里面发广告 --------------------编程问答-------------------- 先去吃饭,看看下午有什么方法没有
还有菜菜朋友,这两个refresh我都试了,貌似不管用,下午我再看看,还是不行的话,我把代码发给你一部分,你给看看如何 --------------------编程问答--------------------
引用 21 楼 caicai_45 的回复:
我手头上没有现成的代码,忘了是Report的Refresh还是ReportViewer的Refresh了。 
你的问题我遇到过,解决方法就是需要Refresh
--------------------编程问答-------------------- 想起来了,你把代码这样改下,

 
       private void crystalReportViewer1_Load(object sender, EventArgs e)
        {
             //crystalnew1 的申明和初始化都放到这个地方,不是From级别的变量,作为方法变量

            crystalReportViewer1.Refresh();
            DataSet pud = new DataSet();
            String str = Path.GetFullPath("Crystalnew.rpt");
            crystalnew1.Load(str);
            Bussiness.HandleExample he = new food.Bussiness.HandleExample();
            pud = he.ShowCheckReport(SampName, FacName);
            DataSet _pud = he.ShowCheckReport(SampName, FacName);
            crystalnew1.SetDataSource(pud.Tables[0]);
            this.crystalReportViewer1.ReportSource = crystalnew1;
            this.data.DataSource = pud.Tables[0];
            crystalReportViewer1.Refresh();//这两个同样的方法,你看看能不能去掉一个
        }

--------------------编程问答-------------------- private void crystalReportViewer1_Load(object sender, EventArgs e)
        {
            DataSet pud = new DataSet();
            String str = Path.GetFullPath("Crystalnew.rpt");
            this.crystalnew1.Load(str);
            Bussiness.HandleExample he = new food.Bussiness.HandleExample();
            pud = he.ShowCheckReport(SampName, FacName);
            DataSet _pud = he.ShowCheckReport(SampName, FacName);
           crystalnew1.Refresh();//加上这句就好了
            crystalnew1.SetDataSource(pud.Tables[0]);
            this.crystalReportViewer1.ReportSource = crystalnew1;
            this.data.DataSource = pud.Tables[0];
        }

 
--------------------编程问答-------------------- Mark! --------------------编程问答-------------------- 是不是这个Load方法有问题
this.crystalnew1.Load(str);
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,