Verwenden Sie benutzerdefinierte Objekte als Quelle für Microsoft Report (RDLC)
Frage
In einigen Fällen ziehe ich die Arbeit mit benutzerdefinierten Objekte anstelle von stark typisierte Datasets und Datenzeilen. Es scheint jedoch, wie Microsoft Reporting (mit VS2005 enthalten) erfordert stark typisierte Datasets.
Gibt es eine Möglichkeit, meine eigenen Objekte zu verwenden, zu entwerfen und zu bevölkern Berichte?
Lösung
fand ich die Antwort. Ja es ist möglich. Sie müssen nur ein benutzerdefiniertes Objekt als Datenquelle in Visual Studio hinzufügen.
Andere Tipps
Ich konnte nie in Report Data Setup von meinem Projekt eines meiner eigenen POCOs wählen ein Modell für den Bericht zu sein - die angebliche ‚globale‘ Option in der Durchlauf nicht da war. So beenden ich die XML bearbeiten zu müssen, um die Art zu definieren und eine Nachahmung Datenquelle (die eigentlich nicht in meinem Projekt vorhanden ist).
ich ordnen Sie die Daten vom Typ Aies.Core.Model.Invoice.MemberInvoice
den Bericht im Code
reportViewer.LocalReport.DataSources.Add(new ReportDataSource("MemberInvoice", new[] { invoice1 }));
Und die individuelle Definition lautet:
<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>
Ich glaube, Sie SSRS einrichten können Datenwerte aus einer mehr oder weniger beliebiges Objekt zu lesen. Dieser Link beschreibt die IDataReaderFieldProperties Objekt in der API, die (IIRC) können Sie die Getter-Methode angeben aufzurufen Wert zu erhalten.