Как я могу загрузить данные как ReportDataSource? - PullRequest
4 голосов
/ 23 октября 2010

Я пытаюсь сделать что-то вроде:

this.reportViewer.LocalReport.DataSources.Clear();
DataTable dt = new DataTable();
dt = this.inputValuesTableAdapter.GetData();    
Microsoft.Reporting.WinForms.ReportDataSource rprtDTSource = new Microsoft.Reporting.WinForms.ReportDataSource();

rprtDTSource = dt; // this line generates exception   

//this.reportViewer.LocalReport.DataSources.Add(rprtDTSource);
this.reportViewer.RefreshReport();

Как я могу загрузить данные как ReportDataSource?

Текущий код производит: «Невозможно неявно преобразовать тип« System.Data.DataTable »в« Microsoft.Reporting.WinForms.ReportDataSource »»

Ответы [ 4 ]

9 голосов
/ 23 октября 2010

Вы неправильно инициализируете ReportDataSouce. Попробуйте это:

this.reportViewer.LocalReport.DataSources.Clear(); 
DataTable dt = new DataTable(); 
dt = this.inputValuesTableAdapter.GetData();     

Microsoft.Reporting.WinForms.ReportDataSource rprtDTSource = new Microsoft.Reporting.WinForms.ReportDataSource(dt.TableName, dt); 

this.reportViewer.LocalReport.DataSources.Add(rprtDTSource); 
this.reportViewer.RefreshReport(); 

Кроме того, вам может потребоваться изменить первый параметр в конструкторе ReportDataSource, чтобы задать имя источника данных, которого ожидает ваш отчет.

4 голосов
/ 22 января 2014

Я полагаю, что приведенный выше ответ Мэдисону является правильным, но комментарий Лука об использовании имени набора данных , указанного в файле отчета .rdlc , для свойства Datasource.Name, возможно, необходимо подчеркнуть. Для меня это был основной багабу, который мешал моему приложению работать. Его можно найти, открыв файл .rdlc в виде файла XML с помощью команды «Открыть с помощью ...». По умолчанию я думаю просто «DataSet1»:

<DataSets>
  <DataSet Name="DataSet1">
    <Fields>
      <Field Name="BusinessEntityID">
        <DataField>BusinessEntityID</DataField>
        <rd:TypeName>System.Int32</rd:TypeName>
      </Field>

Еще одна ошибка, которую я сделал, не включала файл .rdlc в папку Debug (или Release). Это было исправлено путем щелчка правой кнопкой мыши по файлу .rdlc в обозревателе решений, затем «Свойства», а затем для параметра «Копировать в каталог вывода» значение «Копировать всегда».

Как только эти две части были исправлены, моя программа работала, чтобы использовать ReportViewer в консольном приложении для создания файла PDF без интерфейса.

2 голосов
/ 05 сентября 2013
this.reportViewer1.LocalReport.DataSources.Clear();
reportViewer1.Reset();
reportViewer1.LocalReport.ReportEmbeddedResource = "Your Report Name.rdlc";
SqlConnection con = new SqlConnection();
con.ConnectionString = "Connection";
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select * from YourTableName";
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
con.Close();     
ReportDataSource rprtDTSource= new ReportDataSource();
rprtDTSource.Name = "reportDataSetName";
rprtDTSource.Value = dt;
this.reportViewer1.LocalReport.DataSources.Add(rprtDTSource);
this.reportViewer1.RefreshReport();
0 голосов
/ 25 июля 2013

Представьте, что блок DataSources вашего файла RDLC выглядит следующим образом:

тогда относительный код должен быть:

string name = "DataSet1_Lot"; // это должно существовать в файле RDLC DataTable dt = new DataTable ();

Microsoft.

...