Use objetos personalizados como a origem para Microsoft Reports (.rdlc)
Pergunta
Em alguns casos, eu prefiro trabalhar com objetos personalizados em vez de conjuntos de dados rigidez e linhas de dados. No entanto, parece que a Microsoft Relatórios (incluído com VS2005) requer conjuntos de dados rigidez.
Existe uma maneira de usar o meu objetos personalizados para projetar e relatórios Preencher?
Solução
Eu encontrei a resposta. Sim é possivel. Você apenas tem que adicionar um objeto personalizado como uma fonte de dados no visual studio.
Outras dicas
Eu nunca poderia escolher um dos meus próprios POCOs na configuração de dados de relatório do meu projeto a ser um modelo para o relatório - a alegada opção 'global' mencionado na passo a passo não estava lá. Então acabei por ter de editar o XML para definir o tipo e uma fonte de dados imitação (que na verdade não existe no meu projeto).
I atribuir os dados do tipo Aies.Core.Model.Invoice.MemberInvoice
o relatório em código
reportViewer.LocalReport.DataSources.Add(new ReportDataSource("MemberInvoice", new[] { invoice1 }));
E a definição personalizada é:
<DataSources>
<DataSource Name="MemberInvoice">
<ConnectionProperties>
<DataProvider>System.Data.DataSet</DataProvider>
<ConnectString>/* Local Connection */</ConnectString>
</ConnectionProperties>
<rd:DataSourceID>3fe04def-105a-4e9b-99db-630c1f8bb2c9</rd:DataSourceID>
</DataSource>
</DataSources>
<DataSets>
<DataSet Name="MemberInvoice">
<Fields>
<Field Name="MemberId">
<DataField>MemberId</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="DateOfIssue">
<DataField>DateOfIssue</DataField>
<rd:TypeName>System.DateTime</rd:TypeName>
</Field>
<Field Name="DateDue">
<DataField>DateDue</DataField>
<rd:TypeName>System.DateTime</rd:TypeName>
</Field>
<Field Name="Amount">
<DataField>Amount</DataField>
<rd:TypeName>System.Decimal</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>MemberInvoice</DataSourceName>
<CommandText>/* Local Query */</CommandText>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>Aies.Core.Model.Invoice</rd:DataSetName>
<rd:TableName>MemberInvoiceData</rd:TableName>
<rd:ObjectDataSourceSelectMethod>GetInvoices</rd:ObjectDataSourceSelectMethod>
<rd:ObjectDataSourceSelectMethodSignature>System.Collections.Generic.IEnumerable`1[Aies.Core.Model.Invoice.MemberInvoice] GetInvoices()</rd:ObjectDataSourceSelectMethodSignature>
<rd:ObjectDataSourceType>Aies.Core.Model.Invoice.MemberInvoiceData, Aies.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</rd:ObjectDataSourceType>
</rd:DataSetInfo>
</DataSet>
</DataSets>
Eu acredito que você pode configurar SSRS para ler os valores de dados de um objeto mais ou menos arbitrária. esta relação descreve os IDataReaderFieldProperties objeto na API que (IIRC) permite que você especifique o método getter para invocar para obter um valor.