FLEXGRID EDITAVEL COM PROBLEMA

WEBIER 30/05/2011 10:44:33
#375300
eu tenho um flexgrid editavel (que aceita editar os dados do BD nas celulas)

fiz um junção de um flexgrid com um textbox assim:

[ô]no general
Private iRow As Integer
Private iCol As Integer


Private Sub Grid_Click()
If Grid.ColSel = 4 Then
[ô]ARMAZENO A LINHA CLICADA
iRow = Grid.RowSel
[ô]ARMAZENO A COLUNA CLICADA
iCol = Grid.ColSel

[ô]MOVO O TXTEDIT NA POSIÇÃO DA COLUNA X LINHA
txtEdit.Move Grid.Left + Grid.CellLeft, Grid.Top + Grid.CellTop, Grid.CellWidth, Grid.CellHeight
txtEdit.Text = Grid.Text
txtEdit.Visible = True
txtEdit.SetFocus
txtEdit.SelStart = 0
txtEdit.SelLength = Len(txtEdit.Text)
end if
end sub


Private Sub txtEdit_LostFocus()
Grid.TextMatrix(iRow, iCol) = IIf(txtEdit.Text = [Ô][Ô], 0, txtEdit.Text)
txtEdit.Visible = False
End Sub


o problema é o seguinte
quando to numa celular e pulo para outra celula, ele leva o conteudo da celula anterior para a que cliquei...

se eu for descendo usando a setinha do teclado na mesma coluna funciona beleza
agora se eu tive na coluna 3 e for para a 4, ele traz o que tá na 3 e coloca na 4.... ficando a 3 e a 4 com o mesmo conteudo.

o que devo fazer?
ROBIU 30/05/2011 13:13:31
#375323
Testei o seu código e está funcionando corretamente. Verifique se você está usando as váriáveis iRow e iCol para outras rotinas. Neste caso, tenta substituir iCol pela coluna, já que é fixo. Aparentemente o problema está em outra parte do projeto.

Tente isso:
Private Sub txtEdit_LostFocus()
Grid.TextMatrix(iRow, iCol) = IIf(TxtEdit.Text = [Ô][Ô], 0, TxtEdit.Text)
TxtEdit.Visible = False
iRow = 0
iCol = 0
End Sub


outra coisa é verificar o valor da iCol:
Private Sub txtEdit_LostFocus()
If iCol <> 4 Then Exit Sub
Grid.TextMatrix(iRow, iCol) = IIf(TxtEdit.Text = [Ô][Ô], 0, TxtEdit.Text)
TxtEdit.Visible = False
iRow = 0
iCol = 0
End Sub
WEBIER 30/05/2011 13:32:46
#375328
verifiquei e nao tõ usando essas variaveis em outro lugar nao:

fiz essas modificações agora:

[ô]no general
Private iRow1 As Integer
Private iCol1 As Integer
Private iRow2 As Integer
Private iCol2 As Integer
Private iRow3 As Integer
Private iCol3 As Integer
Private iRow4 As Integer
Private iCol4 As Integer
Private iRow5 As Integer
Private iCol6 As Integer


Private Sub Grid_Click()
If Grid.ColSel = 4 Then
iRow1 = Grid.RowSel
iCol1 = Grid.ColSel

[ô]MOVO O TXTEDIT NA POSIÇÃO DA COLUNA X LINHA
txtEdit.Move Grid.Left + Grid.CellLeft, Grid.Top + Grid.CellTop, Grid.CellWidth, Grid.CellHeight
txtEdit.Text = Grid.Text
txtEdit.Visible = True
txtEdit.SetFocus
txtEdit.SelStart = 0
txtEdit.SelLength = Len(txtEdit.Text)
ElseIf Grid.ColSel = 5 Then
iRow2 = Grid.RowSel
iCol2 = Grid.ColSel

[ô]MOVO O TXTEDIT NA POSIÇÃO DA COLUNA X LINHA
txtEdit.Move Grid.Left + Grid.CellLeft, Grid.Top + Grid.CellTop, Grid.CellWidth, Grid.CellHeight
txtEdit.Text = Grid.Text
txtEdit.Visible = True
txtEdit.SetFocus
txtEdit.SelStart = 0
txtEdit.SelLength = Len(txtEdit.Text)
ElseIf Grid.ColSel = 6 Then
iRow3 = Grid.RowSel
iCol3 = Grid.ColSel

[ô]MOVO O TXTEDIT NA POSIÇÃO DA COLUNA X LINHA
txtEdit.Move Grid.Left + Grid.CellLeft, Grid.Top + Grid.CellTop, Grid.CellWidth, Grid.CellHeight
txtEdit.Text = Grid.Text
txtEdit.Visible = True
txtEdit.SetFocus
txtEdit.SelStart = 0
txtEdit.SelLength = Len(txtEdit.Text)
ElseIf Grid.ColSel = 7 Then
iRow4 = Grid.RowSel
iCol4 = Grid.ColSel

[ô]MOVO O TXTEDIT NA POSIÇÃO DA COLUNA X LINHA
txtEdit.Move Grid.Left + Grid.CellLeft, Grid.Top + Grid.CellTop, Grid.CellWidth, Grid.CellHeight
txtEdit.Text = Grid.Text
txtEdit.Visible = True
txtEdit.SetFocus
txtEdit.SelStart = 0
txtEdit.SelLength = Len(txtEdit.Text)
ElseIf Grid.ColSel = 8 Then
iRow5 = Grid.RowSel
iCol5 = Grid.ColSel

[ô]MOVO O TXTEDIT NA POSIÇÃO DA COLUNA X LINHA
txtEdit.Move Grid.Left + Grid.CellLeft, Grid.Top + Grid.CellTop, Grid.CellWidth, Grid.CellHeight
txtEdit.Text = Grid.Text
txtEdit.Visible = True
txtEdit.SetFocus
txtEdit.SelStart = 0
txtEdit.SelLength = Len(txtEdit.Text)
ElseIf Grid.ColSel = 9 Then
iRow6 = Grid.RowSel
iCol6 = Grid.ColSel

[ô]MOVO O TXTEDIT NA POSIÇÃO DA COLUNA X LINHA
txtEdit.Move Grid.Left + Grid.CellLeft, Grid.Top + Grid.CellTop, Grid.CellWidth, Grid.CellHeight
txtEdit.Text = Grid.Text
txtEdit.Visible = True
txtEdit.SetFocus
txtEdit.SelStart = 0
txtEdit.SelLength = Len(txtEdit.Text)
End If
End Sub



Private Sub txtEdit_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 38 Then
If Grid.Row - 1 = 0 Then MsgBox [Ô]VOCÊ JÁ ESTÁ NA PRIMEIR LINHA !!![Ô], vbExclamation: Exit Sub
Grid.Row = iRow - 1
Grid.TextMatrix(iRow, iCol) = IIf(txtEdit.Text = [Ô][Ô], 0, txtEdit.Text)
Grid_Click
ElseIf KeyCode = 40 Then
If Grid.Rows = Grid.Row + 1 Then MsgBox [Ô]VOCÊ JÁ ESTÁ NA ULTIMA LINHA !!![Ô], vbExclamation: Exit Sub
Grid.TextMatrix(iRow, iCol) = IIf(txtEdit.Text = [Ô][Ô], 0, txtEdit.Text)
Grid.Row = iRow + 1
Grid_Click
End If
End Sub


Private Sub txtEdit_LostFocus()
If Grid.ColSel = 4 Then
Grid.TextMatrix(iRow1, iCol1) = IIf(txtEdit.Text = [Ô][Ô], 0, txtEdit.Text)
ElseIf Grid.ColSel = 5 Then
Grid.TextMatrix(iRow2, iCol2) = IIf(txtEdit.Text = [Ô][Ô], 0, txtEdit.Text)
ElseIf Grid.ColSel = 6 Then
Grid.TextMatrix(iRow3, iCol3) = IIf(txtEdit.Text = [Ô][Ô], 0, txtEdit.Text)
ElseIf Grid.ColSel = 7 Then
Grid.TextMatrix(iRow4, iCol4) = IIf(txtEdit.Text = [Ô][Ô], 0, txtEdit.Text)
ElseIf Grid.ColSel = 8 Then
Grid.TextMatrix(iRow5, iCol5) = IIf(txtEdit.Text = [Ô][Ô], 0, txtEdit.Text)
ElseIf Grid.ColSel = 9 Then
Grid.TextMatrix(iRow6, iCol6) = IIf(txtEdit.Text = [Ô][Ô], 0, txtEdit.Text)
End If

txtEdit.Visible = False

End Sub


ou seja, tenho varias colunas no grid para editar... então o problema é quando eu passo de uma para outra... de uma celula para outra na mesma linha... usando o mouse e o clique
ROBIU 30/05/2011 15:48:42
#375341
Resposta escolhida
Ajustei o seu código neste projeto.

[ô]em General
Dim iRow, iCol As Integer

Private Sub Form_Load()
Grid.Rows = 10
Grid.Cols = 10
End Sub

Private Sub Grid_Click()
Dim i As Integer

For i = 4 To 9
If Grid.ColSel = i Then
TxtEdit.Move Grid.Left + Grid.CellLeft, Grid.Top + Grid.CellTop, Grid.CellWidth, Grid.CellHeight
TxtEdit.Text = Grid.TextMatrix(Grid.Row, Grid.Col)
TxtEdit.Visible = True
TxtEdit.SetFocus
TxtEdit.SelStart = 0
TxtEdit.SelLength = Len(TxtEdit.Text)
iRow = Grid.Row
iCol = Grid.Col
End If
Next i

End Sub


Private Sub txtEdit_KeyUp(KeyCode As Integer, Shift As Integer)
Exit Sub
If KeyCode = 38 Then
If Grid.Row - 1 = 0 Then MsgBox [Ô]VOCÊ JÁ ESTÁ NA PRIMEIR LINHA !!![Ô], vbExclamation: Exit Sub
Grid.Row = iRow - 1
Grid.TextMatrix(iRow, iCol) = IIf(TxtEdit.Text = [Ô][Ô], 0, TxtEdit.Text)
Grid_Click
ElseIf KeyCode = 40 Then
If Grid.Rows = Grid.Row + 1 Then MsgBox [Ô]VOCÊ JÁ ESTÁ NA ULTIMA LINHA !!![Ô], vbExclamation: Exit Sub
Grid.TextMatrix(iRow, iCol) = IIf(TxtEdit.Text = [Ô][Ô], 0, TxtEdit.Text)
Grid.Row = iRow + 1
Grid_Click

End If
End Sub

Private Sub txtEdit_LostFocus()
Grid.TextMatrix(iRow, iCol) = IIf(TxtEdit.Text = [Ô][Ô], 0, TxtEdit.Text)
TxtEdit.Visible = False
End Sub
WEBIER 30/05/2011 17:25:46
#375356
Valew Roberto!
Tópico encerrado , respostas não são mais permitidas