Hoje veremos como converter uma lista de objetos para CSV em aplicações ASP .NET MVC 5. |
Os arquivos CSV mais simples não permitem valores que contenham vírgula (Ex: Rua Teste, 100) ou outros caracteres especiais como o indicador de nova linha CR ou LF. (Carriage Return/ Line Feed) . Implementações mais sofisticadas permitem vírgulas, ponto e vírgula(;), asterístico(*) como delimitadores e outros caracteres especiais.
Hoje veremos como converter uma lista de objetos para o formato CSV e vamos gerar os objetos a partir de uma tabela de um banco de dados SQL Server usando o Entity Framework 6.
Podemos usar qualquer banco de dados e como exemplo para este artigo vou usar o banco de dados Northwind para o SQL Server que pode ser baixado aqui.
Vamos usar a tabela Employees deste banco de dados que tem a seguinte estrutura:
recursos usados:
Criando o projeto ASP .NET MVC 5
Abra o VS 2019 Community e crie uma solução em branco via menu File-> New Project;
Selecione o template ASP .NET Core Web Application, e, Informe o nome Mvc5_ListCSV;
A seguir selecione o template MVC e configurações conforme figura abaixo:
Clique no botão Create.
Após criar o projeto vamos incluir o pacote nuget : EntityFramework
Agora na pasta Models do projeto vamos criar a classe Employee :
public class Employee
{
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
|
Criei uma classe POCO com 4 propriedades que vai mapear para a tabela Employees. Vamos mapear apenas essas propriedades.
A seguir vamos criar a classe de contexto AppDbContext na pasta Models com o seguinte código:
using System.Data.Entity;
namespace Mvc5_ListCSV.Models
{
public class AppDbContext : DbContext
{
public AppDbContext() : base("AppDbContext")
{}
public DbSet<Employee> Employees { get; set; }
}
}
|
Aqui definimos o mapeamento da entidade para tabela do banco de dados.
Agora precisamos definir a string de conexão com o banco de dados Northwind no web config:
...<connectionStrings>
<add name="AppDbContext" providerName="System.Data.SqlClient"
connectionString="Data Source=(localdb)\v11.0;Initial Catalog=master;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False; ApplicationIntent=ReadWrite;
MultiSubnetFailover=False" />
</connectionStrings>
... |
Ajustando o controlador HomeController para obter os objetos e gerar o CSV
Vamos agora alterar o código do controlador HomeController na pasta Controllers conforme a seguir:
using
Mvc5_ListCSV.Models; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web.Mvc;
namespace
Mvc5_ListCSV.Controllers var employees = db.Employees.ToList();
return View(employees);
[HttpPost]
//obtem uma lista de objetos Employee
//Insere o nome das colunas StringBuilder sb = new StringBuilder();
//percore os funcionarios e gera o CSV
//Anexa uma nova linha |
Neste código temos dois métodos Action :
Para concluir vamos alterar o código da view Index.cshtml:
@model IEnumerable<Mvc5_ListCSV.Models.Employee>
@{
Layout = null;
WebGrid webGrid = new WebGrid(source: Model, canSort: false, canPage: false);
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Funcionários</title>
<style type="text/css">
body {
font-family: Arial;
font-size: 10pt;
}
</style>
</head>
<body>
<h4>Funcionários</h4>
<hr />
<div id="Grid">
@webGrid.GetHtml(
htmlAttributes: new { @id = "WebGrid" },
columns: webGrid.Columns(
webGrid.Column("EmployeeID", "EmployeeId"),
webGrid.Column("FirstName", "FirstName"),
webGrid.Column("City", "City"),
webGrid.Column("Country", "Country")))
</div>
<br />
<br />
@using (Html.BeginForm("Exportar", "Home", FormMethod.Post))
{
<input type="submit" id="btnSubmit" value="Exportar" />
}
</body>
</html>
|
Estamos implementando o WebGrid para exibir os dados dos funcionários e ao clicar no botão Exportar iremos acionar o método Action Exportar do controlador Home que vai gerar o arquivo:
Pegue o projeto (sem as referências) aqui : Mvc5_ListCSV.zip
Que nos consola em toda a nossa tribulação, para que também possamos
consolar os que estiverem em alguma tribulação, com a consolação com que nós
mesmos somos consolados por Deus."
2 Coríntios
1:3,4
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Novidades da versão 7.0 - Macoratti
C# - O tipo Dynamic - Macoratti.net
C# - Localizando Arquivos - Macoratti
C# - Usando OpenFileDialog - Macoratti
C# - Exibindo Arquivos e diretórios no TreeView - Macoratti
C# - LINQ : Calculando o total e o tamanho de arquivos em ... - Macoratti
C# - Copiando Arquivos - Macoratti
C# - Compactando e Descompactando diretórios - Macoratti.net