COMO PESQUISAR DADOS NO DATAGRIDVIEW
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
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
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
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
Obrigado NILSONTRES!
Neste caso este codigo é para escrever no envento TextChanged ou no formulario onde esta o DataGridView?
Obrigado
Neste caso este codigo é para escrever no envento TextChanged ou no formulario onde esta o DataGridView?
Obrigado
No TextChanged ou no Keydow.
Se sua base de dados ou grid for muito grande recomendo no Keydow.
Isso tudo no campo de busca.
Se sua base de dados ou grid for muito grande recomendo no Keydow.
Isso tudo no campo de busca.
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.
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.
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.
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?
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?
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
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
é 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
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
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
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.
Faça seu login para responder