Desenvolvimento de User Control com Propriedade Dinâmica - Parte 1

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (2)  (0)

Desenvolvendo o próprio componente com versatilidade e funcionalidade dinâmica implementando a função de imprimir e exportar dados a partir de qualquer DataGridView.

É muito interessante, nós desenvolvedores, pensarmos em criar funcionalidades individuais que sejam versáteis e dinâmicas dentro de uma aplicação.

Muitas vezes podemos desenvolver classes com métodos que nem sempre atende todo o sistema, então utilizamos a orientação a objetos para agregar o reaproveitamento, a herança, polimorfismo e permitir que nossa aplicação fique mais objetiva e funcional.

O Microsoft Visual Studio oferece um recurso muito útil para que nós mesmos desenvolvemos os nossos próprios componentes, permitindo até mesmo construir nosso próprio ToolKit de desenvolvimento.

Neste artigo abordaremos um conteúdo muito interessante no mundo do .NET Framework.

Nosso objetivo será desenvolver UserControl, com a finalidade de fornecer funcionalidades e propriedades dinâmicas.

o que vem a ser o UserControl?

User Control : Um UserControl fornece maneiras para customizar interfaces gráficas com funcionalidades e propriedades que podem ser criadas e reutilizadas em qualquer parte do seu sistema. Pode vir a ser um componente visual e que pode estender dentro dele métodos, propriedades, executando assim, tarefas individuais para cada um. O mais interessante disso tudo, é que assim, após criado, você poderá adicioná-lo em seu Toolbox do Microsoft Visual Studio e arrastá-lo para seu Form.

Desenvolvendo nosso Componente

Iremos criar aqui dois UserControl, cujos herdarão da classe Button.

Isso mesmo! Iremos criar dois botões com funcionalidades específicas e propriedade dinâmica, onde será possível adicioná-los em nosso Toolbox mais adiante.

Um botão será responsável por exportar dados a partir de qualquer DataGridView para arquivo texto.

Por último, iremos desenvolver um responsável para imprimir dados a partir de qualquer DataGridView.

Abrindo o Microsoft Visual Studio 2010 Express Edition, clique em New Project. Digite “empty” na caixa de pesquisa e selecione BlankSolution, conforme mostra a figura abaixo:


Figura 1.

Daremos o nome de “MeuToolkit”.

No Solution Explorer, percebemos que ele criou uma solução vazia para nós. Com o botão direito do mouse, clique na Solution e clique em Add... e em seguida New Project...

Crie um projeto do tipo Class Library e dê o nome de "Componentes". Em seguida, delete o arquivo Class1.cs que o Microsoft Visual Studio 2010 Express Edition cria automaticamente.


Figura 2.


Figura 3

Com isso, criaremos o nosso UserControl adicionando-o na solution:


Figura 4.

Vamos dar o nome de BotaoExportarTxt. Aperte F7 e vamos codificar!

Primeiramente, vamos herdar este componente da classe Button do System.Windows.Forms. Vamos declarar nossa propriedade do tipo DataGridView como “MeuGridAtrelado”. Mais adiante veremos que esta propriedade irá receber qualquer grid que quisermos. É esta a mágica da aplicação!

No construtor, chamaremos o evento click do nosso botão, e logo em seguida faremos o tal evento. Que dentro dele, chamaremos a função para exportar para txt.

Com a declaração da propriedade “MeuGridAtrelado” daremos a função de setarmos qualquer gridview que qualquer tela obtiver. O código fica assim:

using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Componentes
{
    public partial class BotaoExportarTxt : Button
    {
        public DataGridView MeugGridAtrelado { get; set; }
        public BotaoExportarTxt()
        {
            this.Click += new EventHandler(BotaoExportarTxt_Click);
        }

O evento Click do botão recebe um método para exportação, chamado ExportGrid() passando por parâmetro o nosso gridview e o título de nosso arquivo:

	private void BotaoExportarTxt_Click(object sender, EventArgs e)

        {
            try
            {
                ExportGrid(MeugGridAtrelado, "Exportação.txt");
                MessageBox.Show("Exportado com sucesso");

            }
            catch (Exception ex)
            {
                MessageBox.Show("Exportação não sucedida.\nDetalhes: " + ex.Message);
            }
        }

O método responsável para exportar (ExportGrid()), segue abaixo:
	private void ExportGrid(DataGridView MeugGridAtrelado, string arquivo)
{
// responsável por calcular o tamanho da coluna
  List tamanhoColuna = new List(); 
 	// forma uma lista de inteiros
    	for (int i = 0; i < MeugGridAtrelado.Columns.Count; i++)
        {
          //verifica o tamanho do caption de cada coluna
          //na propriedade HeaderText
                tamanhoColuna.Add(MeugGridAtrelado.Columns[i].HeaderText.Length);
         }
            //verifica o que contém no grid e em cada coluna
            foreach (DataGridViewRow item in MeugGridAtrelado.Rows)
            {
                for (int i = 0; i < MeugGridAtrelado.Columns.Count; i++)
                {
                   string valueString = Convert.ToString(item.Cells[i].Value);
                   if (valueString.Length > tamanhoColuna[i])
		   tamanhoColuna[i] = valueString.Length;
                }
            } 
               //Abrir o arquivo
		using (StreamWriter writer = new StreamWriter(arquivo, false))
		{
		// Escrever o conteúdo do cabeçalho

	         for (int i = 0; i < MeugGridAtrelado.Columns.Count; i++)
		   {		
			string cabecalho = MeugGridAtrelado.Columns[i].HeaderText;
			writer.Write(cabecalho);
			if (cabecalho.Length < tamanhoColuna[i])
			writer.Write(new string(' ', tamanhoColuna[i] - cabecalho.Length));
			if (i < MeugGridAtrelado.Columns.Count - 1)
			writer.Write(" ");
		   } //Fim do laço For
		writer.WriteLine();
        //Escreve os dados
	foreach (DataGridViewRow linha in MeugGridAtrelado.Rows)
	{
	  for (int i = 0; i < MeugGridAtrelado.Columns.Count; i++)
	   {
          	//Captura e escreve o valor de cada coluna
            string valorColuna = Convert.ToString(linha.Cells[i].Value);
	    writer.Write(valorColuna);
	     if (valorColuna.Length < tamanhoColuna[i])
	     writer.Write(new string(' ', tamanhoColuna[i] - valorColuna.Length));
		if (i < MeugGridAtrelado.Columns.Count - 1)
		 writer.Write(" ");
	    }
		writer.WriteLine();
	}
     }
  }
}

Dê um Build em nossa aplicação para gerar a DLL.

Pronto! A nossa DLL já está gerada dentro da pasta Bin de nossa aplicação.

Agora você já pode utilizar seu componente adicionando-o em seus projetos, simplesmente arrastando-o de seu Toolbox para o seu Form que conterá o DataGridView.

Para adicionar o componente em seu Toolbok, siga as instruções a seguir:

Abra o Toolbox, clique com o botão direito do mouse e em seguida seleciona "Add Tab":


Figura 5.

Dê o nome para esta Tab de "Meus Componentes":


Figura 6

Dentro desta Tab criada, clique com o direito e selecione "Choose Items..."

Uma nova janela irá se abrir e nela clique em "Browse..."

Vá até a pasta Bin\Debug da aplicação MeuToolkit que demos o Build instantes atrás, e selecione a DLL gerada por ele. Provavelmente a DLL se chama Componentes.dll.


Figura 7.

Clique em Abrir. Note que apareceu selecionado o nosso componente que acabamos de criar:


Figura 8.

Clique em OK e nosso componente está adicionado em nosso Toolbox:


Figura 9.

Agora é só arrastá-lo para dentro de qualquer Form e setar o DataGridView através da propriedade "MeuGridAtrelado" que criamos dentro do componente.


Figura 10.

Simplesmente execute e clique no botão para exportar dados de sua GridView para um arquivo TXT.

Por padrão, o arquivo exportado ficará alojado na pasta Bin\Debug de sua aplicação. Você pode programar para alterar este local.

Pessoal, por momento ficamos por aqui.

Espero que este artigo tenha sido útil à você.

Fiquem com Deus e até a próxima!

gsajorato@live.com

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?