C# - Manipulando XML

Publicado 21/6/2011 por fernandasallai em C#

Olá Pessoal =D

Hoje iremos aprender na prática algumas das funções básicas para criação e manipulação de XML.

Neste post não irei explicar a parte teórica, mas deixo como sugestão o link http://www.w3schools.com/xml/default.asp

 

Vamos começar?!

 

Para criar um projeto clique em File - New Project - ConsoleApplication  e informe o nome e o local que o projeto ficará (listagem e figura 1).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace AprenderXML
{
    class Program
    {
        static void Main(string[] args)
        {                      

            // Tela fica no aguardo de clicar em alguma tecla para fechar
            Console.ReadKey();
        }
    }
}

Listagem 1 - Codificação inicial. 

Figura 1 - Exibindo tela com codificação inicial. 

 

Vamos codificar?!

 

Importante: Os códigos deverão ser incluídos dentro método Main com exceção do namespace (este será incluído junto com os demais namespaces).

O namespace para trabalhar com XML na listagem 2.

using System.Xml;

Listagem 2 - Incluindo namespace

Na listagem 3 criaremos um documento XML.

XmlDocument xmlDocument = new XmlDocument();

Listagem 3 - Criando um documento XML.

Vamos criar uma variável do tipo XmlNode para criarmos os elementos (nó) do documento xml (listagem 4).

XmlNode node;

Listagem 4 - Criando uma variável XMLNode.

Criaremos nosso nó raiz no documento XML conforme listagem 5 e figura 2.

// Criando um nó raiz
 node = xmlDocument.CreateElement("Aluno");

 // Adicionando o nó no documento
 xmlDocument.AppendChild(node);

Listagem 5 - Criando o nó raiz. 

Figura 2 - Exibindo o nó raiz. 

Incluiremos um nó dentro do nó raiz (listagem 6 e figura 3).

// Criando um nó chamado Nome
node = xmlDocument.CreateElement("Nome");

// Atribuido valor ao nó Nome
node.InnerText = "Fernanda";

// Adicionando o nó dentro no nó Aluno
xmlDocument.SelectSingleNode("/Aluno").AppendChild(node);

Listagem 6 - Incluindo nó dentro do nó raiz.

Figura 3 - Exibindo o nó dentro do nó raiz. 

Incluiremos um nó dentro do nó Nome na listagem 7 e figura 4.

// Criando um nó chamado Sobrenome
node = xmlDocument.CreateElement("Sobrenome");

// Atribuido valor ao nó Sobrenome
node.InnerText = "Sallai";

// Adicionando o nó dentro do nó Nome que está dentro do nó aluno
xmlDocument.SelectSingleNode("/Aluno/Nome").AppendChild(node);

Listagem 7 - Incluindo nó dentro do nó Nome. 

Figura 4 -  Exibindo mais um nó criado.

Salvando o xml informando o local e o nome que irá salvar (listagem 8).

xmlDocument.Save("C:/ProjetosDeEstudo/alunos.xml");

Listagem 8 - Salvando o xml.

Carregando um XML já existente conforme listagem 9.

xmlDocument.Load("C:/ProjetosDeEstudo/alunos.xml");

Listagem 9 - Carregando XML existente. 

InnerXml e OuterXml

Ambos mostram a estrutura completa do XML e podemos usá-los dessa forma (listagem 10 e figura 5).

Console.WriteLine(xmlDocument.InnerXml + Environment.NewLine);
Console.WriteLine(xmlDocument.OuterXml + Environment.NewLine);

Listagem 10 - Carregando a estrutura completa do XML.

Figura 5 - Exibindo a estrutura do XML.

Porém se diferenciam quando selecionamos a partir de um nó.  Veja a listagem 11 e a figura 6.

// OuterXml -> traz o nó aluno e o que tem dentro dele
Console.WriteLine(xmlDocument.SelectSingleNode("/Aluno").OuterXml + Environment.NewLine);

// InnerText -> traz só o que está dentro do nó aluno
Console.WriteLine(xmlDocument.SelectSingleNode("/Aluno").InnerXml + Environment.NewLine);

Listagem 11 - Carregando estrutura a partir de um nó selecionado. 

Figura 6 - Exibindo a estrutura do XML a partir do nó selecionado.

Para trazer somente o texto que está no nó (listagem 12 e figura 7). 

 //InnerText -> somente o texto
 Console.WriteLine(xmlDocument.InnerText);

Listagem 12 - Carregando somente o texto do(s) nó(s). 

Figura 7 - Exibindo somente o texto do(s) nó(s). 

 

Viu como não é tão dificil manipular XML ?!

Até o próximo post. Ah.. E não esqueça de comentar. Seu comentário ajuda a melhorar ainda mais os posts.

Obrigada =D 

Projeto disponível: AprenderXML.zip (23,13 kb)


C# - PadLeft e PadRight

Publicado 9/6/2011 por fernandasallai em C#

Galera,

 

PadLeft e PadRight são utilizados para preencher uma string (PadLeft   - preenche com caracter(es) a esquerda e PadRight - preenche com caracter(es) a direita). Por exemplo: o campo cliente terá 4 posições, então caso  o campo tenha 2 posições, o PadLeft preencherá com mais duas posições a esquerda (0021) e o PadRight com duas a direita (2100).  

 

Usado assim:

StringQueRecebera = StringQueContemValor.PadLeft(quantidadeDeCaracteres,'caracterQueSeraUsadoParaCompletarQuantidadeInformada')

 

Vamos começar?!

 

Nesse post, nosso campo terá 9 caracteres, caso o valor digitado no textbox não contenha 9 caracteres, será preenchido com zero até ser completada a quantidade.

OBS: a quantidade de caracteres e o caracter que preencherá até chegar a quantidade é de sua escolha, basta alterá-lo.

 

Para criar um projeto clique em File - New Project - Windows - Windows Forms Application e informe o nome e o local que o projeto ficará.

OBS: Iremos usar uma aplicação Windows Forms e C#, mas poderá ser realizado em uma aplicação Web e em outra linguagem com algumas modificações conforme a escolha.

Na figura 1 teremos o layout do nosso formulário (Form1.cs - Design).

Figura 1 - Layout do formulário (Form1.cs).

OBS: nomeie o TextBox - txtInformacao, Button   - btnOK, label Resultado1 - lblResultado1 e label Resultado2 - lblResultado2. 

A listagem 1 exibe a codificação comentada do form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PadLeft_PadRight
{
    public partial class Form1 : Form
    {
        // variável string para exibir o erro
        string mensagem = string.Empty;

        public Form1()
        {
            InitializeComponent();
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            // Se validar campos
            if (ValidaCampos())
            {
                // Preenche as labels com os valores formatados com 9 caracteres               

                lblResultado.Text = txtInformacao.Text.PadLeft(9, '0');

                lblResultado2.Text = txtInformacao.Text.PadRight(9, '0');
            }
            else
            {
                // Exibe mensagem de erro caso não preencha o campo
                MessageBox.Show("" + mensagem, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        /// 
        /// Validar preenchimento do campo
        /// 
        /// 
        private bool ValidaCampos()
        {
            bool camposPreenchidos = true;

            if (txtInformacao.Text == string.Empty)
            {
                mensagem = "Informe algo";

                camposPreenchidos = false;
            }          

            return camposPreenchidos;
        }
    }
}

Listagem 1 - Codificação do formulário.

Pronto... Vamos executar. F5 nele =D

Informe algo com menos de 9 caracteres conforme figura 2.

Figura 2 - Informando o valor.

Clicando no botão OK o resultado será conforme a figura 3.

Figura 3 - Exibido resultado.

Como digitei somente 2 caracteres, foi incluído mais sete (zeros) para completar os 9 caracteres.

OBS: Nesse exemplo digitei números, mas poderia usar letras etc, depende do que está sendo usado por você.

Espero que tenham gostado e até o próximo post.

Projeto disponível: PadLeft_PadRight.zip (40,53 kb) 


Aprenderemos hoje como adicionar uma folha de estilo (CSS) a uma página aspx.

Nesse post iremos criar uma página com o texto Adicionando CSS Dinamicamente e um botão para alterar a CSS padrão pela outra.

Vamos começar?!

Para criar um projeto clique em File - New Project - Web - Asp.Net Empty Web Application e informe o nome e o local que o projeto ficará.

Para adicionar uma página aspx clique no projeto com o botão direito do mouse - ADD - New New Item - Web Form e informe o nome da página.

A página aspx adicionada deverá ficar conforme listagem 1.

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

    <link type="text/css" href="CSS/Padrao.css" rel="Stylesheet" />
</head>
<body>
    <form id="frmAspNet" runat="server">
    <div>
        Adicionando CSS Dinamicamente        
    </div>
    <asp:Button ID="btnAlterar" runat="server" Text="Alterar CSS" onclick="btnAlterar_Click" />
    </form>
</body>
</html>

Listagem 1 - HTML da página.

Incluiremos 2 folhas de estilos com nomes: Padrao.CSS e Nova.CSS (listagens 2 e 3).

OBS: Crie uma pasta no projeto CSS e dentro dela inclua as CSS (Clique com o botão direito do mouse em cima da pasta CSS - ADD - New Item - Style Sheet e informe o nome)

body 
{
    color:Purple;
    font-size:12px;
}

Listagem 2 - CSS chamada Padrao

body 
{
    color:Blue;
    font-size: 24px;
}

Listagem 3 - CSS chamada Nova

Vamos incluir o método para alterar a CSS no evento Click do botão btnAlterar (listagem 4).

         /// 
        /// Alterando a CSS
        /// 
        /// sender
        /// e
        protected void btnAlterar_Click(object sender, EventArgs e)
        {
            //Atribuindo o head (cabeçalho da nossa página)
            HtmlHead head = this.Page.Header;

            //Instanciando um HTMLLink com o nome de link
            HtmlLink link = new HtmlLink();

            //Adicionando os atributos 
            link.Attributes.Add("type", "text/css");
            link.Attributes.Add("rel", "stylesheet");
            link.Attributes.Add("href", "/CSS/Nova.css");

            //Adicionando o link ao head (cabeçalho)
            head.Controls.Add(link);
        }

Listagem 4 - Método para alterar CSS

O HtmlHead e o HtmlLink necessitam do namespace (listagem 5):

using System.Web.UI.HtmlControls;

Listagem 5 - Incluindo namespace

Pronto! Agora vamos executar o código...

Ao iniciar será exibida a seguinda página (figura 1).

Figura 1 - Página inicial.

Ao clicar no botão alterar CSS será exibida a página com o seguinte estilo (figura 2).

Figura 2 - Página com nova css.

Por hoje é só pessoal. =D

Projeto disponível: AdicionandoCSSDinamicamente.rar (18,77 kb)


Neste post iremos aprender como carregar o nome de todas as impressoras que estão instaladas na nossa máquina em um ComboBox.

Vamos lá ?!

Crie um formulário e inclua um ComboBox com o nome ddlImpressora  figura 1.

Figura 1 : Formulário de seleção de impressoras.

A listagem 1 contém a codificação comentada passo a passo.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

// namespace PrinterSettings 
using System.Drawing.Printing;

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

            // Chamada do método para Carregar as impressoras instaladas
            CarregarImpressoras();
        }

        /// 
        /// Carregar impressoras instaladas
        /// 
        private void CarregarImpressoras()
        {
            // Inserindo um item chamado selecione 
            ddlImpressoras.Items.Insert(0, "SELECIONE");

            // Carregando as impressoras instaladas no ddlImpressoras
            foreach (string nomeImpressora in PrinterSettings.InstalledPrinters)
            {
                ddlImpressoras.Items.Add(nomeImpressora.ToUpper());
            }

            // Deixando o item Selecione selecionado.
            ddlImpressoras.SelectedIndex = 0;
        }
    }
}

Viu como é simples! Agora é só ver o resultado final (figura 2).

Figura 2: Exibindo as impressoras instaladas na máquina.

Até a próxima ...

Projeto disponível: CarregandoImpressorasInstaladas.rar (37,87 kb)


No sistema que estou desenvolvendo para o TCC, possui uma tela para listar os clientes ativos  num datagridview conforme abaixo:

Para abrir o formulário de visualização e ou alteração de um cliente basta selecioná-lo (conforme imagem a seguir) :

Após visualizar e ou alterar os dados do cliente, ao voltar para a tela de listagem de cliente, a linha do cliente escolhido deverá voltar selecionado como abaixo:

Porém o cursor está na primeira linha do datagridview....

Vamos resolver isso ?! (listagem 1)

datagridview.celulacorrente = datagridview.linhas[linhaselecionada].celulas[0];

dgvClientes.CurrentCell = dgvClientes.Rows[i].Cells[0];

Listagem 1 - Código.

Agora o cursor fica na linha que está selecionada:

Espero que isso tenha ajudado...

Até a próxima...


Pessoal,

Nas telas de cadastro, além de validações de campos obrigatórios, tive que verificar se o cep e o email informado tinha o formato correto. Para isso usei as expressões regulares.

Mas o que são expressões regulares ? !

Conforme Aurélio Marinho Jargas  "É uma composição de símbolos, caracteres com funções especiais, que, agrupados entre si e com caracteres literais, formam uma sequência, uma expressão. Está expressão é interpretada como uma regra, que indicará sucesso se uma entrada de dados qualquer casar com essa regra, ou seja, obedecer exatamente a todas as suas condições.";

Como fazer ?!

No botão salvar existe um método de validação dos campos. Se todas as validações forem realizadas com sucesso é chamado método de inclusão, se não é exibida a mensagem informando que o campo obrigatório não foi preenchido ou foi preenchido incorretamente. 

Vamos ao método de validação (listagem 1) ...

 

private bool ValidarCampos()
{
    bool camposPreenchidos = true;
 
    if (txtCep.Text == string.Empty)
    {
        mensagem = "Informe o cep do cliente.";
        camposPreenchidos = false;
        txtCep.Focus();
        return camposPreenchidos;
    }
    else
    {
        if (!ValidaCep(txtCep.Text))
        {
            camposPreenchidos = false;
            mensagem = "O CEP informado é inválido. Por favor verifique.";
            txtCep.Focus();
            return camposPreenchidos;
        }
    }

    if (txtEmail.Text != string.Empty)
    {
         if (!IsValidEmail(txtEmail.Text))
        {
            camposPreenchidos = false;
            mensagem = "O e-mail informado é inválido. Por favor verifique.";
            txtEmail.Focus();
            return camposPreenchidos;
        }
    }

    return camposPreenchidos;
} 

private bool ValidaCep(string cep)
{
    if (cep.Length == 8)
    {
        cep = cep.Substring(0, 5) + "-" + cep.Substring(5, 3);
        txtCep.Text = cep;
    }
    return System.Text.RegularExpressions.Regex.IsMatch(cep, ("[0-9]{5}-[0-9]{3}"));
}

private bool IsValidEmail(string email)      
{
             // instancia um regex com a expressão desejada          
             Regex rg = new Regex(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$");

            return rg.IsMatch(email); 
}

Listagem 1 - Código de validação.

 

Até o próximo post....

Qualquer dúvida entre em contato comigo..... 


Fernanda Sallai

Sem a curiosidade que me move, que me inquieta, que me insere na busca, não aprendo nem ensino - Paulo Freire