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?

Foi útil?

Solução

Eu encontrei a resposta. Sim é possivel. Você apenas tem que adicionar um objeto personalizado como uma fonte de dados no visual studio.

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top