Mostrando postagens com marcador Reporting Services. Mostrar todas as postagens
Mostrando postagens com marcador Reporting Services. Mostrar todas as postagens

quarta-feira, 27 de agosto de 2014

Reporting Services - Girar Imagem usando VB.NET

Um recurso interessante do reporting services é a possibilidade de execução de código VB.NET no seu relatório. Com isto em mãos podemos resolver inúmeras situações com pouco código. Imagine então a situação em que você possui uma imagem para ser adicionada no seu relatório. Porém o cliente precisa que esta imagem seja visualizada em um grau diferente, como por exemplo, na vertical. Não existe uma propriedade do componente de imagem na qual possa ser configurada esta alteração. Felizmente, via programação, resolvemos isto de forma bem simples, conforme mostrado abaixo.

Primeiro, vamos adicionar a referência da classe Drawing no relatório (opção Propriedades)



E vamos adicionar nosso código para girar a imagem




Function GirarImagem(ByVal imageDB As Byte()) As Byte()

        Dim ms As System.IO.Stream = New System.IO.MemoryStream(imageDB)
        ms.Seek(0, System.IO.SeekOrigin.Begin)

        Dim imgObj As System.Drawing.Bitmap = New System.Drawing.Bitmap(ms)
        imgObj.RotateFlip(System.Drawing.RotateFlipType.Rotate270FlipXY)

        Dim ms2 As System.IO.MemoryStream = New System.IO.MemoryStream()
        imgObj.Save(ms2, System.Drawing.Imaging.ImageFormat.Bmp)
        Dim bitmapData As Byte() = ms2.ToArray()

        Return bitmapData

End Function


Note que a função espera um parâmetro de imagem do tipo [Byte()], pois neste nosso exemplo o relatório busca a imagem como um campo no banco de dados (VarBinary)



Desta forma, vamos alterar a expressão do objeto de imagem para executar nossa função



E o resultado



Ref: Rotate Flip Types

[]s

terça-feira, 26 de novembro de 2013

Reporting Services - Matrix - Largura das Colunas Dinâmicas


Apesar da flexibilidade do componente Matrix, sempre nós, desenvolvedores - ou o usuário final - vamos solicitar algo que este ou algum componente não vai atender!!

Mas graças a criatividade humana (use com moderação :) ) podemos pelo menos chegar a um resultado satisfatório, pois já que não é possível configurar a largura de cada coluna que será criada, vamos adicionar um artifício para, hora mostrar ou não uma coluna adicional, criada ao lado da coluna na Matrix. Usei como "inspiração" a idéia registrada no blog do Leigh Waldie.

Então, vamos imaginar que a Matrix irá criar várias colunas, infelizmente todas com a mesma largura. Para deixar isto um pouco melhor, vamos criar um recurso para mostrar as colunas "com larguras diferentes".

Primeiro, vamos adicionar a coluna auxiliar, do lado direito da única coluna do objeto Matrix, e dentro do grupo já existente desta coluna genérica (Inside Group - Right) , como ilustrado abaixo:



Agora o truque consiste em "ligarmos" o modo avançado para edição das propriedades da [Column Groups] do relatório, visualizar a [segunda] propriedade "Static" - segunda, pois se refere a coluna auxiliar que estamos manipulando - e finalmente adicionar a expressão desejada no atributo [Hidden]. No meu caso, quero somente habilitar a Coluna Auxiliar se o [valor] da Matrix tiver um comprimento maior ou igual a 10, conforme ilustrado:



Não esqueça de efetuar um [merge] das colunas do seu [Data Region] para uma visualização correta dos dados, já que você agora possui uma coluna auxiliar que aparece/desaparece.



E como resultado final, note que somente para colunas com conteúdo [menor ou igual a 10] não temos o "apoio" da Coluna Auxiliar (no caso, as colunas [Revisão] e [Data de Recebimento]), como ilustrado abaixo:



[]s