【问题标题】:Passing a Parameter - ReportViewer local mode传递参数 - ReportViewer 本地模式
【发布时间】:2011-01-24 05:04:36
【问题描述】:

我很想在 VS2010 中使用 ReportViewer 控件在本地报告中传递参数。用户点击一个商家,然后按下一个按钮(未显示),然后呈现报告。

我试过使用这个视频:How-to Pass Parameter to Report Viewer - YouTube

问题:代码不起作用 - 在底部的 xxxx 附近我不知道里面应该有什么

问题:我很想摆脱这段代码并使用 linqtosql 或更简单的东西。

protected void Page_Load(object sender, EventArgs e)
    {
        DataSet1TableAdapters.MerchantNamesTableAdapter merchantNamesTableAdapter = new DataSet1TableAdapters.MerchantNamesTableAdapter();
        ddlMerchants.DataSource = merchantNamesTableAdapter.GetDataAllMerchants();
        ddlMerchants.DataTextField = "Name";
        ddlMerchants.DataValueField = "MerchantUID";
        ddlMerchants.DataBind();
        ReportViewer1.Visible = false;
    }

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

        SqlConnection sqlConnection = new SqlConnection("Data Source=.;Initial Catalog=myDataBase;Integrated Security=True");
        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
        SqlCommand sqlCommand = new SqlCommand();
        sqlCommand.Connection = sqlConnection;
        sqlCommand.CommandType = CommandType.Text;
        sqlCommand.CommandText = "select * from merchant where merchantUID = @MerchantUID";
        sqlCommand.Parameters.AddWithValue("@MerchantUID", ddlMerchants.SelectedValue);
        sqlDataAdapter.SelectCommand = sqlCommand;
        sqlDataAdapter.Fill(newDataSet);

        ReportDataSource datasource = new ReportDataSource(xxxx, newDataSet.Tables(0));

        ReportViewer1.LocalReport.DataSources.Clear();
        ReportViewer1.LocalReport.DataSources.Add(datasource);
        ReportViewer1.LocalReport.Refresh();
    }

【问题讨论】:

    标签: c# sql reporting-services reportviewer


    【解决方案1】:

    在这种情况下,我通常会走这条路:

    • 我为报表创建一个数据集:选择报表和菜单命令查看 - 报表数据;在 Report Data 窗口中选择 New ... - Dataset。我输入数据集的名称(假设 Redemptions),然后选择 New ... 下一个 DataSource,然后选择 Object 并导航到我的域(或 dto)类。完成后,我看到了我班级的字段,我可以在报告中使用它;

    • 如果需要,我在报告数据窗口中创建参数(右键单击参数节点)并定义参数的名称和类型;

    • 我编写这段代码将数据和参数(如果需要)传递给报告:

      viewer.Reset();
      ReportDataSource dataSource = new ReportDataSource();
      // I use a service/repository; you could also use Linq2Sql or EntityFramework 
      IList<Redemption> redemptions = _service.GetRedemptions(merchantId);
      BindingSource bindingSource = new BindingSource(redemptions, string.Empty);
      dataSource.Name = "Redemptions";
      dataSource.Value = bindingSource;
      viewer.LocalReport.DataSources.Add(getDataSource(sourceInfo));
      String reportName = "AD.Conso.MyReport.rdlc";
      viewer.LocalReport.ReportEmbeddedResource = reportName;
      
      IList<ReportParameter> parameters = new List<ReportParameter>();
      parameters.Add(new ReportParameter("myParameterName", "myParameterValue"));
      viewer.LocalReport.SetParameters(parameters);
      viewer.RefreshReport();
      
    • 注意:我从一个项目中获取了这段代码,我在一个稍微不同的上下文中使用它,因此在您的上下文中可能不需要一些代码。

    【讨论】:

      【解决方案2】:

      xxxx 只是您想要拥有的数据源的名称。它可以是任何东西,并且被构造函数用于Construct 命名数据源。它只是一个标识符。喜欢传递“Merchent_Redemptions”或任何你喜欢的东西。

      【讨论】:

        【解决方案3】:

        数据表被用作构造函数,而不是它应该被写为索引..

        下面是代码 ReportDataSource 数据源 = new ReportDataSource(xxxx, newDataSet.Tables(0));

        代码应该是这种格式 ReportDataSource 数据源 = new ReportDataSource(xxxx, newDataSet.Tables[0]);

        【讨论】:

          【解决方案4】:

          如果你有 dataAdapator,DataSet 然后在表单加载时试试这个:-

              this.DataTableAdapter.Fill(this.myDatabase_DataSet.tableName, parameter01, parameter02);
              this.reportViewer1.RefreshReport();
          

          【讨论】:

            猜你喜欢
            • 2011-08-03
            • 1970-01-01
            • 2013-09-12
            • 1970-01-01
            • 2017-07-19
            • 2013-09-15
            • 2020-09-23
            • 2012-11-01
            • 1970-01-01
            相关资源
            最近更新 更多