Pagina 1 di 1

Grid control con dati filtrati

Inviato: sabato 23 aprile 2022, 10:30
da Luka2017
Buongiorno
avrei necessità tramite la formula che vi allego, la possibilità di inserire all'interno del grid control i dati filtrati presenti in un foglio. Il problema che mi appare nella grid control solamente i dati filtrati presenti nella colonna "A" e non i dati presenti nelle colonne successive. Mi potete Aiutare? Grazie mille.

Codice: Seleziona tutto

Sub Grid_stand
Dim oCell
Dim oFilterDesc
Dim oTextBox
Dim Arr
dlgmodel = oDialogo11.getModel()
gridmodel = dlgmodel.createInstance("com.sun.star.awt.grid.UnoControlGridModel")
with gridmodel
.PositionX = 352
.PositionY = 35
.Width = 178
.Height = 172
end with  
  ' add columns
  columnmodel = gridmodel.ColumnModel
  
  col = columnmodel.createColumn()
  col.Title = "STAND"
  columnmodel.addColumn(col)
  
  col = columnmodel.createColumn()
  col.Title = "ID. COD."
  columnmodel.addColumn(col)
  
  col = columnmodel.createColumn()
  col.Title = "DESCRIZIONE"
  columnmodel.addColumn(col)
  
  col = columnmodel.createColumn()
  col.Title = "Q.TA'"
  columnmodel.addColumn(col)
If oDialogo11.getControl("TextField1").text <>"" Then
 dlgmodel.insertByName("grid", gridmodel)
  grid = oDialogo11.getControl("grid")
  oListener = (CreateUnoListener("grid_", "com.sun.star.awt.grid.XGridSelectionListener"))
grid.addSelectionListener(oListener)
datamodel = gridmodel.GridDataModel
Dim oFields(0) As New com.sun.star.sheet.TableFilterField2
Sheet = ThisComponent.Sheets(1)
oTextBox = oDialogo11.getControl("TextField1")
Daric = UCase(oTextBox.Text)
c = Sheet.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 1
CellRange = Sheet.getCellRangeByName("A2:A" & LastRow)
oFilterDesc = CellRange.createFilterDescriptor(True)
  With oFields(0)
      .Field = 0
      .Operator = com.sun.star.sheet.FilterOperator2.BEGINS_WITH
      .StringValue = Daric
  End With
oFilterDesc = CellRange.createFilterDescriptor(True)
With oFilterDesc
    .ContainsHeader = False
    .CopyOutputData = False
    .FilterFields2 = oFields()    
End With
CellRange.filter(oFilterDesc)
ranges = CellRange.queryVisibleCells()
If Ubound(ranges.RowDescriptions) > -1 Then 
  ReDim Arr(0 To Ubound(ranges.RowDescriptions))
  Dim a(0 To Ubound(ranges.RowDescriptions))
  For Each oCell in ranges.Cells
        Arr(x) = oCell.CellAddress.Row 
       a(x) = oCell.DataArray(0)
       x = x +1
  Next
  datamodel.addRows(a, a)
End if
End if
End Sub

Re: Grid control con dati filtrati

Inviato: sabato 23 aprile 2022, 18:40
da patel
Allega un file di esempio.
Non hai allegato una "formula" ma una MACRO

Re: Grid control con dati filtrati

Inviato: martedì 26 aprile 2022, 11:05
da Luka2017
Buongiorno scusa il ritardo e invece di scrivere macro ho scritto formula. In allegato ti inserisco il file.

Grazie Mille

Re: Grid control con dati filtrati

Inviato: giovedì 5 maggio 2022, 14:19
da charlie
Rilancio.

Re: Grid control con dati filtrati

Inviato: giovedì 5 maggio 2022, 17:26
da geovign
Ciao Luka2017,
nella macro Sub Fitro_grid , sostituisci le righe

Codice: Seleziona tutto

For Each oCell in ranges.Cells
Arr(x) = oCell.CellAddress.Row
a(x) = oCell.DataArray(0)
x = x +1
Next
con

Codice: Seleziona tutto

For Each oCell in ranges.Cells
Arr(x) = oCell.CellAddress.Row
oRiga = Sheet.getRows.getByIndex(Arr(x))
a(x) = oRiga.DataArray(0)
x = x +1
Next
Il resto non cambia.
Saluti.
Geo

Re: Grid control con dati filtrati

Inviato: giovedì 5 maggio 2022, 18:14
da Luka2017
Ciao Geo domani pomeriggio ci provo perché sono fuori. Sono certo che funziona e ti darò riscontro. Grazie mille :super:

Re: Grid control con dati filtrati

Inviato: venerdì 6 maggio 2022, 23:00
da unlucky83

Codice: Seleziona tutto

For Each oCell in ranges.Cells
        Arr(x) = oCell.CellAddress.Row
       a(x) = Sheet.getcellrangebyposition(0,Arr(x),4,Arr(x)).DataArray(0)
       x = x +1
  Next
Prova allegato

Re: Grid control con dati filtrati

Inviato: sabato 7 maggio 2022, 16:58
da Luka2017
Ho provato e funziona benissimo. Un ultima cosa e non disturbo più. Spero!

Come faccio a far apparire nel textbox2 il nome della riga che ho selezionato?

Ti allego il file

Grazie Mille ;)

Re: Grid control con dati filtrati

Inviato: sabato 7 maggio 2022, 21:19
da unlucky83
Non ho soddisfatto la tua richiesta a pieno.
Hai bisogno di aggiungere una macro per il listener che stai adoperando, quindi ti serve come minimo

Codice: Seleziona tutto

Sub grid_selectionChanged(oEvt)
...
End Sub
Visto che nel Dialog2 non esiste nessun oggetto di nome textbox2, ho preferito prepararti la seguente macro che è un punto di partenza utile per capire come popolare i campi che desidererai riempire. In un msgbox ho inserito i richiami ai vari campi della riga selezionata

Codice: Seleziona tutto

Sub grid_selectionChanged(oEvt)
dim indice
indice=oEvt.Source.CurrentRow
row_selected=datamodel.GetRowData(indice)
MsgBox "selected row: " & indice & chr(13) & "Cognome: " & row_selected(0) & chr(13) & "Nome: " & row_selected(1) & chr(13) & "Cod: " & row_selected(2) & chr(13) & "Descrizione: " & row_selected(3) & chr(13) &"Qtà: " & row_selected(4) 
End Sub
Allego esempio

Re: Grid control con dati filtrati

Inviato: domenica 8 maggio 2022, 8:28
da geovign
Al quesito originale, hai invece risposto pienamente.
Luka2017 ha successivamente "integrato" il quesito con una nuova richiesta.
Saluti
Geo

Re: Grid control con dati filtrati

Inviato: domenica 8 maggio 2022, 10:37
da Luka2017
Grazie comunque ho risolto con questa macro.

Codice: Seleziona tutto

Sub grid_selectionChanged(oEvt)
indice=oEvt.Source.CurrentRow
row_selected=datamodel.GetRowData(indice)
oDialogo16.getControl("TextField1").Text = row_selected(1)
End Sub

Re: [Risolto] Grid control con dati filtrati

Inviato: lunedì 29 luglio 2024, 17:31
da Luka2017
Buonasera,
A seguito di questa macro è possibile modificare il dato presente nel
oDialogo16.getControl("TextField1").Text
Per salvarlo nella cella che fa parte della riga selezionata nel grid control?
Grazie mille in anticipo