reportviewer制作

为了大家理解,我先简要说一下我们这个表格的设计,以下是这个表格做成后的一个图:

 

 

相信大家做社保、人力资源等mis系统的时候经常用到这种类型的表格。现在有了vs里的rdlc大家再也不用去花银子买那些昂贵的报表软件了。

现在就说一下设计步骤

1. 新建一个报表,默认名为“Report1.rdlc”

2. 添加一个“列表”,这是最关键的,因为这个报表是打印多条记录(Row),所以必须用这个“列表”作为一个容器,否则以后显示出来的数据就只有一条,在Toolbar上只会看见(1/1页),就因为这个问题偶整了两天。

3. 加入“表”,把“表”拖进“列表”里,这样“表”里的所有字段才能动态显示如“=First(Fields!Student_Address.Value)”,顺便提一下,应该把所有显示的东西全部放到“列表”里。

4. 要想设计成为上图那种表格,需要把“表详细信息”去掉,只留“表格表头”和“表格表尾”,因为在表头和表尾的区域才能嵌入另一个“表”,

5. 设计整理好表格框架,这部份主要是调整表格结构,象上图那些“姓名、性别”这种是用手工敲上去的,“李小华、男”这种是拖放的数据库字段,当然字段是从数据集里拖进来还是数据库里施,这完全取决于你的程序设计,偶这里是从数据集里拖进来的

6.在“列表”的属性里(点列表空白处右键),设置一个分组并设置在结尾处分页,即然是分组那肯定是唯一值,看下图,我选用的是数据库里的自增ID作为分组依据。要不然以后有相同值的时候页数就会错误

 

7. 图像那里有个问题,“表”不支持上下行的合并,这怎么办呢?我只有手动调整图像的位置(用键盘上的上下左右键去移动,配合一下在图像属性里调整Size值),但是在记住,这图像必须是被“列表”包含的,也就是说先把图像托到“例表”内,否则图像不会读取数据,我这里的图像是取的外部URL图像地址。

8. 最后一步就是在winform里加入reprotviewer控件使其绑定到这张报表上。后面的编程就不多说了。

 

用objectdatasource来传参数的

ReportViewer1.ProcessingMode = ProcessingMode.Local;

ReportViewer1.LocalReport.ReportPath = Server.MapPath("Reports/ContractQuery.rdlc");

ObjectDataSource ods = new ObjectDataSource("MDCLib", "QueryContract");

QueryStringParameter para = new QueryStringParameter("QueType", TypeCode.String,"reportid");

para.DefaultValue = "0";

ods.SelectParameters.Add(para);

ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("mdc_ExpireContract_MDC_ExpireContract", ods));
 
用reportview显示RDLC文件
 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
using Microsoft.Reporting.WebForms;

public partial class DrillThroughReport_Parent : System.Web.UI.Page
{
    public SqlParameter[] Level1SearchValue = new SqlParameter[1];
    public SqlParameter[] Level2SearchValue = new SqlParameter[1];
    public string thisConnectionString =
      ConfigurationManager.ConnectionStrings
      ["NorthwindConnectionString"].ConnectionString;
    DrillThroughDataSet ds = new DrillThroughDataSet();   

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    
    protected void ReportViewer1_Drillthrough1(object sender, DrillthroughEventArgs e)
    {
        //Get OrderID that was clicked by 
        //user via e.Report.GetParameters()
        ReportParameterInfoCollection DrillThroughValues =
                                 e.Report.GetParameters();

        //This is just to show you how to iterate 
        //through the collection if you have
        //multiple parameters values instead of a single parameter value.
        //To process multiple parameters values, 
        //concatenate d.Values[0] into a string with a delimiter.
        //Use the Split() method to  separate values 
        //into an array. Assign indivdual array element to
        //corresponding parameter array element.
        foreach (ReportParameterInfo d in DrillThroughValues)
        {
            lblParameter.Text = d.Values[0].ToString().Trim();
        }
        LocalReport localreport = (LocalReport)e.Report;

        //Fill dataset for Level1.rdlc
        SqlConnection thisConnection = new SqlConnection(thisConnectionString);
        System.Data.DataSet Level1DataSet = new System.Data.DataSet();

        Level1SearchValue[0] = new SqlParameter("@OrderID",
                               lblParameter.Text.Trim());
        Level1DataSet = SqlHelper.ExecuteDataset(thisConnection,
                      "Show_OrderDetails", Level1SearchValue);

        ReportDataSource level1datasource = new
          ReportDataSource("DrillThroughDataSet_Show_OrderDetails",
          Level1DataSet.Tables[0]);
        localreport.DataSources.Clear();
        localreport.DataSources.Add(level1datasource);
        localreport.Refresh();
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        ReportViewer1.Visible = true;

        SqlConnection thisConnection = new SqlConnection(thisConnectionString);
        System.Data.DataSet thisDataSet = new System.Data.DataSet();

        //Run the stored procedure  to fill dataset for Parent.rdlc
        thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
                     "List_Customers_OrderTotal");
                        //和设计时表名一致

        //Assign dataset to report datasource
        //datasource的名称即DrillThroughDataSet_List_Customers_OrderTotal要和设计报表时的数据源名称一致
        ReportDataSource datasource =
          new ReportDataSource("DrillThroughDataSet_List_Customers_OrderTotal",
          thisDataSet.Tables[0]);

        //Assign datasource to reportviewer control
        ReportViewer1.LocalReport.ReportPath = "parent.rdlc";
        ReportViewer1.LocalReport.DataSources.Clear();
        ReportViewer1.LocalReport.DataSources.Add(datasource);
        ReportViewer1.LocalReport.Refresh();
    }
}

posted @ 2008-09-18 11:00  FanXL  阅读(1215)  评论(0编辑  收藏  举报