AJUDEME COM MSFLEXGRID ADD ITEMS

NILTON.VIANNA 04/04/2010 19:58:39
#338534
No meu projeto tenho um modelo de lançamentos
Só quando vou lançar um novo item ele limpa o GRID

Private Sub cmdIncluir_Click()
If (Key = 0) Then
Key = 1
Else
Key = Key + 1
End If
FG1.Rows = Key + 1

FG1.TextMatrix(Key, 0) = txtEntrada.Text
FG1.TextMatrix(Key, 1) = txtQuat.Text
FG1.TextMatrix(Key, 2) = txtDescricao.Text
FG1.TextMatrix(Key, 3) = txtNome.Text

If opt1.Value = True Then
FG1.TextMatrix(Key, 4) = txtCredito.Text
FG1.TextMatrix(Key, 6) = txtSoma.Text
End If

If opt2.Value = True Then
FG1.TextMatrix(Key, 4) = txtDebito.Text
FG1.TextMatrix(Key, 5) = txtSoma.Text
End If

Quando salvo eu volto na tela e mando listar todos OK,
Mais quando vou lançar um novo ele limpa o GRID

A minha idéia e que ele permanecesse os itens e são ia acrescentando.

Grato
Nilton
CLEVERTON 04/04/2010 20:18:27
#338535
um exemplo,coloque um flexgrid e um botão no form.

Option Explicit

Private Sub Command1_Click()
MSFlexGrid1.AddItem [Ô]oi[Ô], 5
[ô]Lembrando que depois que vc adicionar esse item na linha 5 como mostra, vc tem que usar o textmatrix pra editar as colunas
End Sub

Private Sub Form_Load()
Dim i As Integer

For i = 1 To 10
MSFlexGrid1.AddItem [Ô]Linha: [Ô] & i
Next i

End Sub


NILTON.VIANNA 04/04/2010 20:49:26
#338538
Cleverton
é seguinte quando eu dou ENTER NA SOMA ele limpa meu GRID e coloca a a ultima linha acrecentei.
queria que permanecesse os itens conforme exemplo.

Grato
EDERMIR 04/04/2010 22:41:46
#338543
Aparentemente seu problema está aqui:
If (Key = 0) Then
Key = 1
Else
Key = Key + 1
End If

A variavel KEY não tem valor inicial, portanto sempre será ZERO.
Altere para o seguinte:
Key = FG1.ROWS-1
If (Key = 1) Then
Key = 1
Else
Key = Key + 1
End If
NILTON.VIANNA 05/04/2010 00:21:55
#338549
Edimir

Acho qye não pois o Primeiro Item é Key, 0

FG1.TextMatrix(Key, 0) = txtEntrada.Text
FG1.TextMatrix(Key, 1) = txtQuat.Text
Assim vai..
o erro deve sero no;
FG2.Rows = Key + 1
??




EDERMIR 05/04/2010 08:54:48
#338553
Quando você [Ô]entra[Ô] na SUB, você não define o valor de KEY.

Note que seu primeiro comando ao entrar na SUB é:
If (Key = 0) Then

Como não há valores definidos, ele vai executar:
Key = 1

Com minha alteração, atribuo a quantidade de linhas do seu grid na variável KEY. Assim a rotina não começa a numeração quando a grid já está [Ô]povoada[Ô].

Você tentou minha alteração?
ROBIU 05/04/2010 14:33:00
#338589
If FG1.Rows = 1 Then [ô]Se a grid tiver apenas o cabeçalho
Key = 1
FG1.Rows = 2 [ô]Acrescenta uma linha
ElseIf FG1.Rows = 2 Then [ô]Se a grid tiver 2 linhas
Key = 1 [ô]Se não tiver registro
If FG1.TextMatrix(Key, 0) <> [Ô][Ô] Then [ô]Se tiver registro
Key = FG1.Rows
FG1.Rows = Key + 1
End If
ElseIf FG1.Rows > 2 Then [ô]Se a grid tiver mais de 2 linhas
Key = FG1.Rows
FG1.Rows = Key + 1

End If

FG1.TextMatrix(Key, 0) = txtEntrada.Text
FG1.TextMatrix(Key, 1) = txtQuat.Text
FG1.TextMatrix(Key, 2) = txtDescricao.Text
FG1.TextMatrix(Key, 3) = txtNome.Text
MARCELO.TREZE 05/04/2010 17:23:03
#338616
vou tentar ajudar, acredito que sempre haja pelo menos o cabeçalho.

então não há necessidade de se fazer verificações e seim apenas incluir uma linha e pronto

ex:

FG1.Rows = FG1.Rows + 1
Key = FG1.Rows

FG1.TextMatrix(Key - 1, 0) = txtEntrada.Text
FG1.TextMatrix(Key - 1, 1) = txtQuat.Text
FG1.TextMatrix(Key - 1, 2) = txtDescricao.Text
FG1.TextMatrix(Key - 1, 3) = txtNome.Text

If opt1.Value = True Then
FG1.TextMatrix(Key - 1, 4) = txtCredito.Text
FG1.TextMatrix(Key - 1, 6) = txtSoma.Text
End If

If opt2.Value = True Then
FG1.TextMatrix(Key - 1, 4) = txtDebito.Text
FG1.TextMatrix(Key - 1, 5) = txtSoma.Text
End If


tente isto e acredito que irá funcionar

NILTON.VIANNA 05/04/2010 22:47:50
#338642
[txt-size=2]ROBIU MUITO OBRIGADO.., FUNCIONOU[/txt-size]
Porque quando mando Gravar ele Repete todos ja Lançado. ???

[ô]Comando para Salvar na tabela (Obs. Tabela nao tem Chave Primária)
[ô] FG1 é meu FLEXGRID

RS.Open [Ô]CadCaixID[Ô], CnSql, 1, 3
Dim i As Long
With FG1
[ô] Não guardar a ultima lina
For i = 1 To FG1.Rows - 1
RS.AddNew
RS.Fields([Ô]CaixaID[Ô]) = txtCaixaID.Text
RS.Fields([Ô]Vendedor[Ô]) = txtVendedor.Text
RS.Fields([Ô]Entrada[Ô]) = FG1.TextMatrix(i, 0) [ô]Coluna 0
RS.Fields([Ô]Quat[Ô]) = FG1.TextMatrix(i, 1) [ô]Coluna 2
RS.Fields([Ô]Descricao[Ô]) = FG1.TextMatrix(i, 2) [ô]Coluna 3
RS.Fields([Ô]Nome[Ô]) = FG1.TextMatrix(i, 3) [ô]Coluna 3
RS.Fields([Ô]Unitario[Ô]) = FG1.TextMatrix(i, 4) [ô]Coluna 3
RS.Fields([Ô]Debito[Ô]) = FG1.TextMatrix(i, 5) [ô]Coluna 4
RS.Fields([Ô]Credito[Ô]) = FG1.TextMatrix(i, 6) [ô]Coluna 5
RS.Update
Next i
End With
RS.Close

[ô]Sera que tem como fazer Update, salvado somente a linha que acrecentou conforme seu exemplo..
NILTON.VIANNA 05/04/2010 23:20:11
#338646
Uma maneira do FlexGrid saber quais foram os registros alterados na tabela e ele por si só fazer uma atualização nele mesmo e trocar os valores das células que estão exibindo os valores alterados.
MICROSCHEME 05/04/2010 23:30:05
#338647

Cara.

Quando você coloca um
For i = 1 To FG1.Rows - 1
. . .

Next i

Você está varrendo toda a tua grid da primeira até a última linha, tenta assim:

RS.Open [Ô]CadCaixID[Ô], CnSql, 1, 3
Dim i As Long
With FG1
[ô] Não guardar a ultima lina
.Row = .Rows - 1
RS.AddNew
RS.Fields([Ô]CaixaID[Ô]) = txtCaixaID.Text
RS.Fields([Ô]Vendedor[Ô]) = txtVendedor.Text
RS.Fields([Ô]Entrada[Ô]) = FG1.TextMatrix(i, 0) [ô]Coluna 0
RS.Fields([Ô]Quat[Ô]) = FG1.TextMatrix(i, 1) [ô]Coluna 2
RS.Fields([Ô]Descricao[Ô]) = FG1.TextMatrix(i, 2) [ô]Coluna 3
RS.Fields([Ô]Nome[Ô]) = FG1.TextMatrix(i, 3) [ô]Coluna 3
RS.Fields([Ô]Unitario[Ô]) = FG1.TextMatrix(i, 4) [ô]Coluna 3
RS.Fields([Ô]Debito[Ô]) = FG1.TextMatrix(i, 5) [ô]Coluna 4
RS.Fields([Ô]Credito[Ô]) = FG1.TextMatrix(i, 6) [ô]Coluna 5
RS.Update
End With
RS.Close

. . .

Página 1 de 2 [20 registro(s)]
Tópico encerrado , respostas não são mais permitidas