PULAR LINHA NO FLEXGRID VB6
Gostaria que o flexgrid ficasse como na imagem.
Exemplo de como realizo o filtro no flexgrid.
SQLCONT
RS.Open [Ô]SELECT * from Tabela1 order by cdate(C12), asc[Ô], CON, adOpenStatic, adLockOptimistic
Do While Not RS.EOF
Grid1.TextMatrix(Grid1.Rows - 1, 1) = RS.Fields(0).Value: Grid1.TextMatrix(Grid1.Rows - 1, 2) = RS.Fields(1).Value
Grid1.TextMatrix(Grid1.Rows - 1, 3) = RS.Fields(2).Value: Grid1.TextMatrix(Grid1.Rows - 1, 4) = RS.Fields(3).Value
Grid1.TextMatrix(Grid1.Rows - 1, 5) = RS.Fields(4).Value: Grid1.TextMatrix(Grid1.Rows - 1, 6) = RS.Fields(5).Value
Grid1.Rows = Grid1.Rows + 1
RS.MoveNext
Loop
Grid1.Rows = Grid1.Rows - 1
[ô]tentei desse modo mas não funcionou
Criei uma sub
Sub Pular_Linha()
Dim iL As Integer, iC As Integer
With Grid1
For iL = 1 To .Rows - 1
For iC = 2 To 2
.Col = iC
.Row = iL
If .TextMatrix(.Row, 2) = .TextMatrix(.Row-1, 2) = Then
.Rows = .Rows + 2
else
.Rows = .Rows + 1
End If
Next iC
Next iL
End With
End Sub
inseri a sub Pular_LInha em cima do comando RS.MoveNext e deixei como comentário a linha Grid1.Rows = Grid1.Rows + 1
Exemplo de como realizo o filtro no flexgrid.
SQLCONT
RS.Open [Ô]SELECT * from Tabela1 order by cdate(C12), asc[Ô], CON, adOpenStatic, adLockOptimistic
Do While Not RS.EOF
Grid1.TextMatrix(Grid1.Rows - 1, 1) = RS.Fields(0).Value: Grid1.TextMatrix(Grid1.Rows - 1, 2) = RS.Fields(1).Value
Grid1.TextMatrix(Grid1.Rows - 1, 3) = RS.Fields(2).Value: Grid1.TextMatrix(Grid1.Rows - 1, 4) = RS.Fields(3).Value
Grid1.TextMatrix(Grid1.Rows - 1, 5) = RS.Fields(4).Value: Grid1.TextMatrix(Grid1.Rows - 1, 6) = RS.Fields(5).Value
Grid1.Rows = Grid1.Rows + 1
RS.MoveNext
Loop
Grid1.Rows = Grid1.Rows - 1
[ô]tentei desse modo mas não funcionou
Criei uma sub
Sub Pular_Linha()
Dim iL As Integer, iC As Integer
With Grid1
For iL = 1 To .Rows - 1
For iC = 2 To 2
.Col = iC
.Row = iL
If .TextMatrix(.Row, 2) = .TextMatrix(.Row-1, 2) = Then
.Rows = .Rows + 2
else
.Rows = .Rows + 1
End If
Next iC
Next iL
End With
End Sub
inseri a sub Pular_LInha em cima do comando RS.MoveNext e deixei como comentário a linha Grid1.Rows = Grid1.Rows + 1
a questão é: qual é o critério para se pular a linha? sera linha sim linha não, por grupamento de registros, qual ocritério.
Dim codAnterior As String
Dim codAtual As String
RS.Open [Ô]SELECT * from Tabela1 order by cdate(C12), asc[Ô], CON, adOpenStatic, adLockOptimistic
codAnterior = [Ô][Ô]
codAtual = [Ô][Ô]
Do While Not RS.EOF
if codAnterior = [Ô][Ô] And codAutal = [Ô][Ô] Then
codAnterior = RS.Fields(1).Value
codAtual = RS.Fields(1).Value
End If
Grid1.TextMatrix(Grid1.Rows - 1, 1) = RS.Fields(0).Value
Grid1.TextMatrix(Grid1.Rows - 1, 2) = RS.Fields(1).Value
Grid1.TextMatrix(Grid1.Rows - 1, 3) = RS.Fields(2).Value
Grid1.TextMatrix(Grid1.Rows - 1, 4) = RS.Fields(3).Value
Grid1.TextMatrix(Grid1.Rows - 1, 5) = RS.Fields(4).Value
Grid1.TextMatrix(Grid1.Rows - 1, 6) = RS.Fields(5).Value
codAtual = RS.Fields(1).Value
if codAtual <> codAnterior then
codAnterior = codAtual
Grid1.Rows = Grid1.Rows + 2
else
Grid1.Rows = Grid1.Rows + 1
end if
RS.MoveNext
Loop
Verifica se ajuda pelo que eu entendi sera pulado a linha após mudar de Codigo(Segunda Coluna)
O critério para se pular linha é por agrupamento de registros.
FILMAN, utilizei seu exemplo, mas está aparecendo errado no grid, está pulando uma linha sempre, mesmo quando o código é igual.
tente isso
veja bem no código acima estou levando em consideração que Fields(0) seja o ID e que este seja um numero inteiro caso não seja um numero inteiro, tem que fazer uma alteraçãozinha pra funcionar
Dim IdAnterior As Integer
RS.Open [Ô]SELECT * from Tabela1 order by cdate(C12), asc[Ô], CON, adOpenStatic, adLockOptimistic
Do While Not RS.EOF
Grid1.TextMatrix(Grid1.Rows - 1, 1) = RS.Fields(0).Value: Grid1.TextMatrix(Grid1.Rows - 1, 2) = RS.Fields(1).Value
Grid1.TextMatrix(Grid1.Rows - 1, 3) = RS.Fields(2).Value: Grid1.TextMatrix(Grid1.Rows - 1, 4) = RS.Fields(3).Value
Grid1.TextMatrix(Grid1.Rows - 1, 5) = RS.Fields(4).Value: Grid1.TextMatrix(Grid1.Rows - 1, 6) = RS.Fields(5).Value
If RS.Fields(0) <> IdAnterior Then
IdAnterior = CInt(RS.Fields(0))
Grid1.Rows = Grid1.Rows + 1
End if
Grid1.Rows = Grid1.Rows + 1
RS.MoveNext
Loop
Grid1.Rows = Grid1.Rows - 1
veja bem no código acima estou levando em consideração que Fields(0) seja o ID e que este seja um numero inteiro caso não seja um numero inteiro, tem que fazer uma alteraçãozinha pra funcionar
O campo Fields(0) é texto, onde preciso registrar do seguinte modo, exemplo: [Ô]25230/2013[Ô]
Alterei para: Dim IdAnterior As String
e
IdAnterior = RS.Fields(0)
Mas não funcionou.
Alterei para: Dim IdAnterior As String
e
IdAnterior = RS.Fields(0)
Mas não funcionou.
tenha certeza do rs.fields(0) está retornando coloque o mesmo em uma msgbox para ver, e eu esqueci do value também
Dim IdAnterior As String
RS.Open [Ô]SELECT * from Tabela1 order by cdate(C12), asc[Ô], CON, adOpenStatic, adLockOptimistic
Do While Not RS.EOFields(0)
[txt-color=#0000f0]msgbox RS.Fields(0).Value[/txt-color]
Grid1.TextMatrix(Grid1.Rows - 1, 1) = RS.Fields(0).Value: Grid1.TextMatrix(Grid1.Rows - 1, 2) = RS.Fields(1).Value
Grid1.TextMatrix(Grid1.Rows - 1, 3) = RS.Fields(2).Value: Grid1.TextMatrix(Grid1.Rows - 1, 4) = RS.Fields(3).Value
Grid1.TextMatrix(Grid1.Rows - 1, 5) = RS.Fields(4).Value: Grid1.TextMatrix(Grid1.Rows - 1, 6) = RS.Fields(5).Value
If RS.Fields(0).Value <> IdAnterior Then
IdAnterior = Cstr(RS.Fields(0).Value)
Grid1.Rows = Grid1.Rows + 1
End if
Grid1.Rows = Grid1.Rows + 1
RS.MoveNext
Loop
Grid1.Rows = Grid1.Rows - 1
Dim IdAnterior As String
RS.Open [Ô]SELECT * from Tabela1 order by cdate(C12), asc[Ô], CON, adOpenStatic, adLockOptimistic
Do While Not RS.EOFields(0)
[txt-color=#0000f0]msgbox RS.Fields(0).Value[/txt-color]
Grid1.TextMatrix(Grid1.Rows - 1, 1) = RS.Fields(0).Value: Grid1.TextMatrix(Grid1.Rows - 1, 2) = RS.Fields(1).Value
Grid1.TextMatrix(Grid1.Rows - 1, 3) = RS.Fields(2).Value: Grid1.TextMatrix(Grid1.Rows - 1, 4) = RS.Fields(3).Value
Grid1.TextMatrix(Grid1.Rows - 1, 5) = RS.Fields(4).Value: Grid1.TextMatrix(Grid1.Rows - 1, 6) = RS.Fields(5).Value
If RS.Fields(0).Value <> IdAnterior Then
IdAnterior = Cstr(RS.Fields(0).Value)
Grid1.Rows = Grid1.Rows + 1
End if
Grid1.Rows = Grid1.Rows + 1
RS.MoveNext
Loop
Grid1.Rows = Grid1.Rows - 1
Estamos quase lá. Segue a imagem de como está sendo carregado o grid agora.
Tirei a [Ô]/[Ô] e o ano do campo Fields(0), ficando assim só o numero, exemplo: 25230.
Utilize novamente o exemplo passado pelo FILMAN, fiz algumas adaptações, mas agora traz os dados como na imagem.
Utilizei também os dois exemplos passadas pelo MARCELO-TREZE, fiz também algumas adaptações, mas também está trazendo os dados como na imagem. Parece que pega a sequencia da op mais uma e depois pula linha, não estou entendendo.
Tirei a [Ô]/[Ô] e o ano do campo Fields(0), ficando assim só o numero, exemplo: 25230.
Utilize novamente o exemplo passado pelo FILMAN, fiz algumas adaptações, mas agora traz os dados como na imagem.
Utilizei também os dois exemplos passadas pelo MARCELO-TREZE, fiz também algumas adaptações, mas também está trazendo os dados como na imagem. Parece que pega a sequencia da op mais uma e depois pula linha, não estou entendendo.
posta como ficou seu código até agora
Segue o código
Dim IdAnterior As String
RS.Open [Ô]SELECT * from Tabela1 where cdate(C12) >= cdate([ô][Ô] & BDat_Ini & [Ô][ô]) And cdate(C12) <= cdate([ô][Ô] & BDat_Fin & [Ô][ô]) order by C0, C2 asc[Ô], CON, adOpenStatic, adLockOptimistic
Do While Not RS.EOF
Grid1.TextMatrix(Grid1.Rows - 1, 1) = RS.Fields(0).Value: Grid1.TextMatrix(Grid1.Rows - 1, 2) = RS.Fields(1).Value
Grid1.TextMatrix(Grid1.Rows - 1, 3) = RS.Fields(2).Value: Grid1.TextMatrix(Grid1.Rows - 1, 4) = RS.Fields(3).Value
Grid1.TextMatrix(Grid1.Rows - 1, 5) = RS.Fields(4).Value: Grid1.TextMatrix(Grid1.Rows - 1, 6) = RS.Fields(5).Value
[ô]Grid1.Rows = Grid1.Rows + 1
If RS.Fields(0).Value <> IdAnterior Then
IdAnterior = CStr(RS.Fields(0).Value)
Grid1.Rows = Grid1.Rows + 1
End If
Grid1.Rows = Grid1.Rows + 1
RS.MoveNext
Loop
Grid1.Rows = Grid1.Rows - 1
Esse código traz os dados com na imagem.
Se altero a linha para: Do While Not RS.EOFields(0)
Aparece a mensagem de erro: Compiler error: Method or data member not found
Dim IdAnterior As String
RS.Open [Ô]SELECT * from Tabela1 where cdate(C12) >= cdate([ô][Ô] & BDat_Ini & [Ô][ô]) And cdate(C12) <= cdate([ô][Ô] & BDat_Fin & [Ô][ô]) order by C0, C2 asc[Ô], CON, adOpenStatic, adLockOptimistic
Do While Not RS.EOF
Grid1.TextMatrix(Grid1.Rows - 1, 1) = RS.Fields(0).Value: Grid1.TextMatrix(Grid1.Rows - 1, 2) = RS.Fields(1).Value
Grid1.TextMatrix(Grid1.Rows - 1, 3) = RS.Fields(2).Value: Grid1.TextMatrix(Grid1.Rows - 1, 4) = RS.Fields(3).Value
Grid1.TextMatrix(Grid1.Rows - 1, 5) = RS.Fields(4).Value: Grid1.TextMatrix(Grid1.Rows - 1, 6) = RS.Fields(5).Value
[ô]Grid1.Rows = Grid1.Rows + 1
If RS.Fields(0).Value <> IdAnterior Then
IdAnterior = CStr(RS.Fields(0).Value)
Grid1.Rows = Grid1.Rows + 1
End If
Grid1.Rows = Grid1.Rows + 1
RS.MoveNext
Loop
Grid1.Rows = Grid1.Rows - 1
Esse código traz os dados com na imagem.
Se altero a linha para: Do While Not RS.EOFields(0)
Aparece a mensagem de erro: Compiler error: Method or data member not found
Tópico encerrado , respostas não são mais permitidas