VB
.NET - DataGridView - Obtendo informações de múltiplas linhas
selecionadas
Como obter informações de múltiplas linhas selecionadas em um controle DataGridView ?
Boa pergunta garoto!!!
![]()
Neste artigo eu mostro como realizar essa tarefa.
Além disso você vai aprender como preencher um DataGridView usando ADO .NET e também via Entity Framework para você comparar e perceber como o EF pode simplificar a sua vida.
Eu vou usar o Visual Basic 2010 Express Edition que é grátis , o banco de dados Northwin.mdb e o banco de dados Northwind.mdf.
Abra o Visual Basic 2010 Express e crie um novo projeto do tipo Windows Forms Application com o nome dgvLinhasSelecionadas;
No formulário padrão form1.vb inclua um controle DataGridView(gdvDados) com e 3 controles Button conforme o leiaute da figura a seguir:
![]() |
Vamos agora definir o código do evento Click do botão ADO .NET que vai usar código ADO .NET para acessar o banco de dados Nortwhind.mdb e exibir os dados da tabela Orders no DataGridView;
Os namespaces usados para realizar o acesso via ADO .NET são:
Imports System.Data
Imports System.Data.OleDb
O código do botão é dado a seguir:
Private Sub btnAdoNet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdoNet.Click
'define uma string de conexão
Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dados\Northwind.mdb"
Dim myConnection As OleDbConnection = New OleDbConnection
myConnection.ConnectionString = connString
' cria um dataadapter
Dim da As OleDbDataAdapter = New OleDbDataAdapter("Select * from Orders", myConnection)
' cria um novo dataset
Dim ds As DataSet = New DataSet
' preenche o dataset
da.Fill(ds, "table")
' atribuir o dataste ao datagridview
dgvDados.DataSource = ds.Tables(0)
End Sub
|
Este código irá preencher o DataGridView com os dados data tabela Orders do banco de Northwind.mdb;
Para obter as linhas selecionadas vamos definir um método chamado GetSelectedRowsCollection conforme abaixo:
Private Function GetSelectedRowCollection() As List(Of String)
If dgvDados.SelectedRows.Count > 0 Then
Dim drc As DataGridViewSelectedRowCollection = dgvDados.SelectedRows
Dim resultado As New List(Of String)
For i As Integer = 0 To drc.Count - 1
Dim id As Integer = drc(i).Cells(0).Value
Dim valor As String = drc(i).Cells(1).Value
resultado.Add(id.ToString & " " & valor)
Next
Return resultado
Else
Return Nothing
End If
End Function
|
Este código verifica se existem linhas selecionadas e usa DataGridViewSelectedRowCollection para obter a coleção de linhas selecionadas.
A seguir é definida uma lista de strings que é preenchida com os valores para as duas primeiras células da linha selecionada percorrendo a coleção de linhas.
O método GetSelectedRowsCollection retorna dessa forma uma lista de strings contendo os valores que obtemos da coleção das linhas selecionadas.
Para exibir o resultado vamos chamar este método no evento Click do botão Obter Linha Selecionada :
Private Sub btnSelecao_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelecao.Click
'obtem os valores das linhas selecionadas
lista = GetSelectedRowCollection()
If Not IsNothing(lista) Then
'abre o formulário form2 e passa alista como parâmetro
Dim f As New Form2(lista)
f.Show()
Else
MsgBox("Não há linhas selecionadas...")
End If
End Sub
|
Observe que temos que definir uma variável lista como uma coleção de strings no início do formulário:
Dim lista As List(Of String)
Após chamar o método GetSelectedRowsCollection verificamos e a lista não é nula(nothing) e passamos a lista como parâmetro para o formulário form2.vb.
Vamos então incluir um novo formulário form2.vb no projeto e definir neste formulário um controle ListBox(lstLista) conforme o leiaute abaixo:
![]() |
Neste formulário devemos definir um construtor para receber a lista de strings e em seguida percorrer a lista e exibir os seus itens conforme o código abaixo:
Public Class Form2
Public Sub New(ByVal lista As List(Of String))
' This call is required by the designer.
InitializeComponent()
'percorre a lista de linhas selecionadas obtidas do datagridview
'e inclui no controle ListBox
For Each item In lista
lstLista.Items.Add(item)
Next
End Sub
End Class
|
E o Entity Framework ?
Boa pergunta garoto.
![]()
Apenas para você sentir como fica simples o acesso a dados com a utilização deste ORM. Clique com o botão direito do mouse sobre o nome da solução e selecione a opção Add -> New Item;
A seguir selecione o template ADO .NET Entity Data Model e informe o nome Northwind.edmx e clique em Add;
![]() |
Na próxima janela do assistente selecione a opção Genereate From database e clique em Next>;
A seguir defina a conexão com o banco de dados Northwind.mdf conforme abaixo:
![]() |
Na próxima janela escolha a opção No para não copiar o arquivo para o projeto;
Em seguida selecione a tabela Products e marque as opções conforme a figura abaixo:
![]() |
Ao final o arquivo Northwind.edmx será gerado contendo a entidade Products e todo o mapeamento para tabela Products;
![]() |
Com isso já podemos acessar os dados da tabela Products do banco de dados Northwind.mdf. Para isso vamos incluir o código a seguir no evento Click do botão ENTITY FRAMEWORK;
Private Sub btnEF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEF.Click
'definimos uma instãncia do contexto gerado pelo ORM Entity Framework no EDM
Dim ctx As New NORTHWNDEntities
'atribuimos os produtos ao datagridview
dgvDados.DataSource = ctx.Products
End Sub
|
Executando a aplicação e selecionando algumas linhas do DataGridView obtemos o seguinte resultado:
![]() |
Simples, simples assim...![]()
Pegue o projeto completo
aqui:
dgvLinhasSelecionadas.zip
Eu sei é apenas VB .NET,
mas eu gosto...![]()
Simples, simples assim...
Referências: