MSFLEXGRID - PROBLEMA NO DBCLICK - VB6

FERRUBIM 27/04/2013 13:40:38
#422604
Alguem pode me ajudar pois nao sei mais o q fazer:
tenho um msflexgrid onde faço o select e mostra todos os dados..(por exemplo,cria 3 linhas no msflexgrid)..
logo depois quero dar um duploclick na [Ô]primeira[Ô] linha pegando a primeira coluna dessa linha para abrir uma outra tela, mas não sei porque, ele pega sempre a [Ô]terceira[Ô] linha e abre com o dado desta linha...
ele não pega o .row da linha em q cliquei,parece q fica na memoria o .row da ultima linha de onde montei o flexgrid..
alguem sabe pq isso ocorre ?? como posso solucionar isso ???
SAMUKA 27/04/2013 15:56:20
#422607
Resposta escolhida
Segue o código pra pegar o valor que está na Coluna 1 e na linha que foi dado o duplo-click

  
Private Sub grid_DblClick()
If grid.RowSel = 0 Then Exit Sub
Dim ret as String
ret = grid.TextMatrix(grid.RowSel, 0)
End Sub


OBSERVAÇÃO: A coluna e a linha começam a contar do 0(zero) e não de 1.
OMAR2011 27/04/2013 17:05:36
#422611
Coloque seu código,com pega o valor da linha e
como abre o outro formulário.
FERRUBIM 27/04/2013 17:09:30
#422612
Samuka, olha o comando q faço: não sei como mesmo clicando na primeira linha, o rowsel vem com 2 ...nao consigo descobrir o pq... esse programa tem 4 [Ô]abas[Ô] ..se carrego o msflexgrid,chamo outra aba qq e volto para a aba do msflexgrid,dai funciona,,,q loucura...

GRIDEPROCESSO.col = 0
If GRIDEPROCESSO.Text = [Ô][Ô] Or GRIDEPROCESSO.Text = [Ô]Processo[Ô] Then
CADTIPOPROC.nm_cliente = DTX_NM_CLIENTE
CADTIPOPROC.nr_cgc = KTX_NR_CGC
CADTIPOPROC.nr_contrato = wc_nr_contrato
CADTIPOPROC.Show 1
sl_busca_GridePROCESSO
Exit Sub
End If
[ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô]
WL_NR_PROCESSO = GRIDEPROCESSO.TextMatrix(GRIDEPROCESSO.RowSel, 0)
WL_TIPO_ACAO = GRIDEPROCESSO.TextMatrix(GRIDEPROCESSO.RowSel, 1)
SAMUKA 27/04/2013 17:31:23
#422613
FERRUBIM, por acaso você não usa 2 linhas como cabeçalho né??
FERRUBIM 27/04/2013 17:43:05
#422614
Nao,apenas 1....cara,é como se o row ficasse preso no ultimo qdo faço a leitura para preencher...como te disse se mudo de aba e volto,funciona..preencho assim:

** uma duvida, depois de preencher tenho q dar algum comando para limpar algo ??? ****


GRIDEPROCESSO.Clear
GRIDEPROCESSO.row = 0
GRIDEPROCESSO.col = 0
GRIDEPROCESSO.ColWidth(0) = 2120
GRIDEPROCESSO.ColAlignment(0) = 2
GRIDEPROCESSO.Text = [Ô]Processo[Ô]
GRIDEPROCESSO.col = 1
GRIDEPROCESSO.ColWidth(1) = 600
GRIDEPROCESSO.ColAlignment(1) = 2
GRIDEPROCESSO.Text = [Ô]Ação[Ô]
GRIDEPROCESSO.col = 2
GRIDEPROCESSO.ColWidth(2) = 2900
GRIDEPROCESSO.ColAlignment(2) = 2
GRIDEPROCESSO.Text = [Ô]Tipo Ação[Ô]
GRIDEPROCESSO.col = 3
GRIDEPROCESSO.ColWidth(3) = 3500
GRIDEPROCESSO.ColAlignment(3) = 2
GRIDEPROCESSO.Text = [Ô]Situação[Ô]
wl_Cont = 0
wl_Select = [Ô]Select *[Ô]
wl_Select = wl_Select & [Ô] FROM TAB_ACAOCONTRA[Ô]
wl_Select = wl_Select & [Ô] WHERE [Ô]
wl_Select = wl_Select & [Ô] NR_CGC = [Ô] & KTX_NR_CGC.Text & [Ô][Ô]
wl_Select = wl_Select & [Ô] AND NR_CONTRATO = [ô][Ô] & wc_nr_contrato & [Ô][ô][Ô]
Set cur_DadosForm = db.OpenRecordset(wl_Select)
With cur_DadosForm
Do While Not .EOF
wl_Cont = wl_Cont + 1
If wl_Cont > 300 Then
.Close
Exit Sub
End If
GRIDEPROCESSO.row = wl_Cont
GRIDEPROCESSO.col = 0
GRIDEPROCESSO.Text = IIf(IsNull(!nr_processo), [Ô][Ô], !nr_processo)
WG_NR_PROCESSO = IIf(IsNull(!nr_processo), [Ô][Ô], !nr_processo)
GRIDEPROCESSO.col = 1
GRIDEPROCESSO.Text = [Ô]Contra[Ô]
GRIDEPROCESSO.col = 2
GRIDEPROCESSO.Text = IIf(IsNull(!tipo), [Ô][Ô], !tipo)
WG_FASE_PROCESSO = IIf(IsNull(!SITUACAO_PROCESSUAL), [Ô][Ô], Trim(!SITUACAO_PROCESSUAL))
wl_Select = [Ô]SELECT * [Ô]
wl_Select = wl_Select & [Ô] FROM AND_PROCESSO (INDEX = IK_AND_PROCESSO_POR_CGC)[Ô]
wl_Select = wl_Select & [Ô] WHERE [Ô]
wl_Select = wl_Select & [Ô] NR_CGC = [Ô] & KTX_NR_CGC.Text & [Ô][Ô]
wl_Select = wl_Select & [Ô] AND NR_CONTRATO = [ô][Ô] & wc_nr_contrato & [Ô][ô][Ô]
wl_Select = wl_Select & [Ô] AND NR_PROCESSO = [ô][Ô] & WG_NR_PROCESSO & [Ô][ô][Ô]
wl_Select = wl_Select & [Ô] ORDER BY DT_ACAO DESC[Ô]
Set cur_DadosForm = db.OpenRecordset(wl_Select)
With cur_DadosForm
If Not .EOF Then
WG_FASE_PROCESSO = IIf(IsNull(!DS_TIPO_ATRASO), [Ô] [Ô], !DS_TIPO_ATRASO)
Else
[ô][ô][ô] WL_DS_TIPO_ATRASO = [Ô][Ô]
End If
.Close
End With
GRIDEPROCESSO.col = 3
GRIDEPROCESSO.Text = WG_FASE_PROCESSO
proxger:
.MoveNext
Loop
.Close
End With

SAMUKA 27/04/2013 18:05:15
#422615
Não é necessário digitar nada.

Dica: você pode utilizar, não tem nada a ver com o problema, mas o codigo diminui bastante

GRIDEPROCESSO.AddNew [Ô]1ª Coluna[Ô] & vbTab & [Ô]2ª Coluna[Ô] & vbTab & [Ô]3ª Coluna[Ô] & vbTab [Ô]4ª Coluna[Ô]


Outra dica, dessa forma não é preciso setar a ROW


GRIDEPROCESSO.ColWidth(0) = 2120
GRIDEPROCESSO.ColAlignment(0) = 2
GRIDEPROCESSO.TextArray(0) = [Ô]Processo[Ô]
FERRUBIM 29/04/2013 15:18:47
#422690
SAMUKA, fiz assim,está correto ??? pois nao mostra nada na msflexgrid ....o q faltou eu fazer ???

GRIDEPROCESSO.ColWidth(0) = 2120
GRIDEPROCESSO.ColAlignment(0) = 2
GRIDEPROCESSO.TextArray(0) = [Ô]Processo[Ô]
GRIDEPROCESSO.col = 1
GRIDEPROCESSO.ColWidth(1) = 600
GRIDEPROCESSO.ColAlignment(1) = 2
GRIDEPROCESSO.TextArray(1) = [Ô]Ação[Ô]
GRIDEPROCESSO.col = 2
GRIDEPROCESSO.ColWidth(2) = 2900
GRIDEPROCESSO.ColAlignment(2) = 2
GRIDEPROCESSO.TextArray(2) = [Ô]Tipo Ação[Ô]
GRIDEPROCESSO.col = 3
GRIDEPROCESSO.ColWidth(3) = 3500
GRIDEPROCESSO.ColAlignment(3) = 2
GRIDEPROCESSO.TextArray(3) = [Ô]Situação[Ô]

wl_Select = [Ô]Select *[Ô]
wl_Select = wl_Select & [Ô] FROM TAB_ACAOCONTRA[Ô]
wl_Select = wl_Select & [Ô] WHERE [Ô]
wl_Select = wl_Select & [Ô] NR_CGC = [Ô] & KTX_NR_CGC.Text & [Ô][Ô]
wl_Select = wl_Select & [Ô] AND NR_CONTRATO = [ô][Ô] & wc_nr_contrato & [Ô][ô][Ô]
Set cur_DadosForm = db.OpenRecordset(wl_Select)
With cur_DadosForm
Do While Not .EOF
WG_NR_PROCESSO = IIf(IsNull(!nr_processo), [Ô][Ô], !nr_processo)
GRIDEPROCESSO.Text = IIf(IsNull(!tipo), [Ô][Ô], !tipo)
WG_FASE_PROCESSO = IIf(IsNull(!SITUACAO_PROCESSUAL), [Ô][Ô], Trim(!SITUACAO_PROCESSUAL))
wl_Select = [Ô]SELECT * [Ô]
wl_Select = wl_Select & [Ô] FROM AND_PROCESSO (INDEX = IK_AND_PROCESSO_POR_CGC)[Ô]
wl_Select = wl_Select & [Ô] WHERE [Ô]
wl_Select = wl_Select & [Ô] NR_CGC = [Ô] & KTX_NR_CGC.Text & [Ô][Ô]
wl_Select = wl_Select & [Ô] AND NR_CONTRATO = [ô][Ô] & wc_nr_contrato & [Ô][ô][Ô]
wl_Select = wl_Select & [Ô] AND NR_PROCESSO = [ô][Ô] & WG_NR_PROCESSO & [Ô][ô][Ô]
wl_Select = wl_Select & [Ô] ORDER BY DT_ACAO DESC[Ô]
Set cur_DadosForm = db.OpenRecordset(wl_Select)
With cur_DadosForm
If Not .EOF Then
WG_FASE_PROCESSO = IIf(IsNull(!DS_TIPO_ATRASO), [Ô] [Ô], !DS_TIPO_ATRASO)
Else
WG_FASE_PROCESSO = [Ô][Ô]
End If
.Close
End With
GRIDEPROCESSO.AddItem WG_NR_PROCESSO & vbTab & [Ô]Contra[Ô] & vbTab & WG_FASE_PROCESSO & vbTab & WG_FASE_PROCESSO

proxger:
.MoveNext
Loop
.Close
End With
FERRUBIM 29/04/2013 15:39:03
#422696
SAMUKA,JA DESCOBRI..VALEU...
Tópico encerrado , respostas não são mais permitidas