簡體   English   中英

動態創建GWT CellTable

[英]Create GWT CellTable Dynamically

我遇到了GWT CellTable的問題。 我需要動態創建celltable,我沒有實體(Bean)類這樣做。 我已經看過了celltable的所有例子,並且在沒有實體類的情況下進行了很多搜索。

我需要根據存儲在數據庫中的一些元數據動態填充表。 我能夠創建表結構

考慮有兩個類,一個是GRID,另一個是COLUMN,用於元數據和列定義。 GRID將COLUMNS列表作為列定義

    Class GRID {
List<COLUMN> columns;
}

Class COLUMN {
  String columnName;
}

現在我需要從數據庫獲取網格並循環列以填充單元格(列),如:

com.google.gwt.user.cellview.client.Column<String, String> textColumn = new Column<String, String>(
                        new EditTextCell()) {
                    @Override
                    public String getValue(String object) {
                        return object;
                    }
                };

現在,我需要向celltable添加一些數據。 但沒有實體,沒有例子如何填充不同的列。 我試過自己的樣子:( 考慮網格有3列)

List<String> data;

String a1 = "A1";
            String a2 = "A2";
            String a3 = "A3";

            data = new ArrayList<String>();
            data.add(a1);
            data.add(a2);
            data.add(a3);

final AsyncDataProvider<String> provider = new AsyncDataProvider<String>() {
            @Override
            protected void onRangeChanged(HasData<String> display) {
                updateRowData(0, data);
            }
          };
          provider.addDataDisplay(grid);
provider.updateRowCount(data.size(), true);

我能夠產生如下輸出:

A1 A1 A1

A2 A2 A2

A3 A3 A3

實際上輸出應該只有一行

A1 A2 A3

但未能這樣做。

請幫忙。

Thankx,

問候,

您可以將“行”表示為List<String>實例,您必須在GridColumn和數據提供程序中將參數化從String更改為List<String> ; 當然,您必須使用List<List<String>>調用updateRowData ,而不是List<String>

每列還需要一個Column實例,通過索引從List<String>取出值:

class IndexedColumn extends Column<List<String>, String>
   private final int index;
   public IndexedColumn(int index) {
     super(new EditTextCell();
     this.index = index;
   }

   @Override
   public String getValue(List<String> object) {
      return object.get(this.index);
   }
}

我有一個類似的問題需要解決。 作為GWT的初學者,Thomas Broyer的答案對我來說有點抽象,以解決我的問題。 也許這段代碼也可以幫助我旁邊的其他人:

public class DatGridExDynReady implements EntryPoint {

// quick showcase data representation, could be set up more dynamically during
// runtime when parsing server response data
private static final ArrayList<String> dataRow1 = new ArrayList<String>();
private static final ArrayList<String> dataRow2 = new ArrayList<String>();
private static final ArrayList<String> dataRow3 = new ArrayList<String>();
private static List<ArrayList<String>> data = new ArrayList<ArrayList<String>>();

public void onModuleLoad() {
        dataRow1.add("1"); dataRow1.add("a"); // quick showcase data
        dataRow2.add("2"); dataRow2.add("b");
        dataRow3.add("3"); dataRow3.add("c");
        DatGridExDynReady.data.add(dataRow1);
        DatGridExDynReady.data.add(dataRow2);
        DatGridExDynReady.data.add(dataRow3);

        DataGrid<List<String>> table = new DataGrid<List<String>>();            
        TextCell c1 = new TextCell(); // 1. text column creation showcase
        Column<List<String>, String> myC1 = new Column<List<String>, String>(c1) {
            public String getValue(List<String> object) {
                return object.get(0);
            }
        };
        table.addColumn(myC1, "col1");          
        TextCell c2 = new TextCell(); // 2. text column creation showcase
        Column<List<String>, String> myC2 = new Column<List<String>, String>(c2) {
            public String getValue(List<String> object) {
                return object.get(1);
            }
        };
        table.addColumn(myC2, "col2");
        table.setRowCount(data.size(), true);
        table.setRowData(0, data);
        DockLayoutPanel rPanel = new DockLayoutPanel(Unit.PX);
        rPanel.setSize("100%", "200px");
        rPanel.addWest(table, 200);
        RootPanel.get().add(rPanel);
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM