我有一个View,在那里我可以在2个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();
检查ID字段是否设置为数据源中的主键。
[IdField].setPrimaryKey(true);
我有同样的问题,我有[IdField].setPrimaryKey(true);到目前为止,我的结论是只要有记录的数据绑定列表,setDragDataAction(DragDataAction.MOVE)就不起作用。如果它没有数据绑定,它就可以工作。