ListGrid重复项在添加记录onload之后创建,然后再次拖动它

时间:2011-06-03 07:24:08

标签: smartgwt

我有一个View,我在两个ListGrid-s之间拖放工作,拖动几条记录后,我点击“保存”按钮将它们保存到POJO类型对象。

当我再次访问该视图时,它调用方法loadGrid从POJO中提取这些值并将它们添加回之前拖动到的ListGrid,这样他们就可以看到他们之前已经添加了,但是当我再次拖放时,它允许我添加相同的主键,在ListGrid中创建重复记录。

我怎样才能让它看到这些记录一样?主键是相同的,类型是相同的,不确定它可能是什么......

我正在使用transferSelectedData将新权限添加到指定的列表网格和setPreventDuplicates(true)

ListGrid avPrivGrid = null;
 ListGrid assPriv = null;
 TransferImgButton but = null;

 avPrivGrid = new ListGrid();
 PrivilegesDataSource privDataSource = new PrivilegesDataSource();
 avPrivGrid.setDataSource(privDataSource);
 avPrivGrid.setAutoFetchData(false);

 ListGridField propUsername = new ListGridField("privName", "Available Priv");
 propUsername.setType(ListGridFieldType.TEXT);
 avPrivGrid.setFields(propUsername);

 assPriv = new ListGrid();
 assPriv.setCanAcceptDroppedRecords(true);
 assPriv.setCanEdit(false); 
 assPriv.setAutoFetchData(false);
 assPriv.setPreventDuplicates(true);
 assPriv.setDuplicateDragMessage("Can not add duplicates!");
 assPriv.setCanSelectAll(false);
 assPriv.setAlternateRecordStyles(true);
 assPriv.setLeaveScrollbarGap(true);
 assPriv.setMinHeight(100);

 ListGridField propUserN = new ListGridField("privName", "Assigned Priv");
 propUserN.setWidth("30%");
 propUserN.setType(ListGridFieldType.TEXT);
 ListGridField propId = new ListGridField("privId");
 propId.setWidth("30%");
 propId.setType(ListGridFieldType.TEXT);
 propId.setHidden(true);
 assPriv.setFields(propId, propUserN);

 but = new TransferImgButton(TransferImgButton.RIGHT);
  but.addClickHandler(new ClickHandler()
 {
    public void onClick(ClickEvent event)
    {
        //Duplicate checking will happen automagially!
            assPriv.transferSelectedData(avPrivGrid);
    }
 });
 avPrivGrid.fetchData();

2 个答案:

答案 0 :(得分:1)

检查ID字段是否设置为数据源中的主键。

[IdField].setPrimaryKey(true);

答案 1 :(得分:1)

我有同样的问题,我有[IdField] .setPrimaryKey(true); 到目前为止,我的结论是只要有数据绑定记录列表,setDragDataAction(DragDataAction.MOVE)就无法运行。如果它不是数据绑定,那就可以了。