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 DataSet
Private da As
SqlDataAdapter

No 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


Try

   ListView1.Clear()

    ds.Reset()

    preencheDataset()

Catch ex As Exception

    ListView1.Clear()

    lblStatus.Text = ""

    lblStatus.BackColor = Me.BackColor

    MessageBox.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()
 

End Sub

 

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()


Dim c As DataColumn


If
txtLarguraColuna.Text = String.Empty
Then

     txtLarguraColuna.Text = 100

End If

 

For 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.DoubleClick


Dim
texto As String =
Nothing

Dim i As Integer
 

For i = 0 To Me.ListView1.Columns.Count - 1

    texto += Me.ds.Tables(0).Columns(i).ColumnName

    texto += " = "

    texto += Me.ListView1.FocusedItem.SubItems(i).Text

    texto += vbCrLf

Next

MessageBox.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