VB 2005 - ListView dinâmico
Para você se atualizar ou recordar segue abaixo alguns artigos que eu já escrevi sobre o controle ListView no VB.NET:
Neste artigo vou mostrar como usar o controle para exibir dados de forma dinâmica, assim basta você definir uma string de conexão válida, e uma instrução SQL que os registros serão exibidos no controle ListView. Clicando duas vezes sobre uma linha do ListView são exibidos os detalhes do registro. Você poderá definir também a largura das colunas dos campos exibidos no ListView.
Vamos usar o Visual Basic 2005 Express Edition para criar o projeto do artigo.
Abra o VB 2005 Express e crie um novo projeto do tipo Windows Application com o nome ListViewNetBD.
A seguir no formulário form1.vb padrão inclua um controle ListView , um controle GroupBox, 1 Label (lblStatus), 3 TextBox e um Button(btnCarregaDados) conforme o leiaute abaixo:
Os dois controles TextBox que definem a string de conexão - txtConnStr e a instrução SQL- txtSQL - possui a propriedade Multiline igual a True.
Defina as seguintes propriedades do controle ListView:
Defina o seguinte namespace no formulário : Imports System.Data.SqlClient
A seguir defina as seguintes variáveis no início do formulário:
Private ds As DataSetNo evento Load do formulário vamos iniciar o objeto dataset:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ds = New DataSet End Sub |
Ao evento Click do botão de comando - btnCarregaDados - insira o código :
Private Sub btnCarregaDados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarregaDados.Click
ListView1.Clear() ds.Reset() preencheDataset() Catch ex As ExceptionListView1.Clear() lblStatus.Text = ""lblStatus.BackColor = Me.BackColorMessageBox.Show(ex.Message) End Try End Sub |
Esta rotina limpa o ListView , reseta o DataSet e chama a rotina preencheDataSet() que é mostrada abaixo:
Private Sub preencheDataset()
Me.da = New SqlDataAdapter(txtSQL.Text, txtConnStr.Text) da.Fill( Me.ds)
Preenchimento() |
Na rotina acima estamos criando um DataAdatper com base na conexão e instrução SQL informadas , em seguida preenchemos o DataAdapter e chamamos a rotina preenchimento() cujo código é o seguinte:
Private Sub Preenchimento()Try Me.lblStatus.Text = "" Me.ListView1.Columns.Clear() Me.ListView1.Items.Clear() Me.preencheListView() Catch ex As Exception Me.ListView1.Clear() Me.lblStatus.Text = "" Me.lblStatus.BackColor = Me.BackColor MessageBox.Show(ex.Message, ex.GetType().ToString()) Me.lblStatus.Text = "" End Try End Sub |
No código acima limpamos as colunas e os itens e invocamos a rotina preencheListView() , veja o seu código a seguir:
Private Sub preencheListView()
If txtLarguraColuna.Text = String.Empty Then txtLarguraColuna.Text = 100 End IfFor Each c In ds.Tables(0).Columns 'Inclui nome nas colunas como colunas ListView Dim h As New ColumnHeader h.Text = c.ColumnName h.Width = Convert.ToInt32(txtLarguraColuna.Text) Me.ListView1.Columns.Add(h) Next Dim dt As DataTable = ds.Tables(0) Dim str(Me.ds.Tables(0).Columns.Count) As String 'inclui DataRows ao ListVidw Dim rr As DataRow For Each rr In dt.Rows For col As Integer = 0 To Me.ds.Tables(0).Columns.Count - 1 str(col) = rr(col).ToString() Next Dim ii As New ListViewItem(str) Me.ListView1.Items.Add(ii) 'mostra o numero de registros incluidos Me.exibeStatus() Next End Sub |
Nem preciso dizer que esta rotina é a principal do projeto pois irá definir as colunas, sua largura e preencher o ListView.
Para exibir detalhes da linha selecionada temos que incluir o código abaixo no evento DoubleClick do ListView:
Private Sub listView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClickDim texto As String = Nothing Dim i As Integer For i = 0 To Me.ListView1.Columns.Count - 1 texto += Me.ds.Tables(0).Columns(i).ColumnNametexto += " = "texto += Me.ListView1.FocusedItem.SubItems(i).Texttexto += vbCrLf NextMessageBox.Show(texto, "Linha selecionada") End Sub |
Temos uma Label chamada lblStatus que exibe informações sobre a quantidade de linha e colunas geradas. O seu código é:
Private Sub exibeStatus()Me.lblStatus.ForeColor = Color.Blue Me.lblStatus.BackColor = Color.AliceBlue If Me.ListView1.Items.Count <> 0 Then Me.lblStatus.Text = String.Format(" {0} Colunas e {1} Linhas ", Me.ds.Tables(0).Columns.Count, Me.ListView1.Items.Count) Else lblStatus.BackColor = Me.BackColor End If End Sub |
Executando o projeto para um string de conexão e instrução SQL e definindo a largura da coluna como 200 teremos o seguinte resultado:
Perceba como é fácil usar o controle ListView para exibir informações em formulário Windows.
Pegue o projeto completo aqui : listviewDBNet.zip
Eu sei é apenas VB .NET mas eu gosto...
José Carlos Macoratti