none
ReportViewer com multiplas colunas RRS feed

  • Pergunta

  • ReportViewer com multiplas colunas, para geração de etiquetas.

    Já entrei no endereço:

    http://www.xhydra.com/dotnet/multi-column-reports-reportviewer-reports.html

    Segui a risca as instruções e, mesmo assim ele não gera as várias colunas que preciso, isso em webforms.


    Um exemplo de que preciso:

    Etiqueta 1   Etiqueta 2 
    Etiqueta 3
    Nome 1       Nome 2            Nome 3
    Endereço 1   Endereço 2    Endereço 3

    E tem de ser em report viewer ordens de cima!!!!

    Grato, desde já!
    terça-feira, 9 de setembro de 2008 13:53

Respostas

  • Danilo,

     

    Consegui resolver o problema da seguinte forma: Exportar o ReportViewer para PDF 

    Relatório com colunas "Etiquetas".

     

    Descrição do problema:

    Fiz um teste com a versão do ReportViewer para .NET 2005 e .NET 2008 e existe um problema na hora de fazer a  "renderização" do ReportViewer para ASP.NET (conforme consta no meu primeiro post, esse erro não ocorre com uma aplicação Windows Forms".

     

    Em anexo, um exemplo completo para resolver o problema em ASP.NET

     

    * Só um detalhe: Adicicione os campos do ReportViewer dentro de um List (componente do ReportView).

     

    Code Snippet

    'referências do banco de dados

    Imports System.Data.SqlClient

    Imports System.Data

    'referências do reportview

    Imports Microsoft.Reporting.WebForms

    'referência ConnectionStrings web.config

    Imports System.Web.Configuration.WebConfigurationManager

     

    Private Sub ExportarPDF()

    Dim strConexao As String = ConnectionStrings("AWorks").ConnectionString()

    Dim oConn As New SqlConnection

    Dim strSQL As New StringBuilder

    Dim oTable As New DataTable()

    Dim reportPath As String = Server.MapPath("~\Relatorios\ReportViewer\rdlEtiqueta.rdlc")

    Dim rView As ReportViewer = New ReportViewer()

    Try

    'passar os dados para o relatório (datatable)

    'abrindo conexão com o banco de dados

    oConn.ConnectionString = strConexao

    oConn.Open()

    'carregando os dados

    strSQL.Append(" SELECT ")

    strSQL.Append(" Production.Product.ProductID, ")

    strSQL.Append(" Production.Product.Name, ")

    strSQL.Append(" Production.Product.Color, ")

    strSQL.Append(" Production.Product.ListPrice, ")

    strSQL.Append(" Production.ProductSubcategory.Name AS NameSubcategory ")

    strSQL.Append(" FROM ")

    strSQL.Append(" Production.Product INNER JOIN Production.ProductSubcategory ")

    strSQL.Append(" ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID ")

    Dim oDA As New SqlDataAdapter(strSQL.ToString, oConn)

    oDA.Fill(oTable)

    'informando os dados para o reportview

    rView.LocalReport.DataSources.Add(New ReportDataSource("dsProduct", oTable))

    rView.LocalReport.ReportPath = reportPath

    '

    'exportando os dados do relatório para PDF

    '

    Dim warn() As Warning = Nothing

    Dim streamids() As String = Nothing

    Dim mimeType As String = "application/pdf"

    Dim encoding As String = String.Empty

    Dim extension As String = String.Empty

    Dim byteViewer() As Byte

    byteViewer = rView.LocalReport.Render("pdf", Nothing, mimeType, encoding, extension, streamids, warn)

    Response.Buffer = True

    Response.Clear()

    Response.ContentType = "application/pdf"

    Response.AddHeader("content-disposition", "inline; filename=ReportName.pdf")

    Response.BinaryWrite(byteViewer)

    Response.Flush()

    Response.End()

    Catch ex As Exception

    System.Diagnostics.Debug.WriteLine(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oTable.Dispose()

    rView.Dispose()

    oConn = Nothing

    oTable = Nothing

    rView = Nothing

    Response.Clear()

    End Try

    End Sub

     

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    quarta-feira, 10 de setembro de 2008 00:09
    Moderador
  • Laercio muito obrigado, ontém mesmo eu já havia feito através de pdf a impressão desse relatório.
    quarta-feira, 10 de setembro de 2008 11:13

Todas as Respostas

  • Danilo,

     

    No momento tenho apenas uma solução para Windows Forms:

    Code Snippet

    ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)

     

     

    Com issos as colunas são "renderizadas" corretamente pelo reportviewer. Para ASP.NET não encontrei nenhum método parecido.

     

    Um exemplo completo em VB.NET

     

    Code Snippet

    Private Sub ListaProdutos()

    Dim strConexao As String = My.Settings.AWorksLikeConnectionString.ToString

    Dim oConn As New SqlCeConnection

    Dim strSQL As New StringBuilder

    Dim oTable As New DataTable()

    Dim oCmd As SqlCeCommand = Nothing

    Try

    '1 passo: carregar o relat¢rio

    Dim strPathreport As String = String.Concat(Application.StartupPath.ToString(), "\rdlProduto.rdlc")

    strPathreport = strPathreport.Replace("bin\Debug\", "")

    ReportViewer1.LocalReport.ReportPath = strPathreport

    ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)

     

    '2 passo: passar os dados para o relat¢rio

    'abrindo conexÆo com o banco de dados.

    oConn.ConnectionString = strConexao

    oConn.Open()

    'definindo o SQL do relat¢rio

    strSQL.Append(" SELECT IDProduto, NomProduto FROM Produtos ")

    oCmd = New SqlCeCommand(strSQL.ToString, oConn)

    oCmd.CommandText = strSQL.ToString

    oCmd.CommandType = CommandType.Text

    'executando o SQLCommand

    Dim oDataReader As SqlCeDataReader = oCmd.ExecuteReader(CommandBehavior.CloseConnection)

    'converter o DataReader para DataTable

    oTable.Load(oDataReader)

    'definindo o DataSource do relat¢rio

    Dim myReportDataSource As ReportDataSource = New ReportDataSource("dsProduto", oTable)

    ReportViewer1.LocalReport.DataSources.Add(myReportDataSource)

    Catch ex As Exception

    System.Diagnostics.Debug.WriteLine(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oTable.Dispose()

    oConn = Nothing

    oTable = Nothing

    End Try

     

    End Sub

     

     

     

    terça-feira, 9 de setembro de 2008 14:27
    Moderador
  • Danilo,

     

    Consegui resolver o problema da seguinte forma: Exportar o ReportViewer para PDF 

    Relatório com colunas "Etiquetas".

     

    Descrição do problema:

    Fiz um teste com a versão do ReportViewer para .NET 2005 e .NET 2008 e existe um problema na hora de fazer a  "renderização" do ReportViewer para ASP.NET (conforme consta no meu primeiro post, esse erro não ocorre com uma aplicação Windows Forms".

     

    Em anexo, um exemplo completo para resolver o problema em ASP.NET

     

    * Só um detalhe: Adicicione os campos do ReportViewer dentro de um List (componente do ReportView).

     

    Code Snippet

    'referências do banco de dados

    Imports System.Data.SqlClient

    Imports System.Data

    'referências do reportview

    Imports Microsoft.Reporting.WebForms

    'referência ConnectionStrings web.config

    Imports System.Web.Configuration.WebConfigurationManager

     

    Private Sub ExportarPDF()

    Dim strConexao As String = ConnectionStrings("AWorks").ConnectionString()

    Dim oConn As New SqlConnection

    Dim strSQL As New StringBuilder

    Dim oTable As New DataTable()

    Dim reportPath As String = Server.MapPath("~\Relatorios\ReportViewer\rdlEtiqueta.rdlc")

    Dim rView As ReportViewer = New ReportViewer()

    Try

    'passar os dados para o relatório (datatable)

    'abrindo conexão com o banco de dados

    oConn.ConnectionString = strConexao

    oConn.Open()

    'carregando os dados

    strSQL.Append(" SELECT ")

    strSQL.Append(" Production.Product.ProductID, ")

    strSQL.Append(" Production.Product.Name, ")

    strSQL.Append(" Production.Product.Color, ")

    strSQL.Append(" Production.Product.ListPrice, ")

    strSQL.Append(" Production.ProductSubcategory.Name AS NameSubcategory ")

    strSQL.Append(" FROM ")

    strSQL.Append(" Production.Product INNER JOIN Production.ProductSubcategory ")

    strSQL.Append(" ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID ")

    Dim oDA As New SqlDataAdapter(strSQL.ToString, oConn)

    oDA.Fill(oTable)

    'informando os dados para o reportview

    rView.LocalReport.DataSources.Add(New ReportDataSource("dsProduct", oTable))

    rView.LocalReport.ReportPath = reportPath

    '

    'exportando os dados do relatório para PDF

    '

    Dim warn() As Warning = Nothing

    Dim streamids() As String = Nothing

    Dim mimeType As String = "application/pdf"

    Dim encoding As String = String.Empty

    Dim extension As String = String.Empty

    Dim byteViewer() As Byte

    byteViewer = rView.LocalReport.Render("pdf", Nothing, mimeType, encoding, extension, streamids, warn)

    Response.Buffer = True

    Response.Clear()

    Response.ContentType = "application/pdf"

    Response.AddHeader("content-disposition", "inline; filename=ReportName.pdf")

    Response.BinaryWrite(byteViewer)

    Response.Flush()

    Response.End()

    Catch ex As Exception

    System.Diagnostics.Debug.WriteLine(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oTable.Dispose()

    rView.Dispose()

    oConn = Nothing

    oTable = Nothing

    rView = Nothing

    Response.Clear()

    End Try

    End Sub

     

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    quarta-feira, 10 de setembro de 2008 00:09
    Moderador
  • Laercio muito obrigado, ontém mesmo eu já havia feito através de pdf a impressão desse relatório.
    quarta-feira, 10 de setembro de 2008 11:13
  • Danilo,

     

    Fico feliz por ter ajudado! Precisando é só postar no Fórum MSDN Brasil!

     

     

    Valeu!

     

     

    quarta-feira, 10 de setembro de 2008 12:23
    Moderador