Передача параметра - локальный режим ReportViewer - PullRequest
0 голосов
/ 24 января 2011

Я пытаюсь передать параметр в локальный отчет, используя элемент управления ReportViewer в VS2010. Пользователь нажимает на продавца и нажимает кнопку (не показана), которая затем отображает отчет.

Я пытался использовать это видео: Как передать параметр в средство просмотра отчетов - YouTube

Проблема: Код не работает - около xxxx внизу, я не могу понять, что там должно быть

Проблема: Я бы хотел избавиться от этого кода и использовать linqtosql или что-то более простое.

alt text

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();
    }

Ответы [ 4 ]

2 голосов
/ 10 ноября 2011

В таком сценарии я обычно иду по этому пути:

  • Я создаю набор данных для отчета: выберите отчет и команду меню Вид - Данные отчета; в окнах «Данные отчета» выберите «Новый ... - Набор данных». Я ввожу имя для набора данных (предположим, погашения) и выбираю 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();
    
  • Примечание. Я взял этот код из проекта, в котором я использую его в несколько ином контексте, поэтому некоторый код может не понадобиться в вашем контексте.

1 голос
/ 24 января 2011

Этот xxxx - это просто имя источника данных, который вы хотите иметь. он может быть любым и используется конструктором для построения именованного источника данных. Это просто идентификатор. Например, передать "Merchent_Redemptions" или что угодно.

0 голосов
/ 21 июня 2013

Если у вас есть dataAdapator, DataSet, попробуйте это при загрузке формы: -

    this.DataTableAdapter.Fill(this.myDatabase_DataSet.tableName, parameter01, parameter02);
    this.reportViewer1.RefreshReport();
0 голосов
/ 03 июня 2013

datatable используется в качестве конструктора, он должен быть записан как индекс.

Ниже представлен код ReportDataSource datasource = new ReportDataSource (xxxx, newDataSet.Tables (0));

код должен быть в этом формате ReportDataSource datasource = new ReportDataSource (xxxx, newDataSet.Tables [0]);

...