2012-03-14 96 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

相关问题