MSHFLEXGRID

ACG1574 29/09/2010 11:42:18
#354115
Pessoal, trabalho com o mshflexgrid a muito tempo, aconteceu algo muito estranho comigo hoje, tenho uma tela de pesquisa, que coloco o numero de um documento por exemplo, e ele me retorna no recordset 6 registros, ai preenche o grid. ate aqui tudo ok.

se eu nao sair da tela de pesquisa e clicar no botao pesquisar novamente , ele me mostra no grid só 5, se eu clicar novamente ele me mostra só 4, e assim sucessivamente, mas no codigo internamente, quando preencho o grid ele esta correto, ele até cria a linha com o additem, mas ela nao aparece fisicamente, mas na propriedade rows ela esta. alguem ja teve esse problema ?

Private Sub PreencheGrid(parRsNFs As ADODB.Recordset)
With MSHFGNFs
MontaGridNF

.Visible = True

parRsNFs.MoveFirst

While Not parRsNFs.EOF
.AddItem [Ô][Ô]
.TextMatrix(.Rows - 1, gridNFs.colDATA_EMISSAO) = parRsNFs!DAT_EMISSAO
.TextMatrix(.Rows - 1, gridNFs.colNUM_DOC) = parRsNFs!NUM_DOC
.TextMatrix(.Rows - 1, gridNFs.colNUM_SERIE) = parRsNFs!NUM_SERIE
.TextMatrix(.Rows - 1, gridNFs.colCOD_OPFISCAL) = parRsNFs!COD_FISCAL_OP
.TextMatrix(.Rows - 1, gridNFs.colFlg_Cadastro) = parRsNFs!FLG_CADASTRO
.TextMatrix(.Rows - 1, gridNFs.colCOD_CADASTRO) = parRsNFs!COD_CADASTRO
.TextMatrix(.Rows - 1, gridNFs.colNOM_CADASTRO) = parRsNFs!NOM_CADASTRO
.TextMatrix(.Rows - 1, gridNFs.colVALOR) = parRsNFs!VAL_TOTAL_NOTA
.TextMatrix(.Rows - 1, gridNFs.colCONTA) = parRsNFs!COD_CONTA & [Ô][Ô] & [Ô]-[Ô] & parRsNFs!COD_CUSTO & [Ô][Ô]

parRsNFs.MoveNext
Wend
.RemoveItem (1)
End With
End Sub

Private Sub MontaGridNF()
Dim WsHeader As String

WsHeader = [Ô] Data |[Ô]
WsHeader = WsHeader & [Ô] NF|[Ô]
WsHeader = WsHeader & [Ô]Ser|[Ô]
WsHeader = WsHeader & [Ô] CFO|[Ô]
WsHeader = WsHeader & [Ô] | | Fornecedor |[Ô]

WsHeader = WsHeader & [Ô] Valor |[Ô]
WsHeader = WsHeader & [Ô]Conta [Ô]

With MSHFGNFs
.Clear
.FormatString = WsHeader
.Rows = 2
.FixedRows = 1
.Cols = 9
.ColAlignment(gridNFs.colVALOR) = flexAlignRightCenter
End With

End Sub
XXXANGELSXXX 29/09/2010 11:54:03
#354118
bom dia, grande amigo, preencho o grid dessa forma e nao tenho problema algum.


Sub PreencheGrid()
On Error GoTo ErrorLine
Set MyRs = New ADODB.Recordset
MyRs.Open [Ô]Select id,cadcat,cadnome,cadendereco,cadnumero,cadbairro,cadcidade,cadcomplemento,cadfantasia,cadcep,caduf,cadcatativo from cadcat[Ô], Conexao, adOpenStatic, adLockReadOnly
If MyRs.RecordCount > 0 Then
With TDbgrid1
Set .DataSource = MyRs
.Cols = 13
.SelectionMode = 1 - byrow
.TextMatrix(0, 0) = [Ô][Ô]: .ColWidth(0) = 0
.TextMatrix(0, 1) = [Ô]Cód.[Ô]: .ColWidth(1) = 1000
.TextMatrix(0, 2) = [Ô]CAT[Ô]: .ColWidth(2) = 1000
.TextMatrix(0, 3) = [Ô]Razão Social[Ô]: .ColWidth(3) = 8000
.TextMatrix(0, 4) = [Ô]Cidade[Ô]: .ColWidth(4) = 4000
.TextMatrix(0, 5) = [Ô]Estado[Ô]: .ColWidth(5) = 800
.TextMatrix(0, 6) = [Ô][Ô]: .ColWidth(6) = 0: .TextMatrix(0, 7) = [Ô][Ô]: .ColWidth(7) = 0
.TextMatrix(0, 8) = [Ô][Ô]: .ColWidth(8) = 0: .TextMatrix(0, 9) = [Ô][Ô]: .ColWidth(9) = 0
.TextMatrix(0, 10) = [Ô][Ô]: .ColWidth(10) = 0: .TextMatrix(0, 11) = [Ô][Ô]: .ColWidth(11) = 0
.TextMatrix(0, 12) = [Ô][Ô]: .ColWidth(12) = 0
.Rows = MyRs.RecordCount + 1
For i = 1 To MyRs.RecordCount
.TextMatrix(i, 0) = IIf(IsNull(MyRs!id), [Ô][Ô], MyRs!id)
.TextMatrix(i, 1) = IIf(IsNull(MyRs!id), [Ô][Ô], Format(MyRs!id, [Ô]0000[Ô]))
.TextMatrix(i, 2) = IIf(IsNull(MyRs!cadcat), [Ô][Ô], MyRs!cadcat)
.TextMatrix(i, 3) = IIf(IsNull(MyRs!cadnome), [Ô][Ô], MyRs!cadnome)
.TextMatrix(i, 4) = IIf(IsNull(MyRs!cadcidade), [Ô][Ô], MyRs!cadcidade)
.TextMatrix(i, 5) = IIf(IsNull(MyRs!caduf), [Ô][Ô], MyRs!caduf)
.TextMatrix(i, 6) = IIf(IsNull(MyRs!cadendereco), [Ô][Ô], MyRs!cadendereco)
.TextMatrix(i, 7) = IIf(IsNull(MyRs!cadnumero), [Ô][Ô], MyRs!cadnumero)
.TextMatrix(i, 8) = IIf(IsNull(MyRs!cadbairro), [Ô][Ô], MyRs!cadbairro)
.TextMatrix(i, 9) = IIf(IsNull(MyRs!cadcomplemento), [Ô][Ô], MyRs!cadcomplemento)
.TextMatrix(i, 10) = IIf(IsNull(MyRs!cadfantasia), [Ô][Ô], MyRs!cadfantasia)
.TextMatrix(i, 11) = IIf(IsNull(MyRs!cadcep), [Ô][Ô], MyRs!cadcep)
.TextMatrix(i, 12) = IIf(IsNull(MyRs!cadcatativo), [Ô][Ô], MyRs!cadcatativo)
MyRs.MoveNext
Next i
End With
TDbgrid1.Row = 1
TDbgrid1.Col = 0
Else
TDbgrid1.Clear
End If
MyRs.Close
Set MyRs = Nothing
ErrorLineExit:
Exit Sub
ErrorLine:
MsgError
Resume ErrorLineExit
End Sub
ACG1574 29/09/2010 17:22:33
#354144
o seu é mshflexgrid ?
comigo tb nunca deu problema, achei estranho isso, e o pior agora, nas outras maquinas nao acontece o erro, rss..
XXXANGELSXXX 29/09/2010 17:59:25
#354146
sim, esse exemplo que mandei acima é do msflexgrid.
LLAIA 29/09/2010 18:15:39
#354147
O MSHFLEXGRID não carrega os dados de um recordset como se fosse o DBGrid? Porque o loop?
ACG1574 30/09/2010 09:24:49
#354182
mas, onde vc esta criando as proximas linhas no grid para inserir as informacoes ?
ROBIU 30/09/2010 14:17:25
#354202
Se o seu controle é o MsHFlexgrid, você pode fazer assim:
Mude esta sub para:
Private Sub PreencheGrid(parRsNFs As ADODB.Recordset)
Set parRsNFs.DataSource = Rs
MontaGridNF

End Sub


e deixe esta assim:
Private Sub MontaGridNF()
Dim WsHeader As String

WsHeader = [Ô] Data |[Ô]
WsHeader = WsHeader & [Ô] NF|[Ô]
WsHeader = WsHeader & [Ô]Ser|[Ô]
WsHeader = WsHeader & [Ô] CFO|[Ô]
WsHeader = WsHeader & [Ô] | | Fornecedor |[Ô]

WsHeader = WsHeader & [Ô] Valor |[Ô]
WsHeader = WsHeader & [Ô]Conta [Ô]

With MSHFGNFs
.Clear
.FormatString = WsHeader
.FixedRows = 1
.ColAlignment(gridNFs.colVALOR) = flexAlignRightCenter
End With

End Sub
MARCELO.TREZE 30/09/2010 15:13:43
#354208
colega tenta a mudança nesta unica linha veja

altere

.AddItem [Ô][Ô]

para

.Rows = .Rows + 1

e tente
ACG1574 30/09/2010 15:32:50
#354215
gente, é o seguinte, o sistema funciona normal em outras maquinas, mas quando faço na minha que é o projeto nao funciona , da esse efeito
ACG1574 30/09/2010 15:50:33
#354218
Marcelo nao funciona, da a mensagem variable not defined
Robiu, no seu caso o meu recordset tras varios campos que nao uso no grid , mas uso em outros funcoes, entao nao da pra jogar todo o recordset no grid. outra coisa, os dados do grid nao ficam formatados.
Tópico encerrado , respostas não são mais permitidas