Witam,
Najprostszym z punktu widzenia sortowania byłoby zastosowanie obiektu PmDataTable, w którym jest dostępna funkcja sortowania według jednej kolumny.
W celu zesortowania według kilku kolumn należałoby tabelę zesortować według kolumny ostatniej w liście sortowania.
Np. jeżeli tabela powinna być zesortowana według np. kolumn:
nazwa,
miejscowość,
kwota_zamowieniato najpierw powinno się tabelę zesrotować wg kolumny kwota_zamowienia, następnie wg miejscowości i na końcu wg nazwy.
W tym przypadku można w prosty sposób zapewnić sortowanie w aplikacji w obiekcie PmDataTable przy pomocy metody
Sorthttp://www.promotic.eu/pl/pmdoc/Objects/Promotic/PmDataTable/Meth/Sort.htm.
Natomiast filtrowanie można zapewnić w ten sposób, że do każdej kolumny należałoby przygotować nowy element graficzny, jeżeli tabela posiada z góry znaną i niezmienną ilość kolumn.
Ewentualnie można by do tabeli dodać jeden wiersz
POD nagłówkiem, w którym można by wpisywać wartości do filtrowania.
Niestety w chwili obecnej tabela nie ma możliwości edycji w oknie przeglądarki webowej.
Następnie przy odczytaniu zawartości z obiektu PmDataTable (np. przy pomocy metody GetArray tego obiektu) należy w pętli wpisać poszczególne wartości poszczególnych wierszy.
Przykład takiego wypełniania tabeli jest do dyspozycji w przykładowej aplikacji w katalogu systemu PROMOTIC, w podkatalogu
Examples\Others\AppDB.
W tym katalogu znajduje się aplikacja, które pokazuje między innymi sposób pracy z obiektem PmTable - wyświetlenie w nim wartości z dwuwymiarowej tablicy danych.
Niżej dodaję przykładowy skrypt, ktory zapewnia wyświetlenie danych w tabeli z tablicy dwuwymiarowej uzyskanej przy pomocy
metody wytworzonej przez projektanta o nazwie
LoadData.
W tym skrypcie można oczywiście dodać ewentualne pominięcie wiersza w tabeli, jeżeli taki wiersz nie powinien być wyświetlony.
- Code: Select all
Dim oTable, arrData, i, j
Set oTable = pMe.Items("/ax0").Acx
arrData = pMe.PmPanel.Methods.LoadData()
if IsArray(arrData) then
oTable.RemoveRow -3
for i = 0 to UBound(arrData, 2)
' w tym miejscu należałoby sprawdzać, czy należy wytworzyć nowy wiersz w tabeli czy też nie w zależności od wymagań.
' wartości do porównywania można odczytywać np. z drugiego wiersza tabeli (jeżeli ten wiersz zostałby przeznaczony do wprowadzania wartości filtra)
' lub z oddzielnych elementów graficznych typu pmiText lub pmiWCombo
' odnośnie filtra w drugim wierszu tabeli należało by wtedy nie usuwać tego wiersza z tabeli, lub przed jego usunięciem zapamiętać wszystkie wartości z tego wiersza
' i po jego wytworzeniu ponownie je przypisać.
oTable.InsertRow -2
for j = 0 to UBound(arrData, 1)
oTable.CellText(-2, j) = arrData(j, i)
next
next
end if
oTable.Draw
Pozdrawiam