2008-09-24 15 views
2

Dans certains cas, je préfère travailler avec des objets personnalisés plutôt qu'avec des jeux de données fortement typés et des lignes de données. Cependant, il semble que Microsoft Reporting (inclus avec VS2005) nécessite des jeux de données fortement typés.Utiliser des objets personnalisés comme source pour Microsoft Reports (.rdlc)

Existe-t-il un moyen d'utiliser mes objets personnalisés pour concevoir et remplir des rapports?

Répondre

1

Je crois que vous pouvez configurer SSRS pour lire les valeurs de données à partir d'un objet plus ou moins arbitraire. This Link décrit l'objet IDataReaderFieldProperties dans l'API, lequel (IIRC) vous permet de spécifier la méthode getter à appeler pour obtenir une valeur.

2

Je ne pourrais jamais choisir une de mes propres Poços dans la configuration Rapport de données de mon projet d'être un modèle pour le rapport - l'option « global » présumé mentionné dans le walkthrough était pas là. J'ai donc dû éditer le XML pour définir le type et une source de données d'imitation (qui n'existe pas dans mon projet).

J'assignez les données de type Aies.Core.Model.Invoice.MemberInvoice au rapport dans le code

reportViewer.LocalReport.DataSources.Add(new ReportDataSource("MemberInvoice", new[] { invoice1 })); 

Et la définition personnalisée est:

<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>