Question

Dans certains cas, je préfère utiliser des objets personnalisés plutôt que des ensembles de données et des lignes de données fortement typés. Cependant, il semble que Microsoft Reporting (inclus dans VS2005) nécessite des ensembles de données fortement typés.

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

Était-ce utile?

La solution

J'ai trouvé la réponse. Oui c'est possible. Vous devez simplement ajouter un objet personnalisé en tant que source de données dans Visual Studio.

http://www.gotreportviewer.com/objectdatasources/index.html

Autres conseils

Je ne pouvais jamais choisir un de mes propres POCO dans la configuration des données de rapport de mon projet comme modèle pour le rapport - l'option supposée "globale" mentionnée dans la procédure pas à pas n'était pas là. J'ai donc dû modifier le code XML pour définir le type et une source de données d'imitation (qui n'existe pas dans mon projet).

J'attribue les données de type Aies.Core.Model.Invoice.MemberInvoice au rapport sous forme de 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>

Je pense que vous pouvez configurer SSRS pour lire les valeurs de données d'un objet plus ou moins arbitraire. Ce lien décrit L'objet IDataReaderFieldProperties dans l'API qui (IIRC) vous permet de spécifier la méthode d'accesseur à appeler pour obtenir une valeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top