Rozszerzanie kontroli czy zestawy funkcji globalnych ?

0

Witam !

Buduje program wykorzystujący komponent DBGrid. Potrzebuje dla estetyki zmieniać domyślny rozmiar kolumn. Można robić to na piechotę lub zautomatyzować. Nie chce za każdym razem zmieniać ręcznie rozmiaru z ryzykiem, że nie przewidzę tego co w kolumnie się znajdzie. Można albo zrobić funkcję przyjmującą grida i na podstawie tego co tam jest by resizowała kolumny lub, iść moim zdaniem w wygodniejszy i bardziej spójny sposób - zbudować kontrolkę dziedziczącą po DBGrid która domyślnie sama by się dopasowywała do zawartości kolumn i jedynie na żądanie rozszerzała. Co o tym sądzicie ?

0

a może trochę inaczej - przy projektowaniu określaszszerokość każdej z kolumn i pozwalasz użytkownikowi dopasować swoje upodobania. Jeżeli korzystasz ze zwykłego DBGrida, to może RxLibrary lub po prostu JEDI byłyby dla Ciebie?

0

JEDI wydaje się opuszczonym projektem... natomiast nie korzystam z Delphi tylko z Lazarusa więc rx odpasa. Właśnie chciałem ustalić jakiś standardowy rozstaw kolumn bez iterowania po każdym gridzie czy po zmianie datasourca tylko żeby klasa sama się o to troszczyła.

1

Ile razy na sekundę ma odczytywać wszystkie 5 mln rekordów (albo ile tam będziesz miał) twoja kontrolka?
Przecież w każdej chwili dane mogą zostać zmienione przez innego użytkownika.

0

Rozumiem... przecież nie będę ustawiał szerokości dla całości danych. Nawet tyle w pamięci mieć nie będę, tylko będę podczytywał co jakiś czas kolejne rekordy. Jesteście pierwszymi osobami które odradzają mi zagnieżdżenie struktur celem eliminacji powtarzającego się kodu. W momencie jak chce mieć defaultowo ustawione szerokości ( według algorytmu do zawartości lub sztywno ), chce mieć zapamiętane ustawienia użytkownika, a jak i tego nie będzie to ustawienia admina. Czyli mam 3 źródła czerpania ustawień. Daje nam to +/- 40-50 linii kodu dot. wczytywania ustawien i szerokości ( a dochodzą jeszcze potem kolumny widoczne, kolejność etc. etc. ) Zatem wczytywanie definicji grida będzie to pewnie coś koło 100 linii, czy sugerujecie, żeby robić to ręcznie zamiast wpakować do klasy dziedziczącej po DBGrid ? zakładając, że będę ten kod wywoływał na Show oraz na zmianę datasourca i mając ok 20 gridów to ten kod będzie w 40 miejscach i serio nie widzę powodu, żeby był on w tylu miejscach zamiast w jednym. Jestem niemal pewien, że chce tek kod zwinąć, a jak nadal się myle to mnie poprawcie bo być może czegoś nie rozumiem, lub ogólnie się nie porozumieliśmy. W zasadzie to jedynie zastanawiam się nad rozszerzeniem kontrolki, funkcji sterującej gridem jako global lub. ew. skorzystanie z gotowej kontrolki co to potrafi. Ale przyznam, ciekawa rozmowa ;)

0

No właśnie - po prostu dodam kolejną kontrolkę z DataSource, która bez zbędnej obsługi sama odczyta ustawienia usera - nie znajdzie, podczyta ustawienia admina - nie znajdzie to wygeneruje sobie na podstawie zawartości grida jakieś tam szerokości, a przy wychodzeniu zapyta się czy zapisać ustawienia na poziomie admina/usera i tyle. Jeżeli nie zawarł bym kodu w kontrolce to co dodawanie grida będę musiał albo go ręcznie pisać, albo wywoływać jakieś funkcje które mi obrobią tego grida a tego nie chce robić i o tym pamiętać. Nie widzę tutaj nic nieprawidłowego. Serio mówienie półsłówkami nic nie da, sensownie opisałem mój scenariusz więc oczekuję równie sensownej odpowiedzi :)

0

Witam !

Po namyśle zacząłem implementować mój pomysł. Okazał się nie do końca dopracowany. Zwróciłem uwagę, że nawet jak na początku ustawię szerokość dla pierwszego rekordu to inne mogą się nie mieścić. Właściwie to poważny problem koncepcyjny gdyż nie można dopasować do najszerszej zawartości w tabeli po szukanie jej będzie zbyt czasochłonne. Postanowiłem ztworzyć kontrolkę rozszerzającą DBGrida o dopasowanie się do najszerszej kolumny która jest aktualnie widoczna. Jeżeli coś szerszego jest poniżej zasięgu monitora to jak user tam dojdzie to sobie przesunie kolumnę. Generalnie w Delphi pisze się przyjemnie i wygodnie i jakoś tak sam mi się porządek w kodzie trzyma, jednak wiadomo jak coś gotowe to niewarto raz drugi do koła dochodzić. Potrzebuję zmieniać więcej niż jeden atrybut, bo każdy user może chcieć inaczej nazywać nazwy kolumn, lub dla każdego ważny jest inny układ kolumn - nie wszystkie dane są niezbędne. Pytanie czy są jakieś gotowe rozwiązania do zapamiętywania i wczytywania ustawien np. grida czy należy implementować własne mechanizmu opierające się na zapisie ustawień do pliku/bazy ( to już nie ważne bo to niższa warstwa abstrakcji tak naprawdę ).

Teraz rozumiem wasze obawy co do mojego pomysłu ;p .

1 użytkowników online, w tym zalogowanych: 0, gości: 1