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: