我使用的是smartgwt(不是付费许可证版本),我有一个包含三个条目的listgrid。 键,值,重置。
reset-field是一个按钮,可以重置对值的任何更改,这是我奋斗的地方。 我试着像
那样简单地实现它@Override
public void onClick(ClickEvent event)
{
DataSource ds = this.grid.getDataSource();
ds.removeData(record);
ds.fetchData();
this.grid.redraw();
}
grid是我的ListGrid并记录已被单击以重置的行。
但是这只删除了条目,如果我重新加载它就会再次出现(即使有正确的值,因为这是我的服务器在他获取删除请求时所做的事情),但我希望它在我之后立即点击按钮,然后点击一下。
我假设fetchData和重绘请求合并将完成此任务。
编辑:还有一些代码,这显示了我的ListGrid和RevertButton的构造函数,它应该删除并再次添加Record。
private static final String REVERT_NAME = "revertField";
public MyListGrid(final String name)
{
this.setDataSource(PropertyListDS.getInstance(name);
ListGridField keyField = new ListGridField(ConfigurationDataSourceFields.PROPERTY_NAME, "Property");
ListGridField valueField = new ListGridField(ConfigurationDataSourceFields.PROPERTY_VALUE, "Value");
ListGridField revertField = new ListGridField(REVERT_NAME, "Revert to Default");
valueField.setCanEdit(true);
this.setShowRecordComponents(true);
this.setShowRecordComponentsByCell(true);
this.setAutoFetchData(true);
this.setFields(keyField, valueField, revertField);
}
@Override
protected Canvas createRecordComponent(final ListGridRecord record, Integer colNum)
{
String fieldName = this.getFieldName(colNum);
Canvas canvas = null;
if ( REVERT_NAME.equals(fieldName) )
{
canvas = new RevertButton(this, record);
}
return canvas;
}
private class RevertButton extends IButton implements ClickHandler
{
private final MyListGrid grid;
private final ListGridRecord record;
public RevertButton(final MyListGrid grid, final ListGridRecord record)
{
super();
this.setTitle("Revert to Default");
this.grid = grid;
this.record = record;
this.addClickHandler(this);
}
@Override
public void onClick(ClickEvent event)
{
DataSource ds = this.grid.getDataSource();
ds.removeData(record);
ds.fetchData();
this.grid.redraw();
}
}
答案 0 :(得分:2)
使用DSCallback
这样做。
DataSource#removeData()
是对服务器的异步调用。在从DSCallback
中删除记录的服务器获得响应之后,再次重新绘制网格或再次获取数据。
DataSource dataSource = grid.getDataSource();
dataSource.removeData(record,new DSCallback() {
@Override
public void execute(DSResponse dsResponse, Object data, DSRequest dsRequest){
Record[] records=dsResponse.getData();//deleted records
grid.fetchData();//fetch data again
}
});
请查看此帖子Removing local record from listGrid without committing
在再次获取数据之前尝试使用ListGrid#saveAllEdits()。
您可以尝试使用ListGrid#removeSelectedData()从此组件中删除当前选定的记录。如果这是数据绑定网格,则记录将直接从DataSource中删除。