Inserindo ComboBox em KryptonDataGridView

Olá pessoal, depois de algum tempo sem postar aqui no blog trago pra voces um artigo sobre o componente Krypton DataGridView,que faz parte do Krypton Toolkit,uma suite de componentes gratuitos que melhora a aparência dos Windows Forms. Aproveitando a falta de  tutoriais a respeito do Toolkit, vou ensinar a colocar dinamicamente colunas do tipo combobox em um KryptonDataGridView.

Antes de Iniciar 
Certifique-se de baixar e instalar o Toolkit,que automaticamente ira adicionar os componentes na toolbox.

Passo 1
Crie um novo projeto do tipo KryptonForm e adicione um componente KryptonDatagridView. Ele é encontrado na paleta Krypton na caixa de ferramentas.

Passo 2
Faça a vinculação do DataGridView com algum DataSet previamente criado setando a propriedade DataSource do componente.

Passo 3
Agora se executar o projeto voce conseguira visualizar o DataGridView  preenchido com os valores do seu DataSet. Nesse tutorial como exemplo aprenderemos a adicionar uma coluna do tipo combobox retornando todos os nomes armazenados em uma tabela de funcionários ao KryptonDataGridView.No evento Load do seu KryptonForm após a consulta ao banco de dados adicione o seguinte trecho de código:


KryptonDataGridViewComboBoxColumn ColunaID = new KryptonDataGridViewComboBoxColumn();
ColunaID.HeaderText = "Nome do Funcionário";
ColunaID.Width = 80;
while(da1.Read())
{
string id=(string)da1["Nome"];
ColunaID.Items.Add(id.ToString());
}

kryptonDataGridView1.Columns.Add(ColunaID);


Entendendo o código
Na primeira linha instanciamos um objeto do tipo KryptonDataGridViewComboBoxColumn,e setamos a propriedade HeaderText para o texto que queremos que apareça no header juntamente com o tamanho da coluna. Em seguida iteramos sobre um objeto do tipo DataReader e adicionamos o retorno dos dados na combobox e por fim vinculamos a coluna ao DataGridView atraves do método Add().

Usando Arrays e Coleções com o C#

Hoje vou postar um artigo sobre o uso de arrays e coleções com o c#,mostrando as principais diferenças e vantagens entre elas. Vamos iniciar lembrando que um array é um conjunto de elementos do mesmo tipo,que podem ser ordenados e ter seus valores recuperados a qualquer momento.Isso é ótimo se levarmos em consideração a necessidade de criarmos diversas variáveis para o caso de precisarmos de muitos elementos que recebam valores.Mas arrays tem suas desvantagens.Uma delas é o seu tamanho pré-definido,que limita muito a autonomia do programador.Por exemplo,para copiar duas arrays de tamanhos distintos,pode haver perda de dados se o array de destino for menor que o de origem,ou uma truncagem no tamanho do array caso seja maior.Para evitar esses inconvenientes,podemos usar as classes do namespace System.Collections,que oferecem grande flexibilidade para lidarmos com elementos.Uma delas é a classe ArrayList,que fornece um meio bastante simples de enumerar elementos.Ao adicionarmos um elemento ao arraylist,esse sofre boxing automaticamente e para recuperá-lo devemos fazer a operação de unboxing para transformar o elemento no tipo correspondente.

Classe de Manipulação de Arquivos - C#

Classe muito útil que retorna em um arraylist os arquivos em determinada pasta e subpastas da mesma.É composta de um método para listar os arquivos em uma determinada pasta .Lembrando que para utilizar basta criar um objeto DirectoryInfo e em seguida iterar sobre os dados retornados pelos métodos.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
namespace WindowsFormsApplication1
{
class utilitaria
{
public ArrayList mostrarArquivos(DirectoryInfo dir)
{
ArrayList arquivos = new ArrayList();
foreach (FileInfo arq in dir.GetFiles())
{
arquivos.Add(arq.FullName);
}
return arquivos;
}

}
}


Para utilizar essa classe no seu código basta referenciá-la e em seguida criar um objeto DirectoryInfo com o caminho da pasta desejada.


utilitaria util = new utilitaria(); //criando a nova instância
DirectoryInfo dir = new DirectoryInfo(@"c:/teste");
foreach(string arquivo in util.mostarArquivos(dir)) //acessando o método
{
listBox1.Items.Add(arquivo) //adicionando os arquivos listados numa listbox
}


No dia a dia do desenvolvedor,é mto comum vermos a necessidade de se trabalhar com arquivos, e a classe acima nesse sentido se torna tambem bastante prática e útil.

Tutorial - Criando Enumerações com C#

Uma forma muito eficaz de declarar tipos é o uso das enumerações.Esse tipo de dado deve ser usado quando queremos dar apenas algumas opções dentro de um conjunto pré-definido de alguma característica específica,por exemplo,para um desenvolvedor ou o profissional que vai lidar com o seu código.Como são extremamente simples de entender e implementar,as enumerações são sempre bem vindas para melhorar a legibilidade e a performance da sua aplicação.O código a seguir mostra a criação de uma enumeração com as notas musicais

enum notas_musicais : int { dó, ré, mi, fá, sol, lá, sí };


Esse código cria uma enumeração que começa do zero e vai até o numero de elementos-1,e é facilmente acessada via código:


notas_musicais notas; //criando uma variavel de enumeração
notas = notas_musicais.fá; //atribuindo um valor para a variável


Para acessar o valor escolhido,podemos escolher o conteudo ou a posição do elemento dentro da enumeração.O código a seguir mostra numa label o valor do conteúdo da enumeração(literal) e uma outra versão abaixo do mesmo código mostra como acessar o elemento pela sua posição.


label1.Text = notas.ToString(); //aqui irá aparecer "fá"
label1.Text = Convert.ToString((int)notas); // aqui mostra a posição 3(repare no cast)


Lembrando que as enumerações são tipos valor e são criadas na pilha,com acesso mais rápido sem tanta sobrecarga de processamento.

Entendendo Tipos-Valor e Tipos- Referência

Hoje vou falar de um assunto um pouco espinhoso para aqueles que estão começando a programar com o .NET Framework. Trata-se dos tipos de dados e como eles são criados na memória.
Existem dois tipos de dados no .NET Framework: os do tipo valor(que tem o tamanho máximo de 16 bytes e são criados na pilha,tais como o tipo int,int32,byte,boolean,estruturas,enumerações,etc) e os do tipo referencia(são criados no heap,como classes,objetos,o tipo string,etc).A principal diferença entre os tipos é determinante para a performance final da aplicação,sendo que os dados do tipo valor são criados diretamente na pilha,mas os dados tipo referencia não serão criados até serem inicializados com a palavra-chave new seguida do chamamento correto ao construtor.Vale lembrar que os tipos valor,quando copiados,fornecem uma cópia idêntica do seu conteúdo diferentemente dos tipos referência,onde uma cópia na verdade cria uma referência ao objeto ao invés de uma atribuição propriamente dita.