Gerando xml de um objeto durante a execução no Visual Studio

Durante a manutenção de um sistema, deparei com objetos extensos e precisava validar as informações contidas neles. =(

Pensando nisso, resolvi criar um arquivo com extensão .xml desses arquivos preenchidos durante a execução do projeto. \o/

Isso, além de facilitar a minha análise, ajudaria também a análise da equipe responsável pelo serviço que receberia esse objeto.

Vamos primeiro estruturar o projeto que será usado para gerar e preencher o objeto da figura 1.

Classes

Figura 1 – Exibindo as classes.

Vamos começar?!

Criaremos um projeto, no Visual Studio clique no Menu File -> New Project -> C# -> Web -> ASP.NET Empty Web Application, escolha onde irá salvar, inclua um nome no projeto e clique no botão OK. O nome incluído “SalvandoObjetoEmXML”.

Adicionaremos três classes (listagens 1, 2 e 3). Para isso, clique com botão direito do mouse em cima do nome do projeto “SalvandoObjetoEmXML” -> escolha a opção ADD –> Class. Os nomes das classes serão: Aluno, Curso e Materia.

using System.Collections.Generic;

namespace SalvandoObjetoEmXML
{ 
 public class Aluno
 { 
 public string Nome { get; set; }
 
 public string Matricula { get; set; }

 public char Status { get; set; }

 public List<Curso> Cursos { get; set; }
 }
}

Listagem 1 – Exibindo a classe Aluno.

using System.Collections.Generic;

namespace SalvandoObjetoEmXML
{
 public class Curso
 {
 public int Codigo { get; set; }

 public string nome { get; set; }

 public string Descricao { get; set; }

 public List<Materia> materias { get; set; }
 }
}

Listagem 2 – Exibindo a classe Curso.

namespace SalvandoObjetoEmXML
{

 public class Materia
 {
 public int Codigo { get; set; }

 public string Nome { get; set; }

 public string Descricao { get; set; }
 }
}

Listagem 3 – Exibindo a classe Materia.

Adicionaremos uma página ao projeto. Para isso, clique com botão direito do mouse em cima do nome do projeto “SalvandoObjetoEmXML” -> escolha a opção ADD –> New Item –> Web Form. O nome incluído “CarregandoObjeto.aspx”.

Essa página não terá nenhum layout e somente carregará o objeto para que possamos gerar o arquivo .xml. A listagem 4 exibe a codificação desta página,

using System;
using System.Collections.Generic;

namespace SalvandoObjetoEmXML
{
 public partial class CarregandoObjeto : System.Web.UI.Page
 {
 protected void Page_Load(object sender, EventArgs e)
 {
 List<Aluno> alunosCadastrados = ListarAlunos();
 }

 private List<Aluno> ListarAlunos()
 {
 List<Aluno> Alunos = new List<Aluno>()
 { 
 new Aluno()
 {
 Matricula = "124A",
 Nome = "Fernanda Sallai",
 Status = 'A',
 Cursos = new List<Curso>()
 {
 new Curso
 {
 Codigo = 1,
 nome = "Sistemas de Informacao",
 Descricao = "Informática",
 materias = new List<Materia>()
 {
 new Materia 
 {
 Codigo = 1,
 Nome = "Raciocinio Logico",
 Descricao = ""
 },
 new Materia
 {
 Codigo = 3,
 Nome = "Redes",
 Descricao = "Infraestrutura"
 }, 
 new Materia
 {
 Codigo = 9,
 Nome = "C#",
 Descricao = "Desenvolvimento"
 },
 new Materia
 {
 Codigo = 12,
 Nome = "Lógica de programação",
 Descricao = "Desenvolvimento"
 }
 } 
 }
 }
 },
 new Aluno()
 {
 Matricula = "200A",
 Nome = "Victor Pennella",
 Status = 'A',
 Cursos = new List<Curso>()
 {
 new Curso
 {
 Codigo = 2,
 nome = "Admistracao de Redes",
 Descricao = "Informática - infra",
 materias = new List<Materia>()
 {
 new Materia 
 {
 Codigo = 1,
 Nome = "Raciocinio Logico",
 Descricao = ""
 },
 new Materia
 {
 Codigo = 3,
 Nome = "Redes",
 Descricao = "Infraestrutura"
 },
 new Materia
 {
 Codigo = 5,
 Nome = "Java",
 Descricao = "Desenvolvimento"
 },
 new Materia
 {
 Codigo = 7,
 Nome = "Hardware",
 Descricao = "Infraestrutura"
 },
 new Materia
 {
 Codigo = 20,
 Nome = "Linux",
 Descricao = "Infraestrutura"
 }
 } 
 }
 }
 }
 };

 return Alunos;
 }
 }
}

Listagem 4 – Exibindo o código da página.

Pronto.. Estrutura do projeto realizada. Podemos voltar ao objetivo deste post \o/

Antes de executar o projeto, inclua um “breakpoint” no trecho do código “return Alunos” e assim que a execução do código parar no “breakpoint”, clique com o botão esquerdo do mouse em cima do objeto “Alunos” e escolha a opção “Add Watch” conforme figura 2.

salvandoObjeto_figura0

Figura 2 – Escolhendo a opção “Add Watch”.

Na janela “Immediate” do Visual Studio será exibido o retorno de 2 alunos e ao expandir um deles (figura 3) serão exibidas suas informações.

salvandoObjeto_figura7

Figura 2 – Exibindo informações do aluno.

Agora que estamos conseguindo popular o objeto, podemos gerar o arquivo .xml dele. =D

Na janela “Immediate” do Visual Studio vamos digitar o código da listagem 5 substituindo a palavra “VARIAVEL” pelo objeto que precisa gerar o arquivo, nesse caso iremos alterar pelo objeto “Alunos” (figura 3) e clicar o “enter”.

new System.Xml.Serialization.XmlSerializer(VARIAVEL.GetType()).Serialize(new System.IO.StreamWriter(@"C:\temp\DebugVariable.xml"), VARIAVEL);

Listagem 5 – Gerando o XML.

salvandoObjeto_figura2

Figura 3 – Digitando código na janela “Immediate” do Visual Studio.

O arquivo será gerado no caminho que foi especificado, nesse caso na pasta “C:\temp” (figura 4).

salvandoObjeto_figura3

Figura 4 – Exibindo arquivo gerado.

A listagem 6 exibe o arquivo gerado.

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfAluno xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <Aluno>
 <Nome>Fernanda Sallai</Nome>
 <Matricula>124A</Matricula>
 <Status>65</Status>
 <Cursos>
 <Curso>
 <Codigo>1</Codigo>
 <nome>Sistemas de Informacao</nome>
 <Descricao>Informática</Descricao>
 <materias>
 <Materia>
 <Codigo>1</Codigo>
 <Nome>Raciocinio Logico</Nome>
 <Descricao />
 </Materia>
 <Materia>
 <Codigo>3</Codigo>
 <Nome>Redes</Nome>
 <Descricao>Infraestrutura</Descricao>
 </Materia>
 <Materia>
 <Codigo>9</Codigo>
 <Nome>C#</Nome>
 <Descricao>Desenvolvimento</Descricao>
 </Materia>
 <Materia>
 <Codigo>12</Codigo>
 <Nome>Lógica de programação</Nome>
 <Descricao>Desenvolvimento</Descricao>
 </Materia>
 </materias>
 </Curso>
 </Cursos>
 </Aluno>
 <Aluno>
 <Nome>Victor Pennella</Nome>
 <Matricula>200A</Matricula>
 <Status>65</Status>
 <Cursos>
 <Curso>
 <Codigo>2</Codigo>
 <nome>Admistracao de Redes</nome>
 <Descricao>Informática - infra</Descricao>
 <materias>
 <Materia>
 <Codigo>1</Codigo>
 <Nome>Raciocinio Logico</Nome>
 <Descricao />
 </Materia>
 <Materia>
 <Codigo>3</Codigo>
 <Nome>Redes</Nome>
 <Descricao>Infraestrutura</Descricao>
 </Materia>
 <Materia>
 <Codigo>5</Codigo>
 <Nome>Java</Nome>
 <Descricao>Desenvolvimento</Descricao>
 </Materia>
 <Materia>
 <Codigo>7</Codigo>
 <Nome>Hardware</Nome>
 <Descricao>Infraestrutura</Descricao>
 </Materia>
 <Materia>
 <Codigo>20</Codigo>
 <Nome>Linux</Nome>
 <Descricao>Infraestrutura</Descricao>
 </Materia>
 </materias>
 </Curso>
 </Cursos>
 </Aluno>
</ArrayOfAluno>

Listagem 6 – Exibindo o xml gerado.

Disponibilizo o projeto desenvolvido no Visual Studio 2012 em C#: SalvandoObjetoEmXML

Incluindo calendário usando jQuery

Neste post iremos aprender como adicionar um calendário na página asp.net usando jquery e algumas funcionalidades disponíveis .

Vamos começar?!

Criaremos um projeto, no Visual Studio clique no Menu File -> New Project -> C# -> Web -> ASP.NET Empty Web Application, escolha onde irá salvar, inclua um nome no projeto e clique no botão OK. O nome incluído “IncluindoCalendario”.

Adicionaremos uma página ao projeto. Para isso, clique com botão direito do mouse em cima do nome do projeto “IncluindoCalendario” -> escolha a opção ADD –> New Item –> Web Form. Manterei o nome padrão “WebForm1.aspx”.

Incluiremos um “textbox” informando apenas o valor do  ID = “txtData” na página “WebForm1.aspx” conforme listagem 1.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="IncluindoCalendario.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 <title></title>
</head>
<body>
 <form id="form1" runat="server">
 <div>
 <asp:TextBox ID="txtData" runat="server"></asp:TextBox>
 </div>
 </form>
</body>
</html>

Listagem 1 – Código inicial da página.

O layout ficará conforme figura 1.

calendario_figura1

Figura 1 – Exibindo layout inicial.

Precisamos referenciar a biblioteca “JQuery UI” relacionada ao calendário dentro das tags “<Head></Head>” conforme listagem 2.

<head runat="server">
 <title></title>
 <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.0/themes/base/jquery-ui.css" />
 <script src="http://code.jquery.com/jquery-1.8.2.js"></script>
 <script src="http://code.jquery.com/ui/1.9.0/jquery-ui.js"></script>
</head>

Listagem 2 – Incluindo as referências.

Agora é só incluir um script para exibir o calendário.

  • Para exibir o calendário ao clicar no textbox:

Inclua o script javascript da listagem 3 abaixo da tag “</html>”.

<script>
 $(function () {
 $("#txtData").datepicker();
 });
</script>

Listagem 3 – Incluindo script js.

Execute o projeto.  O calendário será exibido ao clicar no “textbox” conforme figura 2. calendario_figura2

Figura 2 – Exibindo calendário.

  • Para exibir o calendário ao clicar na imagem ao lado do “textbox”:

Criaremos uma pasta de imagens ao projeto. Para isso, clique com botão direito do mouse em cima do nome do projeto “IncluindoCalendario” -> escolha a opção ADD –> NewFolder e nomeie para “Imagens”. Adicione uma imagem de calendário, de sua escolha, dentro dessa pasta. A minha imagem está nomeada como “calendario.gif”

Incluiremos o script javascript da listagem 4 abaixo da tag “</html>”.

<script>
    $(function () {
        $("#txtData").datepicker({
            showOn: "button",
            buttonImage: "Imagens/calendario.gif",
            buttonImageOnly: true           
        });
    });
</script>

Listagem 4 – Incluindo js.

Execute o projeto.  O calendário será exibido ao clicar na imagem do calendário conforme figura 3.

calendario_figura3 Figura 3 – Exibindo calendário.

Algumas funcionalidades que já utilizei referente ao calendário:

  • Definir formato de data: 

O formato escolhido será: “dia/mês/ano” por exemplo: 18/07/2016 através do dateFormat conforme listagem 5.

<script>
    $(function () {
        $("#txtData").datepicker({
            showOn: "button",
            buttonImage: "Imagens/calendario.gif",
            buttonImageOnly: true,
            dateFormat: 'dd/mm/yy'
        });
    });
</script>

Listagem 5 – Adicionando o formato da data.

Execute o projeto.  O formato da data ficará conforme figura 4.

calendario_figura4

 Figura 4 – Exibindo formato de data.

  • Traduzir os textos exibidos: 

Para os textos referente aos meses usaremos: dayNames, dayNamesMin, dayNamesShort, monthNames, monthNamesShort conforme listagem 6.

$("#calendario").datepicker({
        dateFormat: 'dd/mm/yy',
        dayNames: ['Domingo','Segunda','Terça','Quarta','Quinta','Sexta','Sábado','Domingo'],
        dayNamesMin: ['D','S','T','Q','Q','S','S','D'],
        dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb','Dom'],
        monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
        monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez']

Listagem 6 – Traduzindo texto.

Execute o projeto.  O texto será exibido conforme figura 5.

calendario_figura5

 Figura 5 – Exibindo texto traduzido.

  • Permitir escolher outro mês e ou ano: 

Atribuiremos o valor “true” para changeMonth e changeYear conforme listagem 7.

$("#calendario").datepicker({
        dateFormat: 'dd/mm/yy',
        dayNames: ['Domingo','Segunda','Terça','Quarta','Quinta','Sexta','Sábado','Domingo'],
        dayNamesMin: ['D','S','T','Q','Q','S','S','D'],
        dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb','Dom'],
        monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
        monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'],
	changeMonth: true,
        changeYear: true

Listagem 7 – Habilitando a seleção de outro mês e ano.

Execute o projeto.  O texto será exibido conforme figura 6.

calendario_figura6

 Figura 6 – Exibindo seleção do mês e ano.

Existem outras funcionalidades, caso interessem, disponibilizo o link da documentação oficial http://api.jqueryui.com/datepicker/

Disponibilizo o projeto desenvolvido no Visual Studio 2012 em C#: IncluindoCalendario

Report Viewer – criando e usando uma função

Após a criação do post Report Viewer – Formatando CNPJ e CPF dentro da tabela , o Rodrigo me questionou em um comentário que se o campo CNPJ não viesse preenchido, o campo exibia “#erro” conforme figura 1.

criandoFuncao_figura2

Figura 1 – Exibindo “#erro”.

Para tentar solucionar, tentei colocar uma condição “iif” verificando se o campo fosse diferente de vazio “string.empty” realizasse a formatação conforme listagem 1.

=iif(Fields!cnpj.Value <> string.Empty, Format(Int(Fields!cnpj.Value), "00\.000\.000\/0000\-00"), "")

Listagem 1 – Exibindo condição.

Mas ainda continuou dando o mesmo “#erro” da figura 1. Fiz um teste para ver se a condição estava com algum problema, então retirei o “format”. Alterei o código retirando o comando “Format” e somente validei se o valor for diferente de vazio “String.Empty” exiba o valor do campo, caso contrário, exiba o texto “Em branco” conforme listagem 2.

=iif(Fields!cnpj.Value <> string.Empty, Fields!cnpj.Value, "Em branco")

Listagem 2 – Exibindo a alteração do código.

Ao executar, notamos que não será mais exibido o #erro conforme figura 2.

criandoFuncao_figura3

Figura 2 – Exibindo com a alteração do código.

Então a condição estava correta, porém notei que o a função “Format” estava impactando na condição “iif“. =(

Achei uma forma diferente de resolver o problema. Valeu pelo aprendizado, pois aprendi que posso criar minhas funções e chamá-las no relatório. Mas, caso alguém saiba como resolver para que o código da listagem 1 exiba sem o #erro, deixe seu comentário nesse post. =)

Este post não ensinará como criar um relatório usando Report Viewer. O objetivo desse post é mostrar como criar uma função e chamá-la no  campo dentro da tabela.

 Vamos começar ?!

A minha tabela terá dois campos: Código e CNPJ conforme figura 3.

criandoFuncao_figura4

Figura 3 – Exibindo os campos da tabela.

No meu caso, o campo “CNPJ” terá uma função criada para formatação conforme listagem 3.

Public Function FormatarCNPJ(Valor As String) As String

 If Trim(Valor) = "" Then 
 'o campo informado já está formatado ou é vazio
 FormatarCNPJ = "Em branco"
 
 Else
 'CNPJ
 FormatarCNPJ = Format(Int(Valor), "00\.000\.000\/0000\-00")
 
 End If

End Function

Listagem 3 – Exibindo a minha função para formatar o CNPJ.

Essa função será adicionada no “code” que está nas propriedades do relatório. Para isso, clique com o botão direito do mouse no corpo do relatório -> opção “Report Properties…” (figura 4),

criandoFuncao_figura5

Figura 4 – Clicando na opção “Report Properties…”

Na opção “Code”, cole o código criado na caixa “Custom code” (figura 5).

criandoFuncao_figura6

Figura 5 – Adicionando a função criada.

Vamos voltar ao campo “CNPJ” e incluir a expressão da listagem 4.

=code.FormatarCNPJ(cstr(Fields!cnpj.Value))

Listagem 4 – Incluindo a expressão no campo “CNPJ”.

Pronto. Ao executar será exibido o resultado da figura 6.

criandoFuncao_figura7

Figura 6 – Exibindo resultado.

Disponibilizo o projeto desenvolvido no Visual Studio 2012 em C#: CriandoRelatorio

SQL – Criando procedure com parâmetro opcional

Esses dias desenvolvendo uma tela de cadastro/alteração de usuários de um sistema, me deparei que na funcionalidade de pesquisa poderia ser informado ou não determinada informação para a busca de usuários.

Pensando.. E agora ??? E após umas pesquisas…

Usei parâmetros opcionais na procedure que busca os usuários. \o/ Se informar o parâmetro exibirá somente o usuário correspondente, caso contrário, exibirá todos os usuários cadastrados.

Resolvi escrever este post para outras pessoas que poderiam estar passando por um momento parecido, então vou compartilhar para que possa ajudar mais alguém. =D

Vamos começar ?!

Usarei o banco de dados  Adventure Works 2014 em SQL Server. Caso não tenham instalado, podem consultar o post Instalando o banco de dados Adventure Works 2014

A procedure que será criada listará nome e código de todos os produtos ou, se informado o código, o produto especifico.

O nome da procedure será “ListarProdutos” (Listagem 1).

use AdventureWorks2014
go
-- ============================================================
-- Author:		Fernanda Sallai
-- Create date: 18/03/2016
-- Description:	Listar código e nome dos produtos cadastrados
-- ============================================================
CREATE PROCEDURE ListarProdutos  
	-- o parâmetro será incluido aqui	
AS
BEGIN
    -- a consulta será incluida aqui	
END
GO

Listagem 1 – Exibindo a estrutura inicial da procedure.

Usaremos a tabela “Production.Product” e os respectivos campos: “ProductID” e “Name” (Listagem 2).

use AdventureWorks2014
go
-- ============================================================
-- Author:		Fernanda Sallai
-- Create date: 18/03/2016
-- Description:	Listar código e nome dos produtos cadastrados
-- ============================================================
CREATE PROCEDURE ListarProdutos  
	-- o parâmetro será incluido aqui	
AS
BEGIN
    SELECT ProductID as CODIGO
       , Name as NOME 
	FROM Production.Product		
END
GO

Listagem 2 – Adicionando a instrução para exibir todos os produtos.

Se parássemos na listagem 2, a instrução da procedure exibirá como resultado: o código e o nome de todos os produtos cadastrados.

Porém.. entretanto.. Vamos continuar porque queremos ter a opção de buscar o produto pelo código informado.

O parâmetro a ser recebido será o campo “ProductID“. Declararemos  uma variável do tipo inteiro chamada “codigo. Porém como será opcional, atribuiremos “null” (Listagem 3).

use AdventureWorks2014
go
-- ============================================================
-- Author:		Fernanda Sallai
-- Create date: 18/03/2016
-- Description:	Listar código e nome dos produtos cadastrados
-- ============================================================
CREATE PROCEDURE ListarProdutos  
(	
	@codigo int = null
)	
AS
BEGIN
    SELECT ProductID as CODIGO
       , Name as NOME 
	FROM Production.Product		
END
GO

Listagem 3 – Adicionando o parâmetro opcional.

Para finalizar precisamos incluir a condição na instrução “select”. A condição “where” buscará o produto conforme código informado ou se o campo não for informado, este não existirá para a consulta e serão exibidos todos os produtos cadastrados.

use AdventureWorks2014
go
-- ============================================================
-- Author:		Fernanda Sallai
-- Create date: 18/03/2016
-- Description:	Listar código e nome dos produtos cadastrados
-- ============================================================
CREATE PROCEDURE ListarProdutos 
(	
	@codigo int = null
)
AS

BEGIN
	SELECT ProductID as CODIGO
       , Name as NOME 
	FROM Production.Product	
	WHERE (ProductID = @codigo OR @codigo is null)
END
GO

Listagem 4 – Adicionando a condição na procedure.

Pronto. Vamos executar a procedure no SQL Server Management para verificarmos os resultados.

 Primeira execução: Informando o código do produto (Figuras 1 e 2)

varivelOpcional_figura3

Figura 1 – Informando o código do produto.

varivelOpcional_figura4

Figura 2 – Resultado obtido.

Segunda execução: Não informando o código (Figuras 3 e 4).

varivelOpcional_figura1

Figura 1 – Não informando o código do produto.

varivelOpcional_figura2

Figura 4 – Resultado obtido.

Report Viewer – usando gráfico

Pessoal,

Report Viewer é um recurso que integrado ao Visual Studio permite a criação de relatórios. Os primeiros passos de como se criar um relatório pode ser visualizado no post http://www.fernandasallai.com.br/?p=1925.

O objetivo desse post é mostrar como incluir gráfico no relatório.

Utilizaremos um  relatório pronto que possui três colunas conforme figura 1.

 UsandoGrafico_figura1

Figura 1 – Exibindo o relatório.

O gráfico exibirá os cursos existentes e a quantidade de alunos para cada curso.

 Vamos iniciar a inclusão do gráfico ?!

Existem duas formas de adicionar o gráfico no relatório:

  1. Clique com o botão direito do mouse no relatório e escolha a opção “Insert” -> “Chart” (figura 2)
  2. Arraste o componente “Chart” contido na toolbox

UsandoGrafico_figura2

Figura 2 – Adicionando opção “Chart”.

Serão exibidos vários tipos de gráficos (figura 3). Escolheremos o primeiro gráfico do tipo “Column” (figura 4).

UsandoGrafico_figura3

Figura 3 – Exibindo tipos de gráfico.

UsandoGrafico_figura4

Figura 4 – Exibindo o gráfico escolhido.

Duplo clique do mouse em cima do gráfico será exibida as opções para inserir as informações que aparecerão no gráfico.

Nesse caso, o campo “values” será a quantidade de pessoas por curso e o “Series Groups” os tipos de cursos existentes (figura 5).

UsandoGrafico_figura5

Figura 5 – Exibindo informações do gráfico.

OBS: para o campo “values” usaremos a expressão conforme figura 6.

UsandoGrafico_figura7

Figura 6 – Exibindo a expressão do campo “values”.

Pronto. Vamos executar o projeto e o resultado será conforme a figura 7.

UsandoGrafico_figura8

Figura 7 – Exibindo relatório e o gráfico.

Disponibilizo o projeto desenvolvido no Visual Studio 2012 em C#: CriandoRelatorio

Acesso ao Pluralsight por 6 meses

Pluralsight disponibiliza cursos muito bons, porém é necessário pagar para acessá-los.

Através da dica de um amigo fiquei sabendo que estão disponibilizando código de ativação para acessar por 6 meses gratuito. \o/

Acesse o site: https://www.visualstudio.com/

Clique na opção “Ingressar agora” figura 1.

plural_figura1

Figura 1 – Ingressar agora.

Informe seus dados de acesso “Microsoft” na figura 2.

plural_figura2

Figura 2 – Informando dados de acesso.

Encontrará a opção para ativar o código conforme figura 3.

plural_figura3

Figura 3 – Opção disponilizada.

Após ativar o código prossiga com o cadastro e demais etapas que pedirem.

Aproveitem e bons estudos =D

Criando e usando o DataTable

Neste post iremos aprender como criar o DataTable e usá-lo para popular GridView e ListBox.

OBS: Para simplificar, o DataTable será criado com dados fixos no código. Não buscarei nenhuma informação no banco de dados.

DataTable representa uma tabela de dados que será alocada em memória e serve para popular componentes asp.net ou usar as informações em algum lugar do código.

Vamos começar?!

Criaremos um projeto, no Visual Studio clique no Menu File -> New Project -> C# -> Web -> ASP.NET Empty Web Application, escolha onde irá salvar, inclua um nome no projeto e clique no botão OK. O nome incluído “usandoDataTable”.

Adicionaremos uma página ao projeto. Para isso, clique onde deseja inclui-la com botão direito do mouse em cima do nome do projeto “usandoDataTable” -> escolha a opção ADD –> New Item –> Web Form. Manterei o nome padrão “WebForm1.aspx”.

  •  “WebForm1.aspx”

Incluiremos um GridView e um ListBox para receber os dados do DataTable, o layout ficará conforme listagem 1.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="usandoDataTable.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>



<form id="form1" runat="server">



<div>



<h1>Populando GridView</h1>



            <asp:GridView ID="GridView1" runat="server"></asp:GridView>
        </div>



        



<div>



<h1>Populando ListBox</h1>



            <asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
        </div>



 
    </form>



</body>
</html>

Listagem 1 – Layout da página.

  •  “WebForm1.aspx.cs”

Iremos começar a codificação.

  • Criando o DataTable

Para usarmos o DataTable será necessário usar o namespace Data conforme listagem 2.

// Namespace para o datatable
using System.Data;

Listagem 2 – Informando namespace Data.

A listagem 3 exibe o código comentado do DataTable criado.

// Instanciando DataTable
DataTable dados = new DataTable();

// Criando as colunas
dados.Columns.Add("Código");
dados.Columns.Add("Nome");

// Criando linhas
dados.Rows.Add("1", "Fernanda");
dados.Rows.Add("2", "Victor");

Listagem 3 – Criando DataTable.

Pronto… DataTable criado… Vamos usá-lo \o/

  • Populando GridView usando DataTable

O código ficará conforme listagem 4.

// Populando GridView
GridView1.DataSource = dados;
GridView1.DataBind();

Listagem 4 – Populando GridView usando dados do DataTable.

Ao executar o projeto teremos o resultado da figura 1.

DataTable_figura1

Figura 1 – Exibindo GridView.

  • Populando ListBox usando DataTable

O código ficará conforme listagem 5.

// Populando ListBox
for (int i = 0; i &amp;amp;lt; dados.Rows.Count; i++)
{                
   ListItem item = new ListItem();

   // linha referente a coluna "Nome"
   item.Text = dados.Rows[i].ItemArray.GetValue(1).ToString();

   // linha referente a coluna "Código"
   item.Value = dados.Rows[i].ItemArray.GetValue(0).ToString();

   ListBox1.Items.Add(item);
}

Listagem 5 – Populando ListBox usando dados do DataTable.

Ao executar o projeto teremos o resultado da figura 2.

DataTable_figura2

Figura 2 – Exibindo ListBox.

A listagem 6 contém o código completo da página “WebForm1.aspx.cs”.

using System;
using System.Collections.Generic;
// Namespace para o datatable
using System.Data;
using System.Web.UI.WebControls;

namespace usandoDataTable
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // Instanciando DataTable
            DataTable dados = new DataTable();

            // Criando as colunas
            dados.Columns.Add("Código");
            dados.Columns.Add("Nome");

            // Criando linhas
            dados.Rows.Add("1", "Fernanda");
            dados.Rows.Add("2", "Victor");

            // Populando GridView
            GridView1.DataSource = dados;
            GridView1.DataBind();

            // Populando ListBox
            for (int i = 0; i &amp;lt; dados.Rows.Count; i++)
            {                
                ListItem item = new ListItem();

                // linha referente a coluna "Nome"
                item.Text = dados.Rows[i].ItemArray.GetValue(1).ToString();

                // linha referente a coluna "Código"
                item.Value = dados.Rows[i].ItemArray.GetValue(0).ToString();

                ListBox1.Items.Add(item);
            }

        }
    }
}

Listagem 6 – Código completo da página “WebForm1.aspx.cs”.

Disponibilizo o projeto desenvolvido no Visual Studio 2012 em C#: usandoDataTable

Validando formato de e-mail através de Expressão Regular (regex)

Podemos entender “expressão regular como o brinquedo LEGO, com várias pecinhas diferentes, e cada uma com sua característica, que juntas compõem estruturas completas e podem ser arranjadas com infinitas combinações diferentes”. Aurelio Marinho Jargas

Aurelio é autor de um livro (figura 1) bem didático e que super recomendo para quem quer se aprofundar no assunto de uma maneira divertida.

Livro_ExpressaoRegular_Aurelio

Figura 1 – Livro de expressão regular indicado.

O objetivo deste post é ensinar como validar se o campo informado corresponde possui um formato correto de e-mail usando a expressão regular. Salientando que essa é uma das inúmeras formas de realizar essa verificação.

Passo 1: Criando a expressão

A expressão regular que utilizei foi: “^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$” e vamos entendê-la por pedaços:

  • ^[A-Za-z0-9] -> indica:
    •  corresponde ao início da linha
    • [ ]” -> uma lista de
      • A-Za-z” -> letras maiúsculas e/ou minusculas   
      • 0-9 -> números.  

O primeiro carácter deve ser número ou letra maiúscula ou letra minuscula.

  • (([_\.\-]?[a-zA-Z0-9]+)*) -> indica:
    • ( )” -> um grupo
    • [_\.\-]” -> uma lista de “underline”, “ponto final” e “hífen”
    • ?” -> opcional (pode ou não conter o conteúdo anterior ao “?”)
    • [a-zA-Z0-9] -> lista contendo: letra maiúscula/minuscula e número
    • + -> o conteúdo anterior ao “+” deve aparecer no mínimo 1 vez
    • *” deixa repetir em qualquer quantidade. Nesse caso poderá ter um, vários, infinitos números.

OBS: a diferença entre o “*” e o “+” é que se usar o “+” o conteúdo deve aparecer pelo menos 1 vez.

Pode ter ou não os caracteres: “_”, “.” e “-“. Pelo menos 1 ou mais números ou letras maiúscula e/ou minuscula. Isso tudo pode ser repetido em qualquer quantidade.

  • @ -> deve ter um “@”.
  • \.([A-Za-z]{2,} -> indica:
    • “\.” -> essa barra antes do “.” está aparecendo para dizer que nesse caso interpretaremos como ponto final mesmo. No REGEX, o ponto final também pode ter uma função diferente, mas não entraremos nesse detalhe aqui.
    • “[A-Za-z]” -> lista contendo: letra maiúscula/minuscula
    • “{2,}” -> e essa lista (acima) deve ter no mínimo 2 caracteres.

Deve ter um ponto final seguido de pelo menos 2 letras maiúsculas e/ou minusculas.

  •  “$” corresponde ao final da linha.

Passo 2: Testando a expressão criada

Para testar as expressões regulares utilizo uma ferramenta online gratuita chamada Regex Tester disponível através da url: http://regexpal.com/  (figuras 2 e 3).

validacaoEmail_figura2

Figura 2 – O valor informado tem formato válido de e-mail.

OBS: Esse não é meu e-mail. =)

validacaoEmail_figura1

Figura 3 – O valor informado não é somente número.

Passo 3: Usando a expressão criada

Criei um projeto no Visual Studio 2012. Para criar o projeto clique em File > New Project > escolha C# > Windows > Windows Forms Application e nomeie como ValidandoEmail.

A figura 4 exibe o layout que foi criado.

validacaoEmail_figura3Figura 4 – Exibindo layout.

A listagem 1 exibirá o código comentado.

using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace ValidandoEmail
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Se o for formato de e-mail for válido
            if (IsEmail(textBox1.Text))
                MessageBox.Show("Formato de e-mail correto.");
            // Se não for 
            else
                MessageBox.Show("Informe um formato válido de e-mail.");
        }

        ///
<summary>
        /// Validar o formato do e-mail
        /// </summary>

        /// <param name="valorInformado">valor informado</param>
        /// <returns>true se for um formato válido. Caso contrário, retornará false</returns>
        public bool IsEmail(string valorInformado)
        {
            return Regex.IsMatch(valorInformado, @"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$");
        }
    }
}

Listagem 1 – Exibindo código.

Executando o projeto

Ao executar o projeto, os possíveis resultados conforme figuras 5 ou 6.

validacaoEmail_figura4

Figura 5 – Se o valor informado tem um formato válido de e-mail.

validacaoEmail_figura5

Figura 6 – Se o valor informado não tem formato válido de e-mail.

Disponibilizo o projeto desenvolvido no Visual Studio 2012 em C#: ValidandoEmail

Exemplos de templates (modelos) disponibilizados no SQL

O SQL Server Management Studio disponibiliza  alguns modelos de templates que exibem a estrutura de comandos em SQL, como por exemplo, para criação de tabelas, banco de dados, tabelas, etc com inclusão ou não de parâmetros e até mesmo nos possibilita criar novos modelos.

Esses modelos estão disponíveis no barra chamada “Template Explorer” e existem duas formas para visualizá-los:

  • Menu View -> opção “Template Explorer” conforme figura 1.

templateExplorer_figura1

Figura 1 – Através do menu View.

  • Teclas de atalho: CTRL+ALT+T.

A figura 2 exibe as categorias existentes.

templateExplorer_figura2

Figura 2 – Exibindo “Template Explorer”.

Escolhendo, por exemplo, a categoria “Table” serão exibidos os modelos disponíveis conforme figura 3.

templateExplorer_figura3

Figura 3 – Exibindo modelos da categoria “Table”.

Abrindo o modelo “Create Table” será exibida a estrutura para a criação de uma tabela conforme listagem 1.

-- =========================================
-- Create table template
-- =========================================
USE <database, sysname, AdventureWorks>
GO

IF OBJECT_ID('<schema_name, sysname, dbo>.<table_name, sysname, sample_table>', 'U') IS NOT NULL
  DROP TABLE <schema_name, sysname, dbo>.<table_name, sysname, sample_table>
GO

CREATE TABLE <schema_name, sysname, dbo>.<table_name, sysname, sample_table>
(
	<columns_in_primary_key, , c1> <column1_datatype, , int> <column1_nullability,, NOT NULL>, 
	<column2_name, sysname, c2> <column2_datatype, , char(10)> <column2_nullability,, NULL>, 
	<column3_name, sysname, c3> <column3_datatype, , datetime> <column3_nullability,, NULL>, 
    CONSTRAINT <contraint_name, sysname, PK_sample_table> PRIMARY KEY (<columns_in_primary_key, , c1>)
)
GO

Listagem 1 – Exibindo template para criação de tabela.

É possível informar os valores dos parâmetros conforme figura 4. Para acessar o formulário existe duas formas:

  • Menu Query  -> opção “Specify Values for Template Parameters” ou;
  • Teclas de atalho: CTRL+SHIFT+M

templateExplorer_figura4

Figura 4 – Alterando os valores dos parâmetros.

A listagem 2 exibe o modelo preenchido com os parâmetros informados.

-- =========================================
-- Create table template
-- =========================================
USE AdventureWorks
GO

IF OBJECT_ID('dbo.Estudos', 'U') IS NOT NULL
  DROP TABLE dbo.Estudos
GO

CREATE TABLE dbo.Estudos
(
	ID int NOT NULL, 
	nome varchar(100) NULL, 
	dataMatricula datetime NULL, 
    CONSTRAINT PK_estudos PRIMARY KEY (ID)
)
GO

Listagem 2 – Exibindo o modelo com os parâmetros informados.

 Agora só resta executar o comando =D

Ativar Windows Identity Foundation no Windows 8

Neste post não irei entrar em detalhes do que é e como funciona. O objetivo é ensinar como ativá-lo para o pessoal que está usando o Windows 8.

Uma breve descrição: É uma estrutura que dá suporte para autenticação e autorização de usuário da aplicação.

Maiores informações acesse: https://msdn.microsoft.com/en-us/library/ee748475.aspx. Achei muito bacana a explicação nesse vídeo https://www.youtube.com/watch?v=hJZBWxCagTo&list=PLMj6LwrAFbv479k0x1-uhTeQfPa-mTe3x.

Não estava conseguindo instalar o Windows Identity Foundation e descobri que ele já vem instalado no Windows 8 e que era somente necessário ativá-lo.

Para ativar existem duas formas:

  • 1ª forma: Pela opção “Programas e Recursos” -> Ativar ou desativar recursos do Windows e checar opção “Windows Identity Foundation 3.5” conforme figura 1.

identity_figura1

Figura 1 – Ativar pela opção de recursos do Windows.

  • 2ª forma: Pelo prompt de comando (CMD) usando o comando da listagem 1.
dism.exe /online /enable-feature /featurename=Windows-Identity-Foundation

Listagem 1 – Exibindo comando para ativação.

O resultado seria conforme a figura 2.

identity_figura2

Figura 2 – Ativar pelo prompt de comando (CMD).