FSReportBuilder
Construtor visual de relatorios com posicionamento livre no canvas, blocos compactos para montagem rapida, painel lateral direito de propriedades, inclusao por botao, duplo clique ou arrastar, visualizacao em HTML e exportacao via impressao do navegador para PDF.
| Propriedade | Tipo | Padrao | Descricao |
ID_Componente | Integer | - | Identificador visual do componente. |
TextoComponente | String | - | Texto exibido acima do construtor. |
LayoutInicial | String | [] | JSON opcional com os blocos iniciais do relatorio. |
ValorComponente | String | vazio | Alias para o JSON persistido no campo oculto. |
TituloRelatorio | String | Relatorio | Valor inicial do estado do relatorio. O titulo final deve ser montado com blocos no canvas. |
SubtituloRelatorio | String | vazio | Valor inicial auxiliar do estado. O relatorio nao possui header fixo fora do canvas. |
NomeArquivoExportacao | String | relatorio | Nome usado na janela de impressao/exportacao. |
OrientacaoPagina | String | portrait | Aceita portrait ou landscape e agora troca a largura e a altura da folha no canvas e no visualizador. |
AlturaMinimaCanvas | Integer | 520 | Altura inicial usada como fallback para a folha quando o layout antigo ainda nao possui AlturaPagina. |
AlturaMinimaBloco | Integer | 10 | Altura minima visual de cada bloco no construtor e valor inicial usado na criacao de novos blocos. |
LarguraRelatorio | String | 960px | Largura inicial usada como fallback para layouts antigos. No editor atual o usuario escolhe um preset de papel ou o modo Personalizavel. |
MargemHorizontalRelatorio | String | 10px | Margem interna aplicada nas laterais da area de montagem. Continua editavel independentemente do papel escolhido. |
MostrarPreviewInicial | Boolean | False | Ja abre a area de visualizacao quando a pagina carrega. |
FonteDadosJson | String | vazio | JSON opcional para simular ou alimentar registros sem depender do banco no ambiente de teste. |
TipoFonteDados | String | none | Propriedade legada. O editor novo inicia o campo Fonte de dados em branco e so mostra valor quando o relatorio salvo possui esse metadado persistido. |
ComandoFonteDados | String | vazio | Propriedade legada. O campo Comando SQL ou StoreProcedure agora nasce em branco e so volta preenchido ao abrir um relatorio salvo com esse valor. |
OrigemParametrosFonteDados | String | none | Propriedade legada. O seletor Parametros inicia em branco e a origem efetiva continua sendo definida por linha na grade. |
DefinicaoParametrosFonteDados | String | vazio | Propriedade legada. A grade Parametros da consulta inicia vazia e so e preenchida quando o relatorio salvo possui essa definicao persistida. |
ConnectionStringName | String | vazio | Nome da connection string no Web.config usada para consultar MSSQL. |
ConnectionString | String | vazio | Connection string completa informada diretamente no componente. |
SelectCommand | String | vazio | Consulta SQL que abastece o relatorio. Cada linha retornada vira uma folha. |
MaximoRegistrosFonteDados | Integer | 50 | Limita a quantidade de registros carregados na visualizacao/exportacao. |
HabilitarPersistencia | Boolean | False | Exibe os botoes para salvar e listar relatorios salvos no banco. |
NomeTabelaPersistencia | String | FS_ReportBuilderRelatorios | Nome da tabela SQL usada para armazenar o estado completo do construtor. |
HabilitarImportacaoExportacaoJson | Boolean | True | Mostra botoes para baixar o estado do layout em JSON e importar um JSON colado pelo usuario. |
HabilitarDuplicarBloco | Boolean | True | Mostra acao para duplicar o bloco selecionado. |
HabilitarSnapGrade | Boolean | True | Alinha o movimento dos blocos a uma grade. |
TamanhoGradeSnap | Integer | 10 | Tamanho da grade de alinhamento em pixels. |
Blocos suportados: titulo, subtitulo, texto, card, destaque, tabela, tabelajson, assinatura, separador, imagem e dados. A paleta sempre carrega todos esses blocos configurados no componente. O canvas mostra apenas tipo, posicao e tamanho; ao selecionar um bloco, o painel lateral direito libera alinhamento, fonte, tamanho da fonte em px, tamanho do bloco e coordenadas X/Y. No bloco Texto tambem existem os campos Cor da fonte, Borda, Cor da borda, Negrito, Italico e Sublinhado. O bloco Card acrescenta ainda Cor de fundo para destacar secoes especificas do relatorio. O relatorio agora e 100% montado no canvas, sem header fixo fora da folha. Os presets A4, Carta, A3, Legal e A5 travam largura e altura; somente Personalizavel libera a digitacao manual. O bloco de imagem possui upload direto para ~/FSReport/img, cria a pasta automaticamente quando necessario e salva o arquivo com nome aleatorio. No topo do construtor existem os campos de fonte de dados e a grade de parametros por linha com Parametro, Origem, Variavel e Tipo. O bloco Tabela Json aceita um array JSON de objetos e monta as colunas automaticamente a partir das chaves do primeiro item; se quiser limitar ou reordenar colunas, informe os nomes em Meta separados por ;. Em relatorio novo esses campos iniciam em branco; eles so voltam preenchidos ao abrir um relatorio salvo que ja tenha esses metadados persistidos. Isso permite misturar, por exemplo, @ID_Usuario vindo de Session com @ID vindo de QueryString. Quando a persistencia estiver habilitada, o componente salva os metadados do relatorio em uma tabela e o layout em outra, com um registro por bloco. Tambem oferece as acoes Salvar, Salvar como copia e Excluir.
O canvas trabalha com posicionamento livre e visual simplificada. Isso acelera a montagem de linhas com blocos independentes, por exemplo logo de 300px na esquerda e titulo de 600px ao lado, sem poluir a area central com formularios. No bloco de imagem, o preview e o viewer esticam a imagem para ocupar 100% da area definida no bloco. As propriedades visuais adicionais de Texto e Card tambem ficam persistidas dentro do EstadoJson do relatorio, entao nao exigem novas colunas na tabela de blocos.
Tabelas SQL necessarias
Para habilitar salvar e continuar a edicao de relatorios, crie as tabelas abaixo no mesmo banco referenciado por ConnectionString ou ConnectionStringName. O padrao do componente usa o prefixo FS_. O botao salvar abre um popup proprio do componente para informar o nome do relatorio e nao depende da validacao HTML dos outros campos da pagina. O componente tambem permite salvar uma copia e excluir relatorios salvos.
CREATE TABLE dbo.FS_ReportBuilderRelatorios (
ID_Relatorio INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
ID_Componente INT NOT NULL,
NomeRelatorio NVARCHAR(150) NOT NULL,
TituloRelatorio NVARCHAR(200) NULL,
SubtituloRelatorio NVARCHAR(500) NULL,
NomeArquivoExportacao NVARCHAR(200) NULL,
OrientacaoPagina NVARCHAR(20) NULL,
TipoPapel NVARCHAR(30) NULL,
LarguraRelatorio NVARCHAR(40) NULL,
AlturaPagina INT NULL,
MargemHorizontalRelatorio NVARCHAR(40) NULL,
AlturaMinimaCanvas INT NULL,
AlturaMinimaBloco INT NULL,
TipoFonteDados NVARCHAR(20) NULL,
ComandoFonteDados NVARCHAR(MAX) NULL,
OrigemParametros NVARCHAR(20) NULL,
DefinicaoParametros NVARCHAR(MAX) NULL,
EstadoJson NVARCHAR(MAX) NOT NULL,
DataCriacao DATETIME NOT NULL CONSTRAINT DF_FS_ReportBuilderRelatorios_DataCriacao DEFAULT (GETDATE()),
DataAtualizacao DATETIME NOT NULL CONSTRAINT DF_FS_ReportBuilderRelatorios_DataAtualizacao DEFAULT (GETDATE())
);
CREATE INDEX IX_FS_ReportBuilderRelatorios_Componente_DataAtualizacao
ON dbo.FS_ReportBuilderRelatorios (ID_Componente, DataAtualizacao DESC);
CREATE TABLE dbo.FS_ReportBuilderBlocos (
ID_Bloco INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
ID_Relatorio INT NOT NULL,
Ordem INT NOT NULL,
BlocoIdCliente NVARCHAR(80) NOT NULL,
Tipo NVARCHAR(50) NOT NULL,
Titulo NVARCHAR(MAX) NULL,
Conteudo NVARCHAR(MAX) NULL,
Meta NVARCHAR(MAX) NULL,
ImageUrl NVARCHAR(MAX) NULL,
TextAlign NVARCHAR(20) NULL,
FontFamily NVARCHAR(200) NULL,
FontSize INT NOT NULL,
SizeClass NVARCHAR(10) NULL,
PosX INT NOT NULL,
PosY INT NOT NULL,
BlockWidth INT NOT NULL,
BlockHeight INT NOT NULL,
CONSTRAINT FK_FS_ReportBuilderBlocos_Relatorio
FOREIGN KEY (ID_Relatorio) REFERENCES dbo.FS_ReportBuilderRelatorios(ID_Relatorio)
ON DELETE CASCADE
);
CREATE INDEX IX_FS_ReportBuilderBlocos_Relatorio_Ordem
ON dbo.FS_ReportBuilderBlocos (ID_Relatorio, Ordem);
Se a tabela FS_ReportBuilderRelatorios ja existir em producao, basta acrescentar as colunas abaixo para liberar os tamanhos de papel persistidos sem perder os dados atuais.
IF COL_LENGTH('dbo.FS_ReportBuilderRelatorios', 'TipoPapel') IS NULL
ALTER TABLE dbo.FS_ReportBuilderRelatorios ADD TipoPapel NVARCHAR(30) NULL;
IF COL_LENGTH('dbo.FS_ReportBuilderRelatorios', 'AlturaPagina') IS NULL
ALTER TABLE dbo.FS_ReportBuilderRelatorios ADD AlturaPagina INT NULL;
IF COL_LENGTH('dbo.FS_ReportBuilderRelatorios', 'TipoFonteDados') IS NULL
ALTER TABLE dbo.FS_ReportBuilderRelatorios ADD TipoFonteDados NVARCHAR(20) NULL;
IF COL_LENGTH('dbo.FS_ReportBuilderRelatorios', 'ComandoFonteDados') IS NULL
ALTER TABLE dbo.FS_ReportBuilderRelatorios ADD ComandoFonteDados NVARCHAR(MAX) NULL;
IF COL_LENGTH('dbo.FS_ReportBuilderRelatorios', 'OrigemParametros') IS NULL
ALTER TABLE dbo.FS_ReportBuilderRelatorios ADD OrigemParametros NVARCHAR(20) NULL;
IF COL_LENGTH('dbo.FS_ReportBuilderRelatorios', 'DefinicaoParametros') IS NULL
ALTER TABLE dbo.FS_ReportBuilderRelatorios ADD DefinicaoParametros NVARCHAR(MAX) NULL;
No bloco Texto existe o checkbox Data Atual. Quando marcado, o componente acrescenta automaticamente a data atual por extenso logo apos o conteudo digitado, por exemplo 14 de Abril de 2026.
A exportacao para PDF usa a janela de impressao do navegador sobre a visualizacao gerada em HTML. Isso elimina dependencias extras e funciona bem com a opcao Salvar como PDF dos navegadores modernos. O tamanho da folha do PDF acompanha o papel e a orientacao selecionados no construtor.
<fs:FSReportBuilder
runat="server"
ID="RptBuilder"
ID_Componente="11"
TextoComponente="Construtor de relatorio"
TituloRelatorio="Relatorio de performance comercial"
SubtituloRelatorio="Visualizacao pronta para impressao e exportacao em PDF"
NomeArquivoExportacao="relatorio-performance-comercial"
OrientacaoPagina="portrait"
LarguraRelatorio="920px"
MargemHorizontalRelatorio="40px"
AlturaMinimaCanvas="560"
AlturaMinimaBloco="180"
MostrarPreviewInicial="true"
HabilitarPersistencia="true"
ConnectionStringName="Conexao"
NomeTabelaPersistencia="FS_ReportBuilderRelatorios" />
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
RptBuilder.FonteDadosJson = "[{""Cliente"":""Alpha Tech"",""Cidade"":""Sao Paulo"",""Valor"":""12500,00""}]"
RptBuilder.LayoutInicial = "[{""type"":""titulo"",""content"":""Relatorio - {{Cliente}}""},{""type"":""imagem"",""imageUrl"":""{{LogoUrl}}""},{""type"":""dados"",""meta"":""Cliente;Cidade;Valor""}]"
End If
End Sub