我正在尝试对ListGrid中的单元格进行更改,以验证ListGrid中的其他单元格。要添加的项目需要具有项目容器中项目的唯一名称,以及要添加的任何其他项目。我将ListGridField.validateOnChange设置为true。我的验证器看起来像这样:
CustomValidator validator = new CustomValidator() {
@Override
protected boolean condition(Object value)
{
String name = (String)value;
if (_eeNames.contains(name))
{
setErrorMessage("Item Container already contains an Item with the name \"
+ name +"\".");
return false;
}
RecordList records = listGrid.getDataAsRecordList();
int numFound = 0;
for (int i = 0; i < records.getLength(); i++)
{
if (records.get(i).getAttribute("addAs") == null) continue;
if (records.get(i).getAttribute("addAs").equalsIgnoreCase(name))
{
numFound++;
}
if (numFound > 1)
{
setErrorMessage("Another Item being imported has the name \""
+ name + "\".");
return false;
}
}
return true;
}
};
这样可以自行处理,以便检查容器中已有的项目。但是,我注意到它没有正确验证输入的其他项目的名称。我发现或未发生的是记录的值未从编辑中更新,因此未正确检查。将if(numFound >1)
更改为if(numfound >=1)
只会导致在以后的验证中发现自己无效的项目名称无效。我尝试添加一个更改的处理程序来更改记录值,这几乎可以工作。离开单元格后,验证才停止工作。没有进一步的更改将验证。我调试了,并确认在离开编辑单元后,再也没有调用验证。
我还有一个无法解释的验证问题,有时候说名称有效,即使它已经在项目容器中。
对于造成这种情况的原因有什么想法吗?以及这个问题的任何解决方案?提前谢谢。
[编辑6/3/11]
验证错误返回false已经解决了,谢谢Charles。但是,我还有问题。编辑时,验证工作正常,但当我退出单元格的编辑器时,错误消息和图标被清除,无效值显示为有效。我已经尝试将exitHandler添加到字段中,并让listgrid在触发事件时验证事件的行号,但似乎没有做任何事情。这也似乎偶尔发生,有时候工作有时没有。如果最初输入了一个名称并且该名称无效,则输入然后退出编辑器会使其删除invliad标志。不幸的是,这是唯一一致的行为。
答案 0 :(得分:1)
ListGrid管理两个数据:从服务器加载的原始记录,以及尚未保存的对该记录的更改。后者被称为“editValues”。要访问应用了editValues的Record的副本(就好像它们已经保存一样),请调用getEditedRecord(rowNum)。 ListGrid编辑概述中的更多背景信息:
http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/docs/Editing.html