VB
.NET - DataGridView extraindo linhas selecionadas
Hoje vamos aprender como extrair informações sobre as linhas selecionadas de um controle DataGridView.
Para fazer isso vou usar a classe DataGridViewSelectedRowCollection que representa um coleção de objetos DataGridViewRow que são selecionadas em um controle DataGridView.
Vou usar também a propriedade SelectedRows que representa uma coleção de linhas selecionadas pelo usuário em um DataGridView.
A propriedade SelectionMode deve ser definida como FullRowSelect ou RowHeaderSelect para que a propriedade SelectedRows seja preenchida com as linhas selecionadas.
Para poder selecionar mais de uma linha a propriedade MultiSelect deve ser definida com o valor True.
Esta propriedade contém um instantâneo somente leitura da seleção no momento em que é referenciada. Se o usuário mudar a seleção o valor anterior não representa mais o valor atual.
Para selecionar uma linha via programação você tem que definir a propriedade Selected como True.
Criando a solução Windows Forms
Abra o Visual Studio 2012 Express for desktop e clique em New Project;
Selecione a linguagem Visual Basic e o template Windows Forms Application informando o nome DataGridView_LinhasSelecionadas;
Inclua os seguintes controles a partir da Toolbox no formulário form1.vb;
Disponha os controles no formulário conforme o leiaute abaixo:
![]() |
Para preencher o controle GridView vou usar a tabela Funcionarios de um banco de dados Microsoft Access que eu criei para esse fim. A estrutura e os dados da tabela é mostrada abaixo
![]() |
![]() |
No menu PROJECT clique em Add Class e informe o nome AcessoDados.vb e a seguir inclua o código abaixo nesta classe:
Imports System.Data
Imports System.Data.OleDb
Public Class AcessoDados
Public Shared Function GetDados() As DataTable
Dim con As OledbConnection = Nothing
Try
'define a string de conexao com provedor caminho e nome do banco de dados
Dim strProvider As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dados\Funcionarios.mdb"
'define a instrução SQL
Dim strSql As String = "SELECT * FROM Funcionarios"
'cria a conexão com o banco de dados
con = New OleDbConnection(strProvider)
'cria o objeto command para executar a instruçao sql
Dim cmd As New OleDbCommand(strSql, con)
'abre a conexao
con.Open()
'define o tipo do comando
cmd.CommandType = CommandType.Text
'cria um dataadapter
Dim da As New OleDbDataAdapter(cmd)
'cria um objeto datatable
Dim dt As New DataTable()
'preenche o datatable via dataadapter
da.Fill(dt)
'retorna o datable
Return dt
Catch ex As Exception
Throw ex
Finally
con.Close()
End Try
End Function
End Class
|
No evento Load do formulário vamos carregar o controle DataGridView com os dados da tabela Funcionarios usando o método GetDados da classe AcessoDados. Como o método foi declarado estático (shared) não precisamos criar uma instância da classe para acessá-lo.
| Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load dgvDados.DataSource = AcessoDados.GetDados() End Sub |
No evento Click do botão de comando - Pegar Linhas Selecionadas - inclua o código que obtém as linhas selecionados chamando a função GetLinhasSelecionadas():
| Private Sub btnPegarLinhas_Click(sender As Object, e As EventArgs) Handles btnPegarLinhas.Click lbSelecao.Items.Clear() Try lblmsg.Text = "Linhas Selecionadas : " + dgvDados.SelectedRows.Count.ToString For Each item In GetLinhasSelecionadas() lbSelecao.Items.Add(item) Next Catch ex As Exception MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Information) End Try End Sub |
A função GetLinhasSelecionadas() usa a classe DataGridViewSelectedRowCollection para obter a coleção das linhas selecionadas a partir dela extraímos as informações desejadas.
No exemplo estou extraindo os valores para o ID, nome e endereço do funcionário e exibindo o resultado em um controle ListBox:
| Private Function GetLinhasSelecionadas() As List(Of String) If dgvDados.SelectedRows.Count > 0 Then Dim dgvColecaoLinhasSelecionadas As DataGridViewSelectedRowCollection = dgvDados.SelectedRows Dim ids As New List(Of String) For i As Integer = 0 To dgvColecaoLinhasSelecionadas.Count - 1 Dim id As Integer = dgvColecaoLinhasSelecionadas(i).Cells(0).Value Dim nome As String = dgvColecaoLinhasSelecionadas(i).Cells(1).Value Dim endereco As String = dgvColecaoLinhasSelecionadas(i).Cells(2).Value ids.Add(id.ToString & "," & nome & " " & endereco) Next Return ids Else Throw New Exception("Não existem linhas selecionadas !!") End If End Function |
Executando o projeto e selecionando algumas linhas teremos o seguinte resultado:
![]() |
Você pode fazer o que quiser com a informação acessada extraindo as linhas para um arquivo texto, um arquivo csv, etc.
Pegue o projeto completo
aqui:
DataGridView_LinhasSelecionada.zip
João 12:23
Respondeu-lhes Jesus: É chegada a hora de ser glorificado o Filho do homem.João 12:24
Em verdade, em verdade vos digo: Se o grão de trigo caindo na terra não morrer, fica ele só; mas se morrer, dá muito fruto.João 12:25
Quem ama a sua vida, perdê-la-á; e quem neste mundo odeia a a sua vida, guardá-la-á para a vida eterna.Referências: