Mostrando postagens com marcador gridview. Mostrar todas as postagens
Mostrando postagens com marcador gridview. Mostrar todas as postagens

sexta-feira, 3 de maio de 2013

Relatório utilizando GridView x LINQ


Existem algumas formas de desenvolver relatórios utilizando ASP.Net.
  • Utilizado um grid para exibir as informações
  • Crystal reports: modelando um template com colunas, agrupamentos, sub grupos, etc.
  • Gráficos

No exemplo que vou demonstrar será utilizado o gridview.

No gridview é possível formatar as informações que serão exibidas através de css, criar um cabeçalho , rodapé e ordenação.

O Visual Studio já tem alguns templates pre definidos para montar um grid. Isso agiliza a desenvolvimento, caso você não entenda muito de css.

Na guia tools clique e arraste para tela o controle GridView. após feito isso clique no grid adicionado e vá até a guia propriedades.

altere a propriedade ID, no meu caso vou chamar de gdvCliente.

Por padrão a propriedade AutoGenerateColumns vem marcada como True. Essa propriedade irá criar o grid com todas as colunas do seu DataSource.

Agora vou definir um template, clique no grid e clique na seta que esta na lateral direita superior e clique em Auto Format. Como na imagem abaixo:


A janela abaixo irá aparecer e vou escolher o template Snowy Pine. 



Agora vamos ao código.

Eu inclui um arquivo do tipo LINQ to SQL, com o nome de Banco.dbml e arrastei para ele a tabela de clientes.
No arquivo Default.aspx.cs eu adicionei o seguinte código:

BancoDataContext bd = new BancoDataContext();
var resultado = from r in bd.Clientes orderby r.nome select { r.nome, r.email, r.telefone }; 
gdvCliente.DataSource = resultado;
gdvCliente.DataBind();

Basicamente fiz uma query selecionando todos os registros da tabela Cliente exibindo somente os campos “Nome”, “Email” e “Telefone”.

Informei que o DataSource do meu grid(“gdvCliente”) é o resultado dessa consulta.
E chamei o método DataBind(), que é responsável por carregar o grid com as informações do DataSource.

Veja o resultado:
Também é possível incluir alguns filtros, nesse exemplo vou adicionar os seguintes controles:
  • Label – titulo do filtro
  • TextBox – receberá o valor que fará o filtro – txtNome
  • Button – Executará o filtro - btnFiltrar

No evento onClick do botão Filtrar eu adicionei o seguinte código:



BancoDataContext bd = new BancoDataContext();
var resultado = from r in bd.Clientes where r.nome.Contains(txtNome.Text) orderby r.nome select new { r.nome, r.email, r.telefone };
gdvCliente.DataSource = resultado;
gdvCliente.DataBind();

Basicamente o código é o mesmo, a única diferença é a clausula where onde eu informei que o campo nome deve conter o valor filtrado.

Veja o resultado:




terça-feira, 9 de abril de 2013

DropDownList e Grid com LINQ


Recebi alguns emails questionando como trabalhar com DropDownList e GridView utilizando o Linq como fonte de dados.

Não tem muito segredo.

Veja o exemplo abaixo. 
Criei uma tabela em meu banco de dados com alguns campos.

Criei um arquivo no Visual Studio do tipo Linq to SQL, chamado de Banco.dbml e adicionei a tabela aluno.  Tenho um artigo escrito com maiores detalhes sobre o linq.

No arquivo Default.aspx adicionei o DropDownList:

<form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DDLalunos" runat="server" />
    </div>
</form>

Já no arquivo Default.aspx.cs eu indiquei como o controle será carregado:

BancoDataContext bd = new BancoDataContext();
DDLalunos.DataSource = (from c in bd.Alunos orderby c.nome select c).ToList();

DDLalunos.DataValueField = "id";
DDLalunos.DataTextField = "nome";

DDLalunos.DataBind();

Nesse exemplo eu estou listando os alunos ordenando por nome e atribuindo ao DataSource.
Feito isso será necessário indicar qual é apresentado ao usuário final e o campo que conterá o valor a ser enviado quando ocorrer o submit.

Neste caso eu estou dizendo que o valor a ser passado é a coluna ID e o valor apresentado para o usuário final é a coluna NOME.  

O DataBind é responsável por carregar essa informações indicadas anteriormente.
Ao executar, o resultado será como abaixo:


Eu posso indicar outra coluna para ser o valor apresentado ao usuário final:
BancoDataContext bd = new BancoDataContext();
DDLalunos.DataSource = (from c in bd.Alunos orderby c.nome select c).ToList();

DDLalunos.DataValueField = "id";
DDLalunos.DataTextField = "email";

DDLalunos.DataBind();


Veja o resultado:

No caso do GridView é a mesma coisa.

No arquivo Default.aspx eu adicionei a chamada o Grid

<form id="form1" runat="server">
    <div>
<asp:GridView ID="GDVAlunos" runat="server" AutoGenerateColumns="true" />
    </div>
</form>

No arquivo Default.aspx.cs indiquei qual é a fonte de dados e chamei o método DataBind();

GDVAlunos.DataSource = (from c in bd.Alunos orderby c.nome select c).ToList();
GDVAlunos.DataBind();

Veja o Resultado: