Есть ли какой-либо способ добавить программно источник данных/набор данных в Microsoft.Reporting.WebForms.LocalReport, когда report-XmlFile (* .rdlc) не имеет определений datasource/dataset во время разработки ?Добавление Programmatically datasource/dataset в LocalReport
Это работает, если у меня уже есть источник данных/определение набора данных в моей * .rdlc
C#
public byte[] RenderReport(string reportName, string reportFormat)
{
LocalReport report = LoadReport(reportName);
//Has same name like DataSet in *.rdlc
ReportDataSource rds = new ReportDataSource("DataSet1", getData());
report.DataSources.Clear();
report.DataSources.Add(rds);
return report.Render(reportName);
}
private DataTable getData()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID",typeof(System.String)));
dt.Columns.Add(new DataColumn("NAME", typeof(System.String)));
dt.Rows.Add(new string[] { "1", "Me" });
return dt;
}
* .rdlc
<DataSources>
<DataSource Name="DataSource1">
<ConnectionProperties>
<DataProvider>System.Data.DataSet</DataProvider>
<ConnectString>/* Local Connection */</ConnectString>
</ConnectionProperties>
</DataSource>
</DataSources>
<DataSets>
<DataSet Name="DataSet1">
<Query>
<DataSourceName>DataSource1</DataSourceName>
<CommandText>/* Local Query */</CommandText>
</Query>
<Fields>
<Field Name="ID">
<DataField>ID</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="NAME">
<DataField>NAME</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
</DataSet>
</DataSets>
Но если я удалить определение источника данных/набора данных, я получаю
{Microsoft.Reporting.DefinitionInvalidException: определение отчета недействительно. ---> Microsoft.ReportingServices.ReportProcessing.ReportPublishingException: Выражение Value для текстового поля «Textbox1» относится к полю «ID». Выражения элемента отчета могут относиться только к полям в области текущего массива данных или, если внутри агрегата, заданной области набора данных . Буквы в названиях полей должны использовать правильный случай.}
У меня всегда есть, чтобы создать что-то вроде «пустышки» -DataSource/DataSet или я что-то пропустил в моем коде? Надеюсь, есть еще одно решение как манипулирование XML перед рендерингом, любые идеи?
Спасибо!
report.Render принимает «формат строки» в качестве параметра, а не имя отчета. – narayan