COMO PESQUISAR DADOS NO DATAGRIDVIEW

DANIROSA 04/01/2014 07:55:02
#432638
Boa noite!

venho pedir ajuda sobre pesquisar dados no datagrid view.

Eu tenho um datagridView e uma textbox, quero que na medida em que eu vou digitando o texto na textbox vai filtrando os dados no datagridview.

como faço isso em vb.net?

O codigo do meu DataGridView é este:

Private Sub FrmListaActividades_Load(sender As Object, e As EventArgs) Handles MyBase.Load


DGVListaActividades.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells

DGVListaActividades.AllowUserToAddRows = False

DGVListaActividades.AllowUserToDeleteRows = False

DGVListaActividades.EditMode = DataGridViewEditMode.EditProgrammatically

DGVListaActividades.AllowUserToResizeColumns = False

DGVListaActividades.AllowUserToOrderColumns = False

DGVListaActividades.AutoGenerateColumns = True [ô]Aqui estamos a dizer que gere colunas automaticas

DGVListaActividades.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders

DGVListaActividades.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single

DGVListaActividades.RowsDefaultCellStyle.BackColor = Color.White

DGVListaActividades.AlternatingRowsDefaultCellStyle.BackColor = Color.Bisque




DGVListaActividades.SelectionMode = DataGridViewSelectionMode.FullRowSelect

DGVListaActividades.MultiSelect = False

DGVListaActividades.Columns.Add([Ô]colCODIGO_ACTIVIDADE[Ô], [Ô]Codigo[Ô])

DGVListaActividades.Columns.Add([Ô]colDESCRICAO_ACTIVIDADE[Ô], [Ô]Nome Actividades[Ô])


DGVListaActividades.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter

Dim ctx As New DAL.DANIROSADataContext

Try

Dim list = From actv In ctx.ActividadeEmpresas

Select actv Order By actv.ID_ACTIVIDADE


Dim IdxLine As Integer = 0

For Each Actividad In list


DGVListaActividades.Rows.Add()

DGVListaActividades.Rows(IdxLine).Cells(0).Value = Actividad.ID_ACTIVIDADE

DGVListaActividades.Rows(IdxLine).Cells(1).Value = Actividad.DESCRIÇÃO_ACTIVIDADE

IdxLine = IdxLine + 1


Next


Catch ex As Exception

Throw ex

End Try


LblNumeroActividades.Text = DGVListaActividades.Rows.Count.ToString()

End Sub

E no Evento TextChanged eu coloquei o seguinte codigo:

Private Sub TxtPesquisarNomeActividade_TextChanged(sender As Object, e As EventArgs) Handles TxtPesquisarNomeActividade.TextChanged

Dim criterio As String

criterio = Me.TxtPesquisarNomeActividade.Text & [Ô]*[Ô]


Dim ctxt As New DAL.DANIROSADataContext

Dim atividades = From activ In ctxt.ActividadeEmpresas

Where activ.DESCRIÇÃO_ACTIVIDADE Like criterio

Selectactiv.ID_ACTIVIDADE, activ.DESCRIÇÃO_ACTIVIDADE

Order By DESCRIÇÃO_ACTIVIDADE Ascending


Dim IdxLine As Integer = 0

For Each Actividad In atividades



DGVListaActividades.Rows.Add()

DGVListaActividades.Rows(IdxLine).Cells(0).Value = Actividad.ID_ACTIVIDADE

DGVListaActividades.Rows(IdxLine).Cells(1).Value = Actividad.DESCRIÇÃO_ACTIVIDADE

IdxLine = IdxLine + 1

Next

[ô] atividades.ToList()


[ô] Me.DGVListaActividades.DataSource = atividades.ToList

End Sub


Mas não esta a funcionar corretamente, ele não esta a selecionar o dado encontrado, não esta a atribuir o foco a linha selecionada e esta a duplicar as linhas encontradas no datagridview. qual é a melhor forma de fazer isso no datagridview?

E quando eu chamo este mesmo datagridview em um outro formulario cada vez que ele é carregado ele adiciona mais linhas ao DatagridView. isso é normal?


Obrigado e aguardo resposta

Por favor quem quiser entrar em contacto comigo meu email é:

danielbeneditorosa@hotmail.com
NILSONTRES 04/01/2014 09:51:58
#432641
Vamos simplificar isso ?
Dim I As Integer
For I = 0 To GRID_VENDAS.Rows.Count - 1
If GRID_VENDAS.Rows(I).Cells(2).Value.ToString.ToUpper.Contains(TXT_LOCALIZA.Text.ToUpper) Then
GRID_VENDAS.Rows(I).Selected = True
GRID_VENDAS.FirstDisplayedScrollingRowIndex = I
Exit For
End If
Next
DANIROSA 04/01/2014 10:50:06
#432642
Obrigado NILSONTRES!
Neste caso este codigo é para escrever no envento TextChanged ou no formulario onde esta o DataGridView?

Obrigado
NILSONTRES 04/01/2014 11:08:49
#432643
No TextChanged ou no Keydow.
Se sua base de dados ou grid for muito grande recomendo no Keydow.
Isso tudo no campo de busca.
DANIROSA 04/01/2014 13:49:41
#432645
Muito obrigado NILSONTRES
Esta a funcionar mas acho que falta alguma coisa, eu fiz de duas formas, uma a que me sugeriste e a outra tentativa minha , vou colocar o codigo das duas formas para veres:

1ª Forma:

Dim i As Integer
For i = 0 To DGVListaActividades.Rows.Count - 1
If DGVListaActividades.Rows(i).Cells(1).Value.ToString.ToUpper.Contains(TxtPesquisarNomeActividade.Text.ToUpper) Then
DGVListaActividades.Rows(i).Selected = True
DGVListaActividades.FirstDisplayedScrollingRowIndex = i

Exit For
End If
Next
o primeiro codigo tambem funciona mas não esta a filtrar os dados como eu quero, e esta a buscar os dados no datagridview e não na base de dados.


2ª Forma:
Dim ctxt As New DAL.DANIROSADataContext
Dim actividades = From actividade In ctxt.ActividadeEmpresas
Where actividade.DESCRIÇÃO_ACTIVIDADE Like Me.TxtPesquisarNomeActividade.Text & [Ô]*[Ô]
Select actividade
Dim IdxLine As Integer = 0
For Each Actividad In actividades
DGVListaActividades.Rows.Add()
DGVListaActividades.Rows(IdxLine).Cells(0).Value = Actividad.ID_ACTIVIDADE
DGVListaActividades.Rows(IdxLine).Cells(1).Value = Actividad.DESCRIÇÃO_ACTIVIDADE
IdxLine = IdxLine + 1
Next
Me.DGVListaActividades.DataSource = actividades.ToList

Este codigo funciona, so que ele esta a criar outras colunas no datagridview, em vez de usar as colunas configuradas no dgv.
e esta a buscar os dados na base de dados.





NILSONTRES 04/01/2014 15:26:19
#432648
Citação:

COMO PESQUISAR DADOS NO DATAGRIDVIEW


é que fui pelo titulo de seu tópico, que no caso busca os dados no grid e não na base.

Vc pode fazer o mesmo com a base, faz uma seleção, e na medida que seleciona carrega o grid.
DANIROSA 04/01/2014 15:38:27
#432649
Este mesmo codigo pode buscar na base de dados?
o meu codigo que busca na base de dados é este:

Dim ctxt As New DAL.DANIROSADataContext
Dim actividades = From actividade In ctxt.ActividadeEmpresas
Where actividade.DESCRIÇÃO_ACTIVIDADE Like Me.TxtPesquisarNomeActividade.Text & [Ô]*[Ô]
Select actividade


Dim i As Integer
For i = 0 To DGVListaActividades.Rows.Count - 1
If DGVListaActividades.Rows(i).Cells(1).Value.ToString.ToUpper.Contains(TxtPesquisarNomeActividade.Text.ToUpper) Then
DGVListaActividades.Rows(i).Selected = True
DGVListaActividades.FirstDisplayedScrollingRowIndex = i

Exit For
End If
Next


como ficaria para buscar na base e trazer para o dgv?
DANIROSA 04/01/2014 16:06:28
#432650
so que não esta a filtrar estes dados nas colunas que eu configurei no datagridview, ele esta a trazer os campos da propria tabela criando assim outras colunas no grid. e é isso que eu não quero.

como fazer com que a pesquisa feita preencha as colunas ja configuradas no dgv?
eu criei as colunas via codigo

[ô]Aqui crio as colunas no datagrid

DGVListaActividades.Columns.Add([Ô]colCODIGO_ACTIVIDADE[Ô], [Ô]Codigo[Ô])
DGVListaActividades.Columns.Add([Ô]colDESCRICAO_ACTIVIDADE[Ô], [Ô]Nome Actividades[Ô])

Aqui a consulta na base de dados apartir da textbox

Dim ctxt As New DAL.DANIROSADataContext
Dim actividades = From actividade In ctxt.ActividadeEmpresas
Where actividade.DESCRIÇÃO_ACTIVIDADE Like Me.TxtPesquisarNomeActividade.Text & [Ô]*[Ô]
Select actividade


NILSONTRES 04/01/2014 16:30:03
#432651
é por isso que não gosto de vincular o datagrid a base de dados, ele cria as colunas de acordo com a base, a não ser que no seu select vc coloque campo a campo, que de certa forma é o correto.

precisaria saber o que vc utiliza para trazer os dados, datareader, dataadapter, qula banco é ?
Se for preencher na unha mesmo.
basicamente assim:
faça a seleção:
Se encontrar os dados então:
While tabela.Read
Grid.Rows.add
Grid.Rows(Grid.Rows.count-1).Cells(0).Value=registro([Ô]CampoCodigo[Ô]).ToString
Grid.Rows(Grid.Rows.count-1).Cells(1).Value=registro([Ô]CampoNome[Ô]).ToString
end While

Nesse caso, antes vc já cria as colunas que precisar no DataGrid

DANIROSA 04/01/2014 16:47:28
#432652



LUANDA

Mensagem interna





so que não esta a filtrar estes dados nas colunas que eu configurei no datagridview, ele esta a trazer os campos da propria tabela criando assim outras colunas no grid. e é isso que eu não quero.

como fazer com que a pesquisa feita preencha as colunas ja configuradas no dgv?
eu criei as colunas via codigo

[ô]Aqui crio as colunas no datagrid

DGVListaActividades.Columns.Add([Ô]colCODIGO_ACTIVIDADE[Ô], [Ô]Codigo[Ô])
DGVListaActividades.Columns.Add([Ô]colDESCRICAO_ACTIVIDADE[Ô], [Ô]Nome Actividades[Ô])

Aqui a consulta na base de dados apartir da textbox

Dim ctxt As New DAL.DANIROSADataContext
Dim actividades = From actividade In ctxt.ActividadeEmpresas
Where actividade.DESCRIÇÃO_ACTIVIDADE Like Me.TxtPesquisarNomeActividade.Text & [Ô]*[Ô]
Select actividade

eu to a Usar o Linq To Sql em vb.net
NILSONTRES 04/01/2014 16:53:31
#432653
Citação:

como fazer com que a pesquisa feita preencha as colunas ja configuradas no dgv?



Citação:

Se encontrar os dados então:
While tabela.Read
Grid.Rows.add
Grid.Rows(Grid.Rows.count-1).Cells(0).Value=registro([Ô]CampoCodigo[Ô]).ToString
Grid.Rows(Grid.Rows.count-1).Cells(1).Value=registro([Ô]CampoNome[Ô]).ToString
end While


é claro, adaptando a sua maneira.
Só que vc esta vinculando o Controle Datagrid a base dedados, (Datagrid.DataSource)
Nesse caso, que eu saiba não tem jeito mesmo, as colunas serão criadas.
Repetindo, que eu saiba.
Página 1 de 2 [13 registro(s)]
Faça seu login para responder