SELECIONAR LINHA NO MSFLEXGRID DE ACORDO COM TEXTO

USUARIO.EXCLUIDOS 07/07/2011 13:34:23
#378655
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.
SINKERTEC 07/07/2011 13:45:52
#378658


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
USUARIO.EXCLUIDOS 07/07/2011 14:14:13
#378668
ta dando esse erro: OVERFLOW
SINKERTEC 07/07/2011 14:16:43
#378669


O grid da preenchido?

USUARIO.EXCLUIDOS 07/07/2011 14:18:51
#378670
ta sim.
MARCELO.TREZE 07/07/2011 14:21:29
#378671
no evento change do txtpesquisa coloque assim

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
USUARIO.EXCLUIDOS 07/07/2011 14:23:18
#378672
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.
ALVAROVB2009 07/07/2011 14:44:17
#378675
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
USUARIO.EXCLUIDOS 07/07/2011 14:55:44
#378677
queria da maneira que falei, vou ficar aqui tentando.
MARCELO.TREZE 07/07/2011 15:26:31
#378680
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

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
FEDERHEN 07/07/2011 15:50:23
#378684
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.
Página 1 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas