Gambas France BETA


Pas de compte ? Incription

Filtrer un TableView

À propos de ce code

Et voila "le filtre"

qui consiste en fait à cacher des lignes ou des colonnes
pTableView est le TableView de la forme,
ColToFilter est la colonne de référence pour lequel le fitre va s'appliquer,
FilterSign soit Egale, soit Différent,
FilterValue est la valeur de filtre

/ex je ne veux que les lignes ou je vois "TOTO" dans la colonne N°9

Filtre(TableView1, 9, "Egale", "TOTO")

Code source

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
PUBLIC SUB Filtre(pTableView AS TableView, ColToFilter AS INTEGER, FilterSign AS STRING, FilterValue AS STRING) AS BOOLEAN

DIM y AS INTEGER
DIM GridRowNbr AS INTEGER
DIM GridColNbr AS INTEGER
DIM CellVal AS STRING

GridColNbr = pTableView.Columns.Count
GridRowNbr = pTableView.Rows.Count

IF FilterSign = "Egale" THEN
FOR y = 0 TO GridRowNbr - 2 '- 2 a cause de la ligne total
CellVal = pTableView[y, ColToFilter].Text
IF CellVal <> FilterValue THEN
pTableView.Rows[y].Height = 0
ENDIF
NEXT
ENDIF

IF FilterSign = "Different" THEN
FOR y = 0 TO GridRowNbr - 2
CellVal = pTableView[y, ColToFilter].Text
IF CellVal = FilterValue THEN
pTableView.Rows[y].Height = 0
ENDIF
NEXT

ENDIF
RETURN TRUE

CATCH
'Message.Error(Error.Text & " " & Error.Where)
RETURN FALSE
END

Commentaires

Commentaire de gambix, Le 9/4/2013 à 00:03:33
sinon il y aurait la double table
un tableau de valeurs contenant les éléments a afficher. Et un tableau d'entier indexant les valeurs a afficher.

ainsi column.count est fournit par le tableau d'index

en pseudo code:

gridview_data(row,column)

if bHavefilter then
last.data.text = myvalue[myindex[row]]
else
last.data=myValue[row]
endif

end


Public sub MakeFilter(optional myfilter)
myindex.clear
if not myfilter then
bHaveFilter = False
gridview.row.count = myValue.count
endif
for i = 0 to myvalue.max
if myvalue=myfilter then myindex.add(i)
next
bHaveFilter = true
gridview.row.count = myindex.count
end

Ainsi j'utilise la technique données/vue