none
关于RDLC报表打印中参数循环输出的问题!求教! RRS feed

  • 问题

  • 制作了一份报表环境是vs2010

    在rdlc设置了两个参数logdate,logcontent;

    在代码中如下传递:

     ReportDataSource reslog = new ReportDataSource("dataset_sys_log", sysinfo);
    //制定数据集
            reportViewer1.LocalReport.DataSources.Clear();
            reportViewer1.LocalReport.DataSources.Add(reslog);
    
            ReportParameter s1=null, s2=null;
    
            foreach (MSystemLog infos in sysinfo)//在字典中查找字段
            {
              s1 = new ReportParameter("LogDate", infos.LogDate.ToString());//传递给rdlc参数LogDate
              s2 = new ReportParameter("LogContent", infos.LogContent.ToString());//传递给rdlc参数LogContent
    
              
            }
            reportViewer1.LocalReport.SetParameters(new ReportParameter[] { s1, s2 });
            this.reportViewer1.RefreshReport();
    
    
    
    

    想实现循环输出指定的参数字段,在rdlc中我放置了一个list 然后再list集合众放置了两个textbox把其中的参数指定给textbox,执行程序没有错误但是输出却是第一条记录。

    每条信息都一样,我想循环输出所有记录哦,怎么搞的,我的代码有问题,请帮我修正一下!

    2010年9月6日 10:12

答案

  • 我想你应该是把报表“参数”和报表“数据源”弄混淆了,

    见君开头

    ReportDataSource reslog = new ReportDataSource("dataset_sys_log", sysinfo);
    //制定数据集
    reportViewer1.LocalReport.DataSources.Clear();
    reportViewer1.LocalReport.DataSources.Add(reslog);
    

    此番代码,想必是所有的日志信息都存在了这个sysinfo记录集中,且为数据源取名为"dataset_sys_log"。

    到此还没有问题,如果报表就是想列出这些日志的话,再加一句RefreshReport就够了。

    但后面的

    ReportParameter s1=null, s2=null;
    foreach (MSystemLog infos in sysinfo)//在字典中查找字段
    {
     s1 = new ReportParameter("LogDate", infos.LogDate.ToString());//传递给rdlc参数LogDate
     s2 = new ReportParameter("LogContent", infos.LogContent.ToString());//传递给rdlc参数LogContent 
    }
    reportViewer1.LocalReport.SetParameters(new ReportParameter[] { s1, s2 });
    

    确实让人有点迷糊,为何遍历赋值?那么这个遍历其实只是取了最后一个sysinfo的成员的两个属性而已。

    然后又将这两个属性给报表参数,据楼主说“执行程序没有错误”,那看来是报表设置了两个参数,一个名为"LogDate",另一个名为"LogContent",再根据“却是第一条记录”+“每条信息都一样”,看来第一条就是最后一条,得出一个很有可能的结论:

    1. 楼主您的textbox取值取错地方了,它的表达式不是“=Parameters!LogContent.Value”,而应该是“=Fields!LogContent.Value”。
    2. 要确认存在一个名为dataset_sys_log的DataSet,并且这个DataSet还必须是您放置的List的数据源。
    3. 参数用来当数据源虽然理论上可行的可能,但一般不会这样用的,参数一般是用来影响数据或呈现的,而不是提供数据的。

    2010年9月6日 15:29
  • 呵呵,楼上兄弟说的没错就是那个样子!

    c#新手哦,主要想解决另一个问题就是,我在这里的另一贴.

    "关于报表打印的问题,控制表格内容问题..."

    我想从统计那个字段的字符数然后分离判断来解决。看来还是要找一个其他的办法才好!

    谢谢楼上兄弟

    2010年9月7日 6:33

全部回复

  • 我想你应该是把报表“参数”和报表“数据源”弄混淆了,

    见君开头

    ReportDataSource reslog = new ReportDataSource("dataset_sys_log", sysinfo);
    //制定数据集
    reportViewer1.LocalReport.DataSources.Clear();
    reportViewer1.LocalReport.DataSources.Add(reslog);
    

    此番代码,想必是所有的日志信息都存在了这个sysinfo记录集中,且为数据源取名为"dataset_sys_log"。

    到此还没有问题,如果报表就是想列出这些日志的话,再加一句RefreshReport就够了。

    但后面的

    ReportParameter s1=null, s2=null;
    foreach (MSystemLog infos in sysinfo)//在字典中查找字段
    {
     s1 = new ReportParameter("LogDate", infos.LogDate.ToString());//传递给rdlc参数LogDate
     s2 = new ReportParameter("LogContent", infos.LogContent.ToString());//传递给rdlc参数LogContent 
    }
    reportViewer1.LocalReport.SetParameters(new ReportParameter[] { s1, s2 });
    

    确实让人有点迷糊,为何遍历赋值?那么这个遍历其实只是取了最后一个sysinfo的成员的两个属性而已。

    然后又将这两个属性给报表参数,据楼主说“执行程序没有错误”,那看来是报表设置了两个参数,一个名为"LogDate",另一个名为"LogContent",再根据“却是第一条记录”+“每条信息都一样”,看来第一条就是最后一条,得出一个很有可能的结论:

    1. 楼主您的textbox取值取错地方了,它的表达式不是“=Parameters!LogContent.Value”,而应该是“=Fields!LogContent.Value”。
    2. 要确认存在一个名为dataset_sys_log的DataSet,并且这个DataSet还必须是您放置的List的数据源。
    3. 参数用来当数据源虽然理论上可行的可能,但一般不会这样用的,参数一般是用来影响数据或呈现的,而不是提供数据的。

    2010年9月6日 15:29
  • 呵呵,楼上兄弟说的没错就是那个样子!

    c#新手哦,主要想解决另一个问题就是,我在这里的另一贴.

    "关于报表打印的问题,控制表格内容问题..."

    我想从统计那个字段的字符数然后分离判断来解决。看来还是要找一个其他的办法才好!

    谢谢楼上兄弟

    2010年9月7日 6:33