Baixe o app para aproveitar ainda mais
Prévia do material em texto
Treinamento em C# WebDeveloper Aula 25 Sexta-feira, 11 de Janeiro de 2019 Geração de Relatórios e publicação de projeto. Consulta de produtos: @model List<Projeto.Presentation.Models.FuncionarioConsultaModel> @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Consulta</title> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Consulta de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr /> <h4>@ViewBag.Resultado</h4> <table class="table table-bordered table-hover table-striped"> <thead> <!-- CABEÇALHO --> <tr> <!-- ABRE LINHA --> <th>Código</th> <th>Nome do Funcionário</th> <th>Salário</th> <th>Data de Admissão</th> <th>Operações</th> </tr> <!-- FECHA LINHA --> </thead> <tbody> <!-- CORPO DA TABELA --> @foreach(var funcionario in Model) { <tr> <td>@funcionario.IdFuncionario</td> <td>@funcionario.Nome</td> <td>@funcionario.Salario.ToString("c")</td> <td>@funcionario.DataAdmissao .ToString("dddd dd/MM/yyyy")</td> <td> <a href="/Funcionario/Exclusao ?idFuncionario=@funcionario.IdFuncionario" onclick="return confirm('Deseja excluir o Funcionario @funcionario.Nome ?');" class="btn btn-danger btn-sm"> Excluir </a> <a href="/Funcionario/Edicao ?idFuncionario=@funcionario.IdFuncionario" class="btn btn-primary btn-sm"> Atualizar </a> </td> </tr> } </tbody> <tfoot> <!-- RODAPE DA TABELA --> <tr> <!-- ABRE LINHA --> <td colspan="4">Quantidade de Funcionários: @Model.Count </td> <td> <a href="/Funcionario/Relatorio" class="btn btn-warning btn-block"> Gerar Relatório </a> </td> </tr> <!-- FECHA LINHA --> </tfoot> </table> </div> </body> </html> iTextSharp Framework para geração de relatórios em .NET using System; using System.Collections.Generic; using System.Linq; using System.Web; using iTextSharp.text; using iTextSharp.text.html.simpleparser; using iTextSharp.text.pdf; using System.IO; namespace Projeto.Presentation.Reports { public class RelatorioUtil { public byte[] GetPdf(string conteudo) { byte[] pdf = null; MemoryStream ms = new MemoryStream(); TextReader reader = new StringReader(conteudo); Document doc = new Document(PageSize.A4, 50, 50, 50, 50); PdfWriter writer = PdfWriter.GetInstance(doc, ms); HTMLWorker html = new HTMLWorker(doc); doc.Open(); html.StartDocument(); html.Parse(reader); html.EndDocument(); html.Close(); doc.Close(); pdf = ms.ToArray(); return pdf; } } } Voltando ao controller: FuncionarioController.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Projeto.Repository.Entities; //importando.. using Projeto.Business; //importando.. using Projeto.Presentation.Models; //importando.. using System.Text; using System.Diagnostics; using Projeto.Presentation.Reports; namespace Projeto.Presentation.Controllers { public class FuncionarioController : Controller { // GET: Funcionario/Cadastro public ActionResult Cadastro() { return View(); } // GET: Funcionario/Consulta public ActionResult Consulta() { List<FuncionarioConsultaModel> lista = ObterFuncionarios(); //enviando a lista para a página.. return View(lista); } // GET: Funcionario/Edicao?idFuncionario={0} public ActionResult Edicao(int idFuncionario) { FuncionarioEdicaoModel model = new FuncionarioEdicaoModel(); //buscando da camada de negócio.. FuncionarioBusiness business = new FuncionarioBusiness(); Funcionario funcionario = business.ConsultarPorId(idFuncionario); //verificar se o funcionario foi encontrado.. if(funcionario != null) { model.IdFuncionario = funcionario.IdFuncionario; model.Nome = funcionario.Nome; model.Salario = funcionario.Salario; model.DataAdmissao = funcionario.DataAdmissao; } //enviando a model.. return View(model); } [HttpPost] //recebe uma requisição POST da página public ActionResult CadastrarFuncionario(FuncionarioCadastroModel model) { //verificar se os dados recebidos atraves da classe model //passaram nas regras de validação.. if(ModelState.IsValid) { Funcionario funcionario = new Funcionario(); funcionario.Nome = model.Nome; funcionario.Salario = model.Salario; funcionario.DataAdmissao = model.DataAdmissao; FuncionarioBusiness business = new FuncionarioBusiness(); string mensagem = business.Cadastrar(funcionario); //enviando a mensagem para a página.. ViewBag.Resultado = mensagem; //limpar todos os campos do formulário ModelState.Clear(); } //nome da página return View("Cadastro"); } //GET : /Funcionario/Exclusao?idFuncionario={0} public ActionResult Exclusao(int idFuncionario) { //acessar a camada de regras de negócio.. FuncionarioBusiness business = new FuncionarioBusiness(); string mensagem = business.Excluir(idFuncionario); //exibindo a mensagem na página.. ViewBag.Resultado = mensagem; //redirecionar de volta para a página de consulta.. List<FuncionarioConsultaModel> lista = ObterFuncionarios(); //retornando para a página.. return View("Consulta", lista); } private static List<FuncionarioConsultaModel> ObterFuncionarios() { //declarando uma lista da classe de modelo.. List<FuncionarioConsultaModel> lista = new List<FuncionarioConsultaModel>(); //buscando os dados da camada de negócio.. FuncionarioBusiness business = new FuncionarioBusiness(); foreach (Funcionario funcionario in business.Consultar()) { FuncionarioConsultaModel model = new FuncionarioConsultaModel(); model.IdFuncionario = funcionario.IdFuncionario; model.Nome = funcionario.Nome; model.Salario = funcionario.Salario; model.DataAdmissao = funcionario.DataAdmissao; lista.Add(model); //adicionando na lista.. } return lista; } //método para gerar o relatório public void Relatorio() { //realizando uma consultade funcionários.. FuncionarioBusiness business = new FuncionarioBusiness(); List<Funcionario> lista = business.Consultar(); StringBuilder texto = new StringBuilder(); texto.Append("<h1>Relatório de Funcionários</h1>"); texto.Append("<p>Gerado em: " + DateTime.Now + "</p>"); texto.Append("<br/>"); texto.Append("<br/>"); texto.Append("<p>Listagem de funcionários cadastrados no sistema:</p>"); texto.Append("<br/>"); texto.Append("<br/>"); texto.Append("<table border='1' style='width: 100%'>"); texto.Append("<tr>"); texto.Append("<th>Código</th>"); texto.Append("<th>Nome do Funcionário</th>"); texto.Append("<th>Salário</th>"); texto.Append("<th>Data de Admissão</th>"); texto.Append("</tr>"); foreach(Funcionario f in lista) { texto.Append("<tr>"); texto.Append("<td>" + f.IdFuncionario + "</td>"); texto.Append("<td>" + f.Nome + "</td>"); texto.Append("<td>" + f.Salario + "</td>"); texto.Append("<td>" + f.DataAdmissao .ToString("dd/MM/yyyy") + "</td>"); texto.Append("</tr>"); } texto.Append("</table>"); //transformar o conteudo html em pdf.. byte[] pdf = null; try { RelatorioUtil util = new RelatorioUtil(); pdf = util.GetPdf(texto.ToString()); } catch(Exception e) { Debug.WriteLine("Erro ao gerar pdf: " + e.Message); } //download do relatório em PDF.. Response.Clear(); Response.ContentType = "application/pdf"; Response.AddHeader("content-disposition", "attachment; filename=relatorio.pdf"); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.BinaryWrite(pdf); Response.End(); } } } Executando: Resultado obtido: myasp.net Hospedando sistemas Criando um banco de dados no servidor myasp.net Obtendo a connectionstring: \Web.config.xml <!-- Mapeamento da string de conexão --> <connectionStrings> <add name="aula08" connectionString="Data Source=SQL5006.site4now.net; Initial Catalog=DB_A4301C_banco; User Id=DB_A4301C_banco_admin;Password=admin123456;" /> </connectionStrings> Gerenciando o banco de dados: Executando comandos SQL: Tools / Run Query Informações do servidor FTP Publicando: 13
Compartilhar