SELECIONAR NO DBGRID A LINHA CONFORME A PESQUISA
Boa tarde,
Vê se dá pra ajudar, por favor.
Como faço para que quando eu digitar uma pesquisa num textbox a linha no DBgrid fique selecionada e role até a parte de cima para que eu clicando nessa linha apareçam nos campos do Form os dados cadastrados.
Obrigado
JMRF
Sua dúvida é em linguagem VB.NET ou VB6?
Bom dia,
é VB.NET
Obrigado
JMRF
bom se é vb.net, entao sera datagridview me corrija se estiver errado.
porem considerando que no form tenha 1 textbox (textbox1) e datagridview (DGView1).
entao copie e cole
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
[ô]texto que representará o valor da célula do grid
Dim txt As String = Nothing
[ô]percorre linha por linha da grid
For Each row As DataGridViewRow In DGView1.Rows
[ô]percorre cada celula da linha
For Each cell As DataGridViewCell In DGView1.Rows(row.Index).Cells
[ô]se a caixa de texto nao estiver vazia prossegue, caso não
[ô]tira a seleção da linha do grid
If TextBox1.Text <> [Ô][Ô] Then
[ô]se for a primeira coluna, no caso a coluna Nome
If cell.ColumnIndex = 0 Then
[ô]atribui a valor a variavel txt, passando tudo convertido para minusculo
txt = cell.Value.ToString.ToLower
[ô]se essa variavel tiver caracteres que corresponde ao da pesquisa no texto,
[ô]tambem convertido para o minusculo
If txt.Contains(TextBox1.Text.ToLower) Then
[ô]faz o teste para ver se o valor da celula comeca com o mesmo valor
[ô]da pesquisa, caso sim, seleciona a linha do grid
If txt.StartsWith(TextBox1.Text.ToLower.Substring(0, TextBox1.Text.Length)) Then
Me.DGView1.Rows(cell.RowIndex).Selected = True
[ô]Me.DGView1.CurrentCell = Me.DGView1.Rows(cell.RowIndex).Cells(0)
Me.DGView1.MultiSelect = True
End If
End If
End If
Else
Me.DGView1.Rows(cell.RowIndex).Selected = False
Me.DGView1.MultiSelect = False
End If
Next
Next
end sub
qualquer duvida poste novamente.
porem considerando que no form tenha 1 textbox (textbox1) e datagridview (DGView1).
entao copie e cole
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
[ô]texto que representará o valor da célula do grid
Dim txt As String = Nothing
[ô]percorre linha por linha da grid
For Each row As DataGridViewRow In DGView1.Rows
[ô]percorre cada celula da linha
For Each cell As DataGridViewCell In DGView1.Rows(row.Index).Cells
[ô]se a caixa de texto nao estiver vazia prossegue, caso não
[ô]tira a seleção da linha do grid
If TextBox1.Text <> [Ô][Ô] Then
[ô]se for a primeira coluna, no caso a coluna Nome
If cell.ColumnIndex = 0 Then
[ô]atribui a valor a variavel txt, passando tudo convertido para minusculo
txt = cell.Value.ToString.ToLower
[ô]se essa variavel tiver caracteres que corresponde ao da pesquisa no texto,
[ô]tambem convertido para o minusculo
If txt.Contains(TextBox1.Text.ToLower) Then
[ô]faz o teste para ver se o valor da celula comeca com o mesmo valor
[ô]da pesquisa, caso sim, seleciona a linha do grid
If txt.StartsWith(TextBox1.Text.ToLower.Substring(0, TextBox1.Text.Length)) Then
Me.DGView1.Rows(cell.RowIndex).Selected = True
[ô]Me.DGView1.CurrentCell = Me.DGView1.Rows(cell.RowIndex).Cells(0)
Me.DGView1.MultiSelect = True
End If
End If
End If
Else
Me.DGView1.Rows(cell.RowIndex).Selected = False
Me.DGView1.MultiSelect = False
End If
Next
Next
end sub
qualquer duvida poste novamente.
Bo tarde,
ROBSON220BASS
Irei testar hoje à noite, e postarei o resultado, pois nesse momento estou no trabalho e não tenho aqui o VS 2010 instalado.
Obrigado pela dica
JMRF
Boa noite,
ROBSON220BASS
Infelizmente nada aconteceu nem selecionar a linha não selecionou muito menos rolou o DataGridView.
Abaixo o código que vc me mandou aplicado nos termos do meu Código.
Tem alguma instrução, para nós?
Obrigado
Um abraço
JMRF
Private Sub txtPesquisa_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtPesquisa.TextChanged
[ô]texto que representará o valor da célula do grid
Dim txt As String = Nothing
[ô]percorre linha por linha da grid
For Each row As DataGridViewRow In dgvestoque_atual.Rows
[ô]percorre cada celula da linha
For Each cell As DataGridViewCell In dgvestoque_atual.Rows(row.Index).Cells
[ô]se a caixa de texto nao estiver vazia prossegue, caso não
[ô]tira a seleção da linha do grid
If txtPesquisa.Text <> [Ô][Ô] Then
[ô]se for a primeira coluna, no caso a coluna Nome
If cell.ColumnIndex = 0 Then
[ô]atribui a valor a variavel txt, passando tudo convertido para minusculo
txt = cell.Value.ToString.ToLower
[ô]se essa variavel tiver caracteres que corresponde ao da pesquisa no texto,
[ô]tambem convertido para o minusculo
If txt.Contains(txtPesquisa.Text.ToLower) Then
[ô]faz o teste para ver se o valor da celula comeca com o mesmo valor
[ô]da pesquisa, caso sim, seleciona a linha do grid
If txt.StartsWith(txtPesquisa.Text.ToLower.Substring(0, txtPesquisa.Text.Length)) Then
Me.dgvestoque_atual.Rows(cell.RowIndex).Selected = True
[ô]Me.dgvestoque_atual.CurrentCell = Me.dgvestoque_atual.Rows(cell.RowIndex).Cells(0)
Me.dgvestoque_atual.MultiSelect = True
End If
End If
End If
Else
Me.dgvestoque_atual.Rows(cell.RowIndex).Selected = False
Me.dgvestoque_atual.MultiSelect = False
End If
Next
Next
[ô]Quando limpar a caixa de [Ô]Pesquisa por Nome do Produto[Ô], limpar todos os campos do formulário
If txtPesquisa.Text = [Ô][Ô] Then
txtcod_materiais_produtos.Text = [Ô][Ô]
txtMateriais_produtos.Text = [Ô][Ô]
txtUnidade.Text = [Ô][Ô]
txtEstoque_atual.Text = [Ô][Ô]
txtEstoque_minimo.Text = [Ô][Ô]
txtCodigo.Text = [Ô][Ô]
End If
End Sub
End Class
ROBSON220BASS,
Uma informação pra você. A primeira coluna do meu DataGridView é o Código do Produto (numérico) o Nome do Produto, está na segunda coluna. Não sei se tem alguma coisa a ver.
Obrigado
JMRF
ROBSON220BASS,
Estive observando o seguinte:
- Ao invés d'eu digitar o nome do Produto no [Ô]txtPesquisa.text[Ô], eu digitei o número do código do produto e realmene selecionou a linha certa. Mas tem um Ãtem de suma importância que é o seguinte:
1- Eu quero que se a linha selecionada for, por exemplo, a linha 100 ou 54, ou 235 etc a linha selecionada venha para o lugar da primeira ou seja o DBGrid efetue um roll e a linha selecionada apareça visivel no DBGrid e não fique selecionada estática onde está e eu tenha que rolar o DBGrid e localizar a linha. Pode me orientar nesse sentido, por favor?
Obrigado
Um abração
JMRF
Estive observando o seguinte:
- Ao invés d'eu digitar o nome do Produto no [Ô]txtPesquisa.text[Ô], eu digitei o número do código do produto e realmene selecionou a linha certa. Mas tem um Ãtem de suma importância que é o seguinte:
1- Eu quero que se a linha selecionada for, por exemplo, a linha 100 ou 54, ou 235 etc a linha selecionada venha para o lugar da primeira ou seja o DBGrid efetue um roll e a linha selecionada apareça visivel no DBGrid e não fique selecionada estática onde está e eu tenha que rolar o DBGrid e localizar a linha. Pode me orientar nesse sentido, por favor?
Obrigado
Um abração
JMRF
JMRF é isso q quero fazer no meu aplicativo porém em determinados computadores demora mto pra carregar a grid inteira, vc toda vez q abre essa janela vc da um select Codigo, produto, ... from produtos
sem nenhuma instrução?
desculpa disvirtuar o topico, vou procurar alguma coisa pra te ajudar
sem nenhuma instrução?
desculpa disvirtuar o topico, vou procurar alguma coisa pra te ajudar
[ô]texto que representará o valor da célula do grid
Dim txt As String = Nothing
[ô]percorre linha por linha da grid
For Each row As DataGridViewRow In dgvestoque_atual.Rows
[ô]percorre cada celula da linha
For Each cell As DataGridViewCell In dgvestoque_atual.Rows(row.Index).Cells
[ô]se a caixa de texto nao estiver vazia prossegue, caso não
[ô]tira a seleção da linha do grid
If txtPesquisa.Text <> [Ô][Ô] Then
[ô]se for a primeira coluna, no caso a coluna Nome
If cell.ColumnIndex = 0 Then [txt-color=#e80000][ô]==============>>>>>>>>>> o numero 0 (zero) indica que a pesquisa sera na primeira coluna(altere as suas necessidades)[/txt-color]
[ô]atribui a valor a variavel txt, passando tudo convertido para minusculo
txt = cell.Value.ToString.ToLower
[ô]se essa variavel tiver caracteres que corresponde ao da pesquisa no texto,
[ô]tambem convertido para o minusculo
If txt.Contains(txtPesquisa.Text.ToLower) Then
[ô]faz o teste para ver se o valor da celula comeca com o mesmo valor
[ô]da pesquisa, caso sim, seleciona a linha do grid
If txt.StartsWith(txtPesquisa.Text.ToLower.Substring(0, txtPesquisa.Text.Length)) Then
Me.dgvestoque_atual.Rows(cell.RowIndex).Selected = True
[ô]Me.dgvestoque_atual.CurrentCell = Me.dgvestoque_atual.Rows(cell.RowIndex).Cells(0) [txt-color=#e80000][ô]==========> esta aqui mostra a linha selecionada na tela, não move ela
[ô]para a primeira linha, mas faz o datagridview rolar ate ela de forma que fique visÃvel sem que você tenha que ir ate ela.[/txt-color]
Me.dgvestoque_atual.MultiSelect = True
End If
End If
End If
Else
Me.dgvestoque_atual.Rows(cell.RowIndex).Selected = False
Me.dgvestoque_atual.MultiSelect = False
End If
Next
Next
qualquer coisa baixe este codigo-fonte aqui do site, que deixei para download:
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=9106
ate+
Dim txt As String = Nothing
[ô]percorre linha por linha da grid
For Each row As DataGridViewRow In dgvestoque_atual.Rows
[ô]percorre cada celula da linha
For Each cell As DataGridViewCell In dgvestoque_atual.Rows(row.Index).Cells
[ô]se a caixa de texto nao estiver vazia prossegue, caso não
[ô]tira a seleção da linha do grid
If txtPesquisa.Text <> [Ô][Ô] Then
[ô]se for a primeira coluna, no caso a coluna Nome
If cell.ColumnIndex = 0 Then [txt-color=#e80000][ô]==============>>>>>>>>>> o numero 0 (zero) indica que a pesquisa sera na primeira coluna(altere as suas necessidades)[/txt-color]
[ô]atribui a valor a variavel txt, passando tudo convertido para minusculo
txt = cell.Value.ToString.ToLower
[ô]se essa variavel tiver caracteres que corresponde ao da pesquisa no texto,
[ô]tambem convertido para o minusculo
If txt.Contains(txtPesquisa.Text.ToLower) Then
[ô]faz o teste para ver se o valor da celula comeca com o mesmo valor
[ô]da pesquisa, caso sim, seleciona a linha do grid
If txt.StartsWith(txtPesquisa.Text.ToLower.Substring(0, txtPesquisa.Text.Length)) Then
Me.dgvestoque_atual.Rows(cell.RowIndex).Selected = True
[ô]Me.dgvestoque_atual.CurrentCell = Me.dgvestoque_atual.Rows(cell.RowIndex).Cells(0) [txt-color=#e80000][ô]==========> esta aqui mostra a linha selecionada na tela, não move ela
[ô]para a primeira linha, mas faz o datagridview rolar ate ela de forma que fique visÃvel sem que você tenha que ir ate ela.[/txt-color]
Me.dgvestoque_atual.MultiSelect = True
End If
End If
End If
Else
Me.dgvestoque_atual.Rows(cell.RowIndex).Selected = False
Me.dgvestoque_atual.MultiSelect = False
End If
Next
Next
qualquer coisa baixe este codigo-fonte aqui do site, que deixei para download:
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=9106
ate+
Bom dia,
ROBSON220BASS
Vou testar na hora do almoço. Ontem à noite fiz um teste mas tenho só 5 Ãtens cadastrados então eu comprimi o DBGrid em duas linhas e fiz a pesquisa para ver se a linha 5 aparecia selecionada e não rolou, não fez o SCROLL, vou cadastrar mais Ãtens e ver de rola legal.
Postarei o resultado.
Obrigado.
JMRF
Tópico encerrado , respostas não são mais permitidas