Eu estou usando o SharpDevelop 2.2 mas podemos usar o Visual C# Express Edition.
Veja na figura abaixo o layout do formulário da nossa primeira aplicação usando ListView com C#. Ela tem o objetivo de mostrar como exibir dados no ListView. No exemplo, eu estou usando o banco de dados Northwind.mdb e a aplicação tem o objetivo de executar consultas SQL que o usuário digita na caixa de texto e exibir o resultado no controle ListView.
Inicie o SharpDevelop e no menu Arquivo selecione Novo -> Solução;
A seguir na janela Novo Projeto selecione C# -> Aplicações Windows e informe o nome executaSQL e clique em Criar;
No formulário MainForm.cs inclua os componentes conforme o layout abaixo;
Os controles usados no formulário são:
1- TextBox – txtSql ; Multiline = True
2- Button – cmdExecuta
3- TextBox – txtBD
4- Listview – lvwResultado ; View = Details
No evento Click do botão de comando Executar temos o código que acessa o banco de dados Northwind.mdb informado, executa um comando com a instrução SQL informada e gera um datareader exibido o resultado no ListView; (Veja o comentário no código para detalhes)
private void cmdExecuta_Click(object sender, System.EventArgs e)
{
//verifica se foi informada uma consulta
if (txtSql.Text.Equals(""))
{
MessageBox.Show("Digite uma instrução válida.");
return;
}
//define a string de conexão
string sDBstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + txtBD.Text;
//criar o objeto connection
OleDbConnection conn = new OleDbConnection(sDBstr);
try
{
//limpa o listview
lvwResultado.Columns.Clear() ;
lvwResultado.Items.Clear();
//abre a conexao
conn.Open();
//cria um comando oledb
OleDbCommand cmd = conn.CreateCommand();
//define o tipo do comando como texto
cmd.CommandText = txtSql.Text;
//executa o comando e gera um datareader
OleDbDataReader dr = cmd.ExecuteReader();
//preenche o cabeçalho do listview com os nomes dos campos
for (int i = 0; i< dr.FieldCount; i++)
{
ColumnHeader ch = new ColumnHeader();
ch.Text=dr.GetName(i);
lvwResultado.Columns.Add(ch);
}
//define um item listview
ListViewItem item;
//inicia leitura do datareader
while (dr.Read())
{
item=new ListViewItem();
item.Text= dr.GetValue(0).ToString();
//preenche o listview com itens
for (int i=1 ; i< dr.FieldCount; i++) {
item.SubItems.Add(dr.GetValue(i).ToString());
}
lvwResultado.Items.Add(item);
}
//fecha o datareader
dr.Close();
}
catch ( System.Data.OleDb.OleDbException ex)
{
MessageBox.Show("Ocorreu um erro durante a execução da instrução SQL." +
"Erro : " + ex.Message, "SQL");
}
finally
{
//fecha a conexao
conn.Close();
}
}
Executando o projeto para a instrução SQL : Select * from Products; temos o seguinte resultado:
Como podemos ver o controle ListView é muito versátil e fácil de usar. Vejamos alguns recursos deste controle:
A Hierarquia de classe do componente pode ser visto a seguir:
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.Control
System.Windows.Forms.ListView
O ListView possui um menu de tarefas (ListView Tasks) onde podemos editar itens, colunas e grupos além de definir o modo de visão como: Tile, Small Icons, Large Icons, List e Details.
Quando você seleciona o primeiro item no menu de tarefa do ListView o editor de coleção de itens é exibido e ListViewItems pode ser incluídos ou removidos e suas propriedades podem ser definidas. Um objeto ListViewItem pode exibir uma imagem com um texto, neste caso um ImageList deve ser usado para associar a imagem com o objeto ListViewObject.
A classe ListViewItem representa itens em um controle ListView e a classe ListViewSubItem representa um sub-item relacionado ao ListViewItem. A classe ListViewItem expõe a propriedade coleção de SubItems que representa uma lisa de sub-itens relacionas a um item.
Além disso podemos incluir itens manualmente no controle incluindo ListViewItems na propriedade Items da coleção de itens do ListView. Veja um exemplo abaixo:
ListViewItem listViewItem1 = new ListViewItem();
ListViewSubItem listViewSubItem1 = new ListViewSubItem();
listViewItem1.Text = “Macoratti”;
listViewSubItem1.Text = “www.macoratti.net”;
listViewItem1.SubItems.Add(listViewSubItem1);
listView1.Items.Add(listViewItem1);
Da mesma forma para incluir colunas manualmente basta inserir objetos ColumnHeader a coleção Columns do ListView. Neste caso as colunas serão exibidas somente se o modo de exibição do ListView estiver definido para Details. Exemplo:
ColumnHeader columnHeader1 = new ColumnHeader();
ColumnHeader columnHeader2 = new ColumnHeader();
columnHeader1.Text = “Nome”;
columnHeader2.Text = “E-mail”;
listView1.Columns.Add(columnHeader1);
listView1.Columns.Add(columnHeader2);
Para incluir um grupo via código inserimos objetos ListViewGroup a coleção Groups do ListView. Exemplo:
listView1.Groups.Add(new ListViewGroup(“Friends”, HorizontalAlignment.Left));
Para definir o modo de visão via código fazemos:
listView1.View = View.Details;
Em um próximo artigo vou mostrar como podemos exibir, incluir e ler dados em um ListView sem usar um banco de dados.
Aguarde…
Eu sei é apenas C# mas eu gosto…