Pergunte aqui
0

Como obter o número da linha de um grid?

perguntadas 2013-10-04 01:11:53 +0200

imagem do gravatar de Oldair

Tenho uma macro no Calc que apresenta uma pesquisa em um grid e preciso retornar o número da linha que foi selecionada, mas o Basic apresenta a seguinte mensagem: "Propriedade ou método não encontrado: Row" A estrutura da macro é

Sub XGridSelection_selectionChanged(oEvt) msgBox "selected row: " & oEvt.Row End Sub

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

0

respondidas 2015-09-19 19:43:03 +0200

imagem do gravatar de LuizCarlos18RJ

Veja a minha pergunta: "LibreOffice Base, como excluir mais de um registro ao mesmo tempo?"

https://ask.libreoffice.org/pt-br/que...

Nessa minha pergunta, o nosso amigo Grafeno gentilmente me forneceu um trecho de código que resolveu meu problema, eu apenas tive que adaptar alguma coisa a realidade do meu formulário, porém nesse código ele exibe a linha do número de um registro selecionado na grid, que é o que vc quer.

Segue o código:

Sub BotExcluirSelecoes_Click()
Dim mRegistrosSel() As Variant, nRegistro As Variant
Dim oForm As Object, oModelTab As Object
Dim oCtrldorTab As Object, oRcdSet2 As Object
Dim sRegistro As String, sTmp As String


    oForm = Forms("FormProdutos") 'Formulário
    oModelTab = oForm.Controls("CtrleTabela1").ControlModel 'Model Controle Tabela
    oRcdSet2 = oForm.RecordSet.Clone() 'Clone do Recordset do Form

    'Obter o controlador do Ctrle Tabela (API UNO original)
    oCtrldorTab = ThisComponent.CurrentController.getcontrol( oModelTab )
    mRegistrosSel = oCtrldorTab.getSelection 'Registros selecionados

    If ubound( mRegistrosSel ) = -1 Then 
        MsgBox "Por favor, selecione o(s) registro(s) que deseja excluir!",48
        Exit sub
    End If

    For Each nRegistro in mRegistrosSel 'Para cada registro selecionado 
        oRcdSet2.AbsolutePosition = nRegistro 'pula para o registro
        sRegistro = oRcdSet2.Fields(1).Value 'String da Coluna "Nome"
        sTmp = sTmp & nRegistro & ". " & sRegistro & Chr(10)
    Next

    MsgBox sTmp
End Sub

Então basicamente pra resumir vc deve seguir os passos:

1 - Além de crirar variáveis do tipo "Object" para referenciar os controles do formulário como no caso o formulário princial ( ou no seu caso a planilha )e o objeto grid, vc tb deve criar variváveis do tipo "variant" para variáveis que vão usar os métodos "getselect" ( registro selecionado ) e "absoluteposition" ( valor da posição absoluto )

2 - Referenciar os controles e criar um "RecordSet.Clone()" da fonte de dados da sua grid que se for a mesma do formulário o código seria:

    oForm = Forms("FormProdutos")                                                 'Referencia seu Formulário principal
    oModelTab = oForm.Controls("CtrleTabela1").ControlModel          'Referencia sua grid
    oRcdSet2 = oForm.RecordSet.Clone() '                                        'Clone do Recordset do Form

 'Referencia o controlador da sua gris ( necessário)
    oCtrldorTab = ThisComponent.CurrentController.getcontrol( oModelTab )

    mRegistrosSel = oCtrldorTab.getSelection                                   'Registros selecionados

   For Each nRegistro in mRegistrosSel 'Para cada registro selecionado 
        oRcdSet2.AbsolutePosition = nRegistro                                   'recebe o valor da linha da grid selecionada
        sRegistro = oRcdSet2.Fields(1).Value                                     'String uma coluna qualquer"

 ' exibe assim:  Número da linha . texto qualquer do(s) registro(s) selecionado(s)

        sTmp = sTmp & nRegistro & ". " & sRegistro & Chr(10)   

    Next

    MsgBox sTmp

Saída: ( NO CASO DE 3 REGISTROS SELECIONADOS)

 1.texto1
13.texto13
22.texto22 

mas se a grid tiver outra fonte de dados como uma consulta por exemplo vc referencia assim:

 oForm = Forms("FormProdutos")                                                                                  'Referencia Form principal
 oModelTab = oForm.Controls("CtrleTabela1").ControlModel                                           'Referencia sua grid
 Set oRcdSet1 = Application.CurrentDb().OpenRecordset("nome_da_consulta_da_grid")   ' Referencia dados da grid
 Set oRcdSet2 = oRcdSet1.Clone()                                                                                'Clona o recordset

No segundo caso o restante do código é o mesmo do primeiro, no fim ia exbir a(s) linha(s) selecionada(s) e a posição dessa(s) linha(s).

Espero ter ajudado...

editar assinalar como ofensivo Excluir Link mais
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2013-10-04 01:11:53 +0200

Lidas: 231 vezes

Última atualização: Sep 19 '15