2012-03-14 27 views
3

我在SmartGWT中有一個數據源。我如何從中提取數據?我一直在使用fetchData()方法試過,但隨後在標準我需要添加一個值即如何提取數據源中的所有數據?

Criteria cr = new Criteria(); 
cr.addCriteria("Name", "Name_Value"); 

爲了執行對數據源做什麼我需要做全選?

下面是代碼:

import com.smartgwt.client.types.Alignment; 
import com.smartgwt.client.types.DragDataAction; 
import com.smartgwt.client.widgets.TransferImgButton; 
import com.smartgwt.client.widgets.events.ClickEvent; 
import com.smartgwt.client.widgets.events.ClickHandler; 
import com.smartgwt.client.widgets.layout.HStack; 
import com.smartgwt.client.widgets.layout.VStack; 
import com.smartgwt.client.widgets.tree.Tree; 
import com.smartgwt.client.widgets.tree.TreeGrid; 

import com.google.gwt.core.client.EntryPoint; 
import com.smartgwt.client.widgets.tree.TreeGridField; 

public class TreeDragNodesSample implements EntryPoint { 
TreeGrid grid1 = new TreeGrid(); 
TreeGrid grid2 = new TreeGrid(); 
String name=null; 
    public void onModuleLoad() { 
Tree test = new Tree(); 

     grid1.setDragDataAction(DragDataAction.COPY); 
     grid1.setAutoFetchData(true); 
     grid1.setDataSource(EmployeeXmlDS.getInstance()); 
     grid1.setWidth(200); 
     grid1.setHeight(200); 
     grid1.setShowEdges(true); 
     grid1.setBorder("0px"); 
     grid1.setBodyStyleName("normal"); 
     grid1.setShowHeader(false); 
     grid1.setLeaveScrollbarGap(false); 
     grid1.setEmptyMessage("<br>Drag & drop parts here"); 
     grid1.setManyItemsImage("cubes_all.png"); 
     grid1.setAppImgDir("icons/16/"); 
     grid1.setNodeIcon("cube.png"); 
     grid1.setFolderIcon("person.png"); 
     grid1.setCanReorderRecords(true); 
     grid1.setCanAcceptDroppedRecords(true); 
     grid1.setCanDragRecordsOut(true); 
     grid1.setCanAcceptDrop(true); 
     grid1.setCanDrop(true); 
     TreeGridField tname = new TreeGridField("Name"); 
     TreeGridField child = new TreeGridField("ChildID"); 
     TreeGridField reps = new TreeGridField("ReportsTo"); 
     grid1.setFields(tname); 

     grid2.setLeft(250); 
     grid2.setAutoFetchData(true); 
     grid2.setDataSource(EmployeeXmlDSDrop.getInstance()); 
     grid2.setWidth(200); 
     grid2.setHeight(200); 
     grid2.setShowEdges(true); 
     grid2.setBorder("0px"); 
     grid2.setBodyStyleName("normal"); 
     grid2.setShowHeader(false); 
     grid2.setLeaveScrollbarGap(false); 
     grid2.setEmptyMessage("<br>Drag & drop parts here"); 
     grid2.setManyItemsImage("cubes_all.png"); 
     grid2.setAppImgDir("icons/16/"); 
     grid2.setNodeIcon("cube.png"); 
     grid2.setFolderIcon("person.png"); 
     grid2.setCanReorderRecords(true); 
     grid2.setCanAcceptDroppedRecords(true); 
     grid2.setCanDragRecordsOut(true); 
     grid2.setCanAcceptDrop(true); 
     grid2.setCanDrop(true); 
     TreeGridField tname2 = new TreeGridField("Name"); 
     TreeGridField child2 = new TreeGridField("ChildID"); 
     TreeGridField reps2 = new TreeGridField("ReportsTo"); 
     grid2.setFields(tname2); 

     VStack moveControls = new VStack(10); 
     moveControls.setWidth(32); 
     moveControls.setHeight(74); 
     moveControls.setLayoutAlign(Alignment.CENTER); 

     TransferImgButton rightArrow = new TransferImgButton(TransferImgButton.RIGHT, new ClickHandler() { 

      public void onClick(ClickEvent event) { 
       grid2.transferSelectedData(grid1); 
      } 
     }); 
     moveControls.addMember(rightArrow); 

     TransferImgButton leftArrow = new TransferImgButton(TransferImgButton.LEFT, new ClickHandler() { 

      public void onClick(ClickEvent event) { 
       grid1.transferSelectedData(grid2); 
      } 
     }); 
     moveControls.addMember(leftArrow); 

     HStack grids = new HStack(10); 
     grids.setHeight(160); 
     grids.addMember(grid1); 
     grids.addMember(moveControls); 
     grids.addMember(grid2); 
     grids.draw(); 
    } 
} 

回答

1

你不執行選擇在數據源的所有操作。您寧願在其數據綁定的對象上執行操作,例如關聯的ListGrid。提供的數據已定,在ListGrid listGrid加載,你剛纔叫

listGrid.getRecords(); 

它返回一個記錄[],與所有可見的,或匹配一組條件的記錄。 數據庫ListGrids的另一個選項是使用ResultSet對象。當您想要在數據中查找特定記錄時,這很方便 ,但由於您需要所有記錄,因此我建議您只使用getAllRecords方法。有關更多詳細信息,請參閱API

更新:基於您的代碼提取,我現在可以看到您正在使用TreeGrid而不是ListGrid。因此,你應該使用的方法是:

TreeGrid.getTree().getAllNodes(); 

這會給你樹的所有節點,已加載,如果沒有它們打開或關閉問題。 ListGrid.getRecords()只會返回打開的節點。請注意,默認情況下,TreeGrid會根據需要加載其數據。所以如果你想檢索所有樹的節點,你必須停用這個功能並預加載所有的數據。這當然會造成速度問題。要做到這一點做到以下幾點:

TreeGrid.setLoadDataOnDemand(Boolean.FALSE); 
+0

有像getAllRecords沒有方法() – 2012-03-15 10:21:48

+0

哎呀,我的錯! API鏈接可以讓你使用正確的方法。無論如何,我用正確的方法名稱更新了我的答案。 – gpapaz 2012-03-15 10:29:30

+0

即使getRecords()不起作用...文我使用這種方法獲取記錄整個項目停止工作.. – 2012-03-15 10:56:32