MSHFLEXGRID
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
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
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
o seu é mshflexgrid ?
comigo tb nunca deu problema, achei estranho isso, e o pior agora, nas outras maquinas nao acontece o erro, rss..
comigo tb nunca deu problema, achei estranho isso, e o pior agora, nas outras maquinas nao acontece o erro, rss..
sim, esse exemplo que mandei acima é do msflexgrid.
O MSHFLEXGRID não carrega os dados de um recordset como se fosse o DBGrid? Porque o loop?
mas, onde vc esta criando as proximas linhas no grid para inserir as informacoes ?
Se o seu controle é o MsHFlexgrid, você pode fazer assim:
Mude esta sub para:
e deixe esta 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
colega tenta a mudança nesta unica linha veja
altere
.AddItem [Ô][Ô]
para
.Rows = .Rows + 1
e tente
altere
.AddItem [Ô][Ô]
para
.Rows = .Rows + 1
e tente
gente, é o seguinte, o sistema funciona normal em outras maquinas, mas quando faço na minha que é o projeto nao funciona , da esse efeito
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.
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