2013-07-12 4 views
0

Есть ли какой-либо способ добавить программно источник данных/набор данных в 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 перед рендерингом, любые идеи?

Спасибо!

ответ

0

Вы не можете оставить RDLC witout DataSets, если вы используете его, и RDLC встроен в ваш проект. Либо оставить DataSet фиксированы и изменяются только это элементы либо попытаться загрузить определение отчета из XML

// Valid XML with dynamic DataSources and DataSets 
string s = @"<?xml version=""1.0"" encoding=""utf-8""?><Report ...>...</Report>"; 
report.LoadReportDefinition(new MemoryStream(Encoding.UTF8.GetBytes(s))); 
return report.Render(reportName); 
+0

report.Render принимает «формат строки» в качестве параметра, а не имя отчета. – narayan

Смежные вопросы