2010-10-12 7 views
6

Mam siatkę w GXT, coś takiego:Jak pozwolić, aby siatka GXT zajęła całą dostępną szerokość?

List<ColumnConfig> configs = new ArrayList<ColumnConfig>(); 
ColumnConfig config = new ColumnConfig(); 
config.setId("type"); 
config.setHeader("Type"); 
config.setWidth(50); 
configs.add(config); 
config = new ColumnConfig(); 
config.setId("text"); 
config.setHeader("Info"); 
config.setWidth(75); 
configs.add(config); 

columnModel = new ColumnModel(configs); 
listStore = new ListStore<DtoModel>(); 

grid = new Grid<DtoModel>(listStore, columnModel); 
grid.setAutoHeight(true); 
grid.setAutoWidth(true); 

VerticalPanel verticalPanel = new VerticalPanel(); 
verticalPanel.setLayout(new FillLayout()); 
verticalPanel.add(grid); 

to tworzy siatkę dobrze z jednym exception-- szerokość jest ograniczona do sumy szerokości kolumn. Kiedy zrezygnuję z szerokości kolumn, siatka kończy się na szerokości 0.

Czy istnieje sposób, aby ta siatka i jej kolumny zostały rozwinięte w celu wypełnienia całego dostępnego obszaru?

Edit: Jedną z trudności jest metoda ColumnConfig.setWidth() trwa int jako parametr tylko, więc nie mogę określić „100%”, jako ciąg lub coś takiego.

Odpowiedz

7

Jest to sposób, aby to zrobić:

grid.getView().setAutoFill(true); 

Oto kluczowy punkt do zapamiętania: Z setAutoFill() podczas zmiany rozmiaru kolumny, GXT będzie zawsze zmień rozmiar wszystkich pozostałych kolumn, aby kratka nadal pasowała do kontenera. Bez funkcji automatycznego wypełniania, jeśli po prostu użyjesz kolumny AutoExpand, jeśli zmienisz rozmiar jednej kolumny, siatka może się powiększyć (lub pomniejszyć) niż komponent zawierający iw takim przypadku musisz ręcznie zmienić rozmiar siatki, aby dopasować - która jest nie tylko w większości przypadków jest to prawie niemożliwe dla użytkownika końcowego.

+0

To było rozwiązanie, którego w końcu szukałem. Dzięki wielkie! – Cuga

0

można spróbować ustawić siatkę/kolumny za pomocą css (setStyle/setColumnStyleName), a następnie można użyć 100% jako szerokość.

cupakob

+0

Próbowałem twojej sugestii, ale to nie robi różnicy. Nadal pokazuje się jako nic, chyba że podano całkowitą szerokość/wysokość, nawet jeśli podam setStyle ("width: 100%"), a jeśli podam obie, to nadal będzie wyświetlane tylko jako podane liczby całkowite. – Cuga

+0

setStyle ("width: 100%") nie zadziała, tutaj musisz określić nazwę stylu z arkusza stylów ... na przykład: setStyle ("myGridWidth") i "myGridWidth" są zdefiniowane w twoim pliku * .css w następujący sposób: .myGridWidth {width: 100%} – cupakob

3

The GXT Siatka ma metodę nazwie setAutoExpandColumn(), która będzie miała identyfikator kolumny, które chcesz zająć całą dostępną przestrzeń w sieci. Chciałbym usunąć setAutoHeight i setAutoWidth z siatki.

Nie jestem pewien, czy próbujesz osiągnąć układ o stałej szerokości lub elastyczny układ, który będzie rozszerzany na podstawie wysokości/szerokości przeglądarki. Oto, co zwykle robię, ponieważ chcę, aby moje siatki zajmowały całą wysokość i szerokość oraz przewijały stronę. Mam nadzieję że to pomoże.

--Vinny

Viewport viewport = new Viewport(); 
    viewport.setLayout(new BorderLayout()); 

    ContentPanel center = new ContentPanel(); 
    center.setFrame(false); 
    center.setLayout(new FitLayout()); 
    center.add(grid); 
+0

Zapewni to również, że kolumny będą wypełniać siatkę (lub zmniejszać się w razie potrzeby) podczas zmiany rozmiaru okna lub minimalizacji obszaru siatki, na przykład gdy jest częścią rzutni. Dziękuję :-) +1 –

-1

Może być już za późno na teraz, ale starałem się ustawić autoHeight i autoWidth właściwości Siatka do fałszywe, łącząc ją z ustawieniem autoExpandColumn (nie trzeba zmienić wartość domyślną Autouzupełnianie za).

grid.setAutoHeight(false); 
grid.setAutoWidth(false); 
5

Istnieje funkcja w GridView, która zmusza wszystkie kolumny do dopasowania do dostępnej przestrzeni. To tak, jakby ustawić flex z 1 na każdą kolumnę.

grid.getView().setForceFit(true);