1.先创建一个报表数据集,添加所需要的所对应表

2.创建报表,设置所需要变量及添加数据集

3.下面设置要传递的参数及数据表集合

4.新建一个窗体放一个ReportViewer控件,把参数及数据集传递给此控件

//定义参数字典参数集,报表对应调用一个是变量名及变量值
Dictionary<string, string> param = new Dictionary<string, string>();
//param1变量名,paramvalue变量值
param.Add("param1","paramvalue");
//数据集
DataSet tablelist = new DataSet();
//数据表
tablelist.Tables.Add(dt.Copy());
//数据表命名对应的是报表的数据集名称
tablelist.Tables[0].TableName = "InsuranceTable";
//调用方法,第一个是报表名称,数据表集合,变量集
CustomerData.RirectPrint.PrintPreview("保单到期提醒", tablelist, param);

 构造报表能使用变量集

public static void PrintPreview(string fileName,System.Data.DataSet tablelist,Dictionary<string,string> param) {
       //报表直接使用的变量集
            List<Microsoft.Reporting.WinForms.ReportParameter> paramList = new List<Microsoft.Reporting.WinForms.ReportParameter>();
            foreach (KeyValuePair<string,string> kvp in param) {
                paramList.Add(new Microsoft.Reporting.WinForms.ReportParameter(kvp.Key, kvp.Value));
            }
       //调用构造方法
            PrintPreview printfrm = new PrintPreview(fileName,tablelist, paramList);
            printfrm.ShowDialog();
        }

参数传递给报表控件

public PrintPreview(string fileName,DataSet tablelist, List<ReportParameter> paramList)
        {
            InitializeComponent();
            try
            {
                //开启打印模式,及默认100%尺寸显示
                this.reportViewer1.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout);
                this.reportViewer1.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.Percent;
                this.reportViewer1.ZoomPercent = 100;
                this.reportViewer1.LocalReport.DataSources.Clear();
         //设置报表路径
                this.reportViewer1.LocalReport.ReportPath = System.Environment.CurrentDirectory + @"\reports\" + fileName + ".rdlc";//查找要绑定的报表 
        //报表集合
                foreach (DataTable table in tablelist.Tables) {
                    this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource(table.TableName, table));  //绑定数据源  
                }
                this.reportViewer1.LocalReport.SetParameters(paramList);
                this.reportViewer1.RefreshReport();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }