Wykład 6 PB

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 3

Wykład4PB

Wyróżnianie wierszy w DataWindow

Jeśli formularz używany do przeglądania danych pokazuje wiele rekordów na jednym


ekranie, to warto czasem wyróżnić bieżący wiersz innym kolorem aby użytkownik
przeglądający dane mógł bez trudu widzieć ten wiersz w którym jest kursor. Wiersz taki może
być jednocześnie modyfikowany i wówczas wyróżnienie go jest jeszcze bardziej potrzebne.

W chwili wybrania danych do DataWindow bieżącym rekordem (wierszem ) staje się wiersz
pierwszy DW. Aby taki wiersz wyróżnić innym kolorem musimy użyć polecenia :

SelectRow(0, true). Wygaszenie podświetlenia nastąpi po wykonaniu SelectRow(0, false)

Ogólna postać tego polecenia jest następująca:


SelectRow( nr_wiersza, true/false)

Inne funkcje stosowane do wyróżniania i wygaszania wierszy w DataWindow:

IsSelected(nr_wiersza) - sprawdza czy wiersz jest wyróżniony czy nie i zwraca wartość
logiczną true lub false

SetRow(nr_wiersza) - ustawia wiersz bieżący w DataWindow na podany numer ale nie


przewija DataWindow

SetColumn(nr_kol) - ustawia bieżącą kolumnę

GetRow() - określa numer wiersza bieżącego w dataWindow

GetSelectedRow(nr_p_wiersza) - określa, który wiersz z danego zakresu jest wyróżniony

ScrollToRow(nr_wiersza) - przewija DataWindow do wiersza wskazanego numerem

Przykład.

Skrypt związany z obiektem dialogowym DataWindow, wyróżnia kliknięte wiersze.


(związany jest ze zdarzeniem clicked obiektu dialogowego DW)
boolean stan
This.SelectRow(poprzedni, false)
biezacy = This.GetRow()
stan = This.IsSelected(biezacy)
IF stan THEN
This.SelectRow(biezacy, false)
ELSE
This.SelectRow(biezacy, true)
End If
poprzedni = biezacy
Sortowanie danych w DataWindow

Wybrane wiersze w DataWindow można posortować wg podanego kryterium.


Najwygodniej można to zrobić wstawiając dodatkowe obiekty dialogowe np. checkbox lub
radiobutton , umożliwiające użytkownikowi wybranie atrybutów, które mogą być kryterium
sortowania.
Funkcja SetSort("#nr_kol A/D") umożliwia posortowanie danych w DataWindow według
kolumny o podanym numerze rosnąco - A lub malejąco - D.
Numer kolumny musi być zgodny z kolejnością występowania atrybutów w zdaniu select,
określającym jakie dane mają być wybrane do DataWindow.
Np. dw_autor.SetSort(#2 A) - ustawia kryterium sortowania wierszy w DataWindow
rosnąco według drugiej kolumny.
Wykonanie sortowania odbywa się poprzez wykonanie funkcji Sort(). Na przykład:
Dw_autor.Sort()

Filtr w DataWindow

Tworząc Formularz do przeglądania danych nie możemy przewidzieć wszystkich sposobów


wyboru danych jakie będą użytkownikowi potrzebne. Możemy zatem standardowo wybierać
wszystkie dane i następnie pozwolić ustalić jeden lub kilka warunków filtrowania.
Wygodną formą ustalania warunków wyboru są pola wyboru typu checkbox lub radio.
Pierwszy typ obiektów pozwala wybrać kilka opcji, drugi natomiast tworzy grupę przycisków
i umożliwia wybranie tylko jednej opcji z tej grupy.
Jeśli chcemy spośród autorów prac dyplomowych wybrać tych którzy otrzymali ocenę bardzo
dobrą to wystarczy wstawić obiekt checkbox i sprawdzać czy został zaznaczony (kliknięty)
Przez użytkownika. Następnie ustawiamy filtr, który zawiera warunek nałożony na pole
ocena. ( ocena = 5 )

Ustawienie filtra wykonujemy używając funkcji SetFilter( warunek), a filtrowanie


wykonujemy za pomocą funkcji Filter()

Przykład

Poniższy skrypt został przypisany do zdarzenia clicked obiektu checbox .


String flt
IF cbx_ocena = true THEN
flt= 'ocena = 5'
ELSE
flt = ''
END IF
dw_autor.SetFilter( flt )
dw_autor.Filter()

Wyszukiwanie przybliżone w DataWindow.

Jeśli liczba rekordów wybranych do DW jest duża, to bardzo użyteczną funkcją pomagającą
szybko ustawić się na wybrany rekord jest wyszukiwanie przybliżone realizowane za pomocą
obiektu SingleLineEdit. Użytkownik wprowadza w linii obiektu SLE tekst, który następnie
traktowany jest jak szablon wyszukiwania, dzięki któremu następuje wybranie rekordu wśród
rekordów DW, zgodnego z tym szablonem.
Możemy taki efekt uzyskać przypisując odpowiedni skrypt do zdarzenia modified obiektu
SLE. Tekst wpisany przez użytkownika w linii SLE będzie odszukany wśród rekordów
DataWindow jeśli klikniemy poza polem SLE.
Jednak lepszym rozwiązaniem będzie zdefiniowanie własnego zdarzenia, które powiązane
zostanie ze zdarzeniem PB przechwytującym uderzenia klawiszy (pbm_keyup).
Ustawmy się na obiekt SLE i wybierzmy nowe zdarzenie. Nadajmy mu nazwę klawisz
i powiążmy ze zdarzeniem systemowym pbm_keyup. Nowemu zdarzeniu przypisujemy
skrypt, który będzie realizował odpowiednie wyszukiwanie rekordów i przewijanie DW do
najbardziej podobnego szablonu określonego poprzez kryteria wpisane przez użytkownika w
SLE.

Przykład skryptu .

string w_szukana, wyrazenie, pole_wysz


long nr_wiersza, l_wierszy
w_szukana = Lower(Trim(sle_szukaj.text))
l_wierszy = dw_autor.RowCount()
pole_wysz = "Lower(#8)"
wyrazenie = pole_wysz + " = '"+ w_szukana + "'"
nr_wiersza = dw_autor.Find(wyrazenie, 1, l_wierszy)
if nr_wiersza = 0 then
wyrazenie = pole_wysz + " <= '" + w_szukana +"'"
nr_wiersza = Min(dw_autor.Find( wyrazenie, l_wierszy, 1) + 1, l_wierszy)
end if
dw_autor.SetRedraw(false)
dw_autor.ScrollToRow(nr_wiersza)
dw_autor.SelectRow(0,false)
dw_autor.SelectRow(nr_wiersza, true)
dw_autor.SetRedraw(true)

You might also like