SELECIONAR LINHA NO MSFLEXGRID DE ACORDO COM TEXTO
Bom tarde, pessoal,. tenho um msflexgrid que puxa de uma tabela, cerca registros de 2.000 produtos, eu já filtro com esse codigo.
Dim sql01 As New ADODB.Recordset
sql01.Open [Ô]Select * from tblProduto where CodigoBarras like[ô][Ô] & UCase(txtPesquisa.Text) & [Ô]%[ô][Ô], con, adOpenDynamic, adLockOptimistic
Do While Not sql01.EOF
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 0) = sql01.Fields(3).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 1) = sql01.Fields(1).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 2) = sql01.Fields(2).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 3) = sql01.Fields(11).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 4) = sql01.Fields(15).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 5) = Format(sql01.Fields(19).Value, [Ô]Standard[Ô]) & [Ô][Ô]
MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
sql01.MoveNext
Loop
mais em vez de filtrar gostaria apenas de ao digita o nome do produto, selecionar a linha do msflexgrid.
Dim sql01 As New ADODB.Recordset
sql01.Open [Ô]Select * from tblProduto where CodigoBarras like[ô][Ô] & UCase(txtPesquisa.Text) & [Ô]%[ô][Ô], con, adOpenDynamic, adLockOptimistic
Do While Not sql01.EOF
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 0) = sql01.Fields(3).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 1) = sql01.Fields(1).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 2) = sql01.Fields(2).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 3) = sql01.Fields(11).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 4) = sql01.Fields(15).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 5) = Format(sql01.Fields(19).Value, [Ô]Standard[Ô]) & [Ô][Ô]
MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
sql01.MoveNext
Loop
mais em vez de filtrar gostaria apenas de ao digita o nome do produto, selecionar a linha do msflexgrid.
Cara boa tarde
Esse digitar o nome, o grid já estaria carregado? Se sim....vamos la
Essa lista é feita pelo código do produto (numero sequencial) que acaba querendo ou não sendo a ordem com que o flex é preenchido
então no textbox vc digita o nome do produto e no evento change desse text vc faz a seguinte consulta
Dim sql01 As New ADODB.Recordset
sql01.Open [Ô]Select * from tblProduto where Descricao like[ô][Ô] & UCase(txtPesquisa.Text) & [Ô]%[ô][Ô], con, adOpenDynamic, adLockOptimistic
FlexGrid.Col = 0
FlexGrid.colsel = sql01.recordset.fields!CodigoProd
Assim ele selecionará o primeiro produto q ele achar
mais ou menos isso
ta dando esse erro: OVERFLOW
O grid da preenchido?
ta sim.
no evento change do txtpesquisa coloque assim
veja o resultado
Dim sql01 As New ADODB.Recordset
sql01.Open [Ô]Select * from tblProduto where CodigoBarras like[ô][Ô] & UCase(txtPesquisa.Text) & [Ô]%[ô][Ô], con, adOpenDynamic, adLockOptimistic
MSFlexgrid1.Rows = 1
Do While Not sql01.EOF
MSFlexGrid1.TextMatrix(MS
MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
FlexGrid1.Rows - 1, 0) = sql01.Fields(3).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 1) = sql01.Fields(1).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 2) = sql01.Fields(2).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 3) = sql01.Fields(11).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 4) = sql01.Fields(15).Value & [Ô][Ô]
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 5) = Format(sql01.Fields(19).Value, [Ô]Standard[Ô]) & [Ô][Ô]
sql01.MoveNext
Loop
veja o resultado
rapaz filtrar ele já filtra, pois filtrando ta meio pesado, eu quero não é filtrar e sim apenas selecionar o registro que já foi carregado no grid.
Atenciosamente.
Atenciosamente.
WANDSONSOUSA permita-me dar uma idéia, pq vc não vai carregando o grid toda vez q digitar alguma coisa ?
No evento chance do seu texto coloca o comando para fazer a busca, segue abaixo um exemplo de como eu uso
Eu faço assim, e não fica lento e veja q eu faço várias comparações, com isso a medida q vc vai digitando o grid vai ficando com as informações necessárias
StrSql = [Ô]SELECT C.codcoleta,C.ncoleta,C.dataentrada,R.nome,D.nome FROM Coleta AS C [Ô]
StrSql = StrSql & [Ô]INNER JOIN clientes R ON r.codcliente = c.codremetente [Ô]
StrSql = StrSql & [Ô]INNER JOIN clientes D ON d.codcliente = c.coddestinatario [Ô]
If CboListaStatus.Text = [Ô]Pendente Impressão[Ô] Then
StrSql = StrSql & [Ô]WHERE statusimpressao = 3 [Ô]
ElseIf CboListaStatus.Text = [Ô]Emitido[Ô] Then
StrSql = StrSql & [Ô]WHERE statusimpressao = 1 [Ô]
ElseIf CboListaStatus.Text = [Ô]Cancelado[Ô] Then
StrSql = StrSql & [Ô]WHERE statusimpressao = 2 [Ô]
End If
Dim strPor As String
Select Case cboLocaTipo.Text
Case [Ô]Nº Coleta[Ô]
strPor = [Ô]c.ncoleta[Ô]
Case [Ô]Data Entrada[Ô]
strPor = [Ô]C.dataentrada[Ô]
Case [Ô]Remetente[Ô]
strPor = [Ô]R.nome[Ô]
Case [Ô]Destinatário[Ô]
strPor = [Ô]D.Nome[Ô]
End Select
If Trim(txtLocalizar.Text) = [Ô][Ô] Then
StrSql = StrSql & [Ô]order by c.codcoleta[Ô]
ElseIf Trim(CboListaStatus.Text) <> [Ô][Ô] Then
StrSql = StrSql & [Ô] and [Ô] & strPor & [Ô] like [ô][Ô] & txtLocalizar.Text & [Ô]%[ô] Order by 1 Asc[Ô]
Else
StrSql = StrSql & [Ô] where [Ô] & strPor & [Ô] like [ô][Ô] & txtLocalizar.Text & [Ô]%[ô] Order by 1 Asc[Ô]
End If
[ô]Aqui ele preenche o meu list
PreencheListView StrSql
No evento chance do seu texto coloca o comando para fazer a busca, segue abaixo um exemplo de como eu uso
Eu faço assim, e não fica lento e veja q eu faço várias comparações, com isso a medida q vc vai digitando o grid vai ficando com as informações necessárias
StrSql = [Ô]SELECT C.codcoleta,C.ncoleta,C.dataentrada,R.nome,D.nome FROM Coleta AS C [Ô]
StrSql = StrSql & [Ô]INNER JOIN clientes R ON r.codcliente = c.codremetente [Ô]
StrSql = StrSql & [Ô]INNER JOIN clientes D ON d.codcliente = c.coddestinatario [Ô]
If CboListaStatus.Text = [Ô]Pendente Impressão[Ô] Then
StrSql = StrSql & [Ô]WHERE statusimpressao = 3 [Ô]
ElseIf CboListaStatus.Text = [Ô]Emitido[Ô] Then
StrSql = StrSql & [Ô]WHERE statusimpressao = 1 [Ô]
ElseIf CboListaStatus.Text = [Ô]Cancelado[Ô] Then
StrSql = StrSql & [Ô]WHERE statusimpressao = 2 [Ô]
End If
Dim strPor As String
Select Case cboLocaTipo.Text
Case [Ô]Nº Coleta[Ô]
strPor = [Ô]c.ncoleta[Ô]
Case [Ô]Data Entrada[Ô]
strPor = [Ô]C.dataentrada[Ô]
Case [Ô]Remetente[Ô]
strPor = [Ô]R.nome[Ô]
Case [Ô]Destinatário[Ô]
strPor = [Ô]D.Nome[Ô]
End Select
If Trim(txtLocalizar.Text) = [Ô][Ô] Then
StrSql = StrSql & [Ô]order by c.codcoleta[Ô]
ElseIf Trim(CboListaStatus.Text) <> [Ô][Ô] Then
StrSql = StrSql & [Ô] and [Ô] & strPor & [Ô] like [ô][Ô] & txtLocalizar.Text & [Ô]%[ô] Order by 1 Asc[Ô]
Else
StrSql = StrSql & [Ô] where [Ô] & strPor & [Ô] like [ô][Ô] & txtLocalizar.Text & [Ô]%[ô] Order by 1 Asc[Ô]
End If
[ô]Aqui ele preenche o meu list
PreencheListView StrSql
queria da maneira que falei, vou ficar aqui tentando.
o que vc pode fazer é preencher o grid com todos os dados, depoius fazer um loop comparando o texto de pesquisa com a coluna deseja exebindo a linha ao se encontrar o item
exemplo:
em um botão
não testei mas é o caminho
exemplo:
em um botão
With MSFlexGrid
For F = 1 To .Rows - 1
If .Textmatrix(F, coluna_desejada) = TxtPesquisa.Text Then
.Row = F
exit For
End If
Next F
End With
não testei mas é o caminho
O cmponente msflexgrid é bem lento.
Fazer a pesquisa e posicionar dentro do grid pode ficar mais lento do que fazer uma carga nova.
Alem do mais, o msflexgrid tem limite e pode estourar. Se não me engano, esse erro de overflow acima é erro de estouro de capacidade fo maflexgrid.
Fazer a pesquisa e posicionar dentro do grid pode ficar mais lento do que fazer uma carga nova.
Alem do mais, o msflexgrid tem limite e pode estourar. Se não me engano, esse erro de overflow acima é erro de estouro de capacidade fo maflexgrid.
Tópico encerrado , respostas não são mais permitidas