Grid 实时计算数据-网格(使用Vaadin 7.4.9)
这是我的密码,我需要你的帮助。我需要将监听器添加到我的网格中,这样可以将结果实时添加到网格中(例如,单击按钮后为否)。我想在“firstNumber”列中添加数字,在“secondNumber”列中添加第二个数字,然后在“result”列中添加数字的总和 第一个数字:“1”,“第二个数字”:“1”,结果将是“2”Grid 实时计算数据-网格(使用Vaadin 7.4.9),grid,vaadin,Grid,Vaadin,这是我的密码,我需要你的帮助。我需要将监听器添加到我的网格中,这样可以将结果实时添加到网格中(例如,单击按钮后为否)。我想在“firstNumber”列中添加数字,在“secondNumber”列中添加第二个数字,然后在“result”列中添加数字的总和 第一个数字:“1”,“第二个数字”:“1”,结果将是“2” 您可以使用ValueChange事件,该事件将告诉您marvelous容器中的值何时更改。不幸的是,该事件只会告诉您更改了哪个属性,以及新值 由于您只有这些信息,因此必须循环容器以重新
您可以使用
ValueChange
事件,该事件将告诉您marvelous容器中的值何时更改。不幸的是,该事件只会告诉您更改了哪个属性
,以及新值
由于您只有这些信息,因此必须循环容器以重新计算内容,尽管时间成本非常巨大[O(n*m)是n=nº列,m=nº行]
要循环容器,可以使用以下简单代码(这是最简单的方法,没有任何复杂的逻辑和内容):
container.addValueChangeListener(ev->{
List itemIds=container.getItemIds();
for(对象itemId:itemIds){
Item=container.getItem(itemId);
整数firstNumber=(整数)item.getItemProperty(“firstNumber”).getValue();
整数secondNumber=(整数)item.getItemProperty(“secondNumber”).getValue();
item.getItemProperty(“结果”).setValue(firstNumber+secondNumber);
}
});
您可以使用ValueChange
事件,该事件将在您的marvelous容器中的值发生更改时通知您。不幸的是,该事件只会告诉您更改了哪个属性
,以及新值
由于您只有这些信息,因此必须循环容器以重新计算内容,尽管时间成本非常巨大[O(n*m)是n=nº列,m=nº行]
要循环容器,可以使用以下简单代码(这是最简单的方法,没有任何复杂的逻辑和内容):
container.addValueChangeListener(ev->{
List itemIds=container.getItemIds();
for(对象itemId:itemIds){
Item=container.getItem(itemId);
整数firstNumber=(整数)item.getItemProperty(“firstNumber”).getValue();
整数secondNumber=(整数)item.getItemProperty(“secondNumber”).getValue();
item.getItemProperty(“结果”).setValue(firstNumber+secondNumber);
}
});
您可以查看此信息,它会告诉您容器中的值何时更改,或者它会告诉您整个项目集何时更改。您从哪里获得firstNumer
和secondnumer
值?用户是否编辑网格?他们是从别的地方来的?如果它们是在容器的开头添加的,则不需要侦听器。你能给我们提供更多的信息吗?@Shirkam数据来自“编辑器”没有来自文件。。。然后从键盘输入ValueChangeListener
就可以了。我会在可能的时候发布答案。@Shirkam你能在这里写下你的代码(想法)吗?我阅读了文档,但我需要代码或代码示例。。。不只是文本:D,然后,当它好的时候,你可以发布一个答案,我将答案标记为正确:)你可以看看这个,它会告诉你容器中的值何时改变,或者这个会告诉你整个项目集何时改变。你从哪里得到firstNumer
和secondnumer
值?用户是否编辑网格?他们是从别的地方来的?如果它们是在容器的开头添加的,则不需要侦听器。你能给我们提供更多的信息吗?@Shirkam数据来自“编辑器”没有来自文件。。。然后从键盘输入ValueChangeListener
就可以了。我会在可能的时候发布答案。@Shirkam你能在这里写下你的代码(想法)吗?我阅读了文档,但我需要代码或代码示例。。。不只是文本:D,然后,当它好的时候,你可以发布一个答案,我将答案标记为正确:)
Grid grid = new Grid();
IndexedContainer container = new IndexedContainer();
grid.setContainerDataSource(container);
container.addContainerProperty("firstNumber", Integer.class, 0);
container.addContainerProperty("secondNumber", Integer.class, 0);
container.addContainerProperty("result", Integer.class, 0);
/* --- Need add this to the listener or method --- */
Item item = container.getItem(0);
int firstNumber = item.getItemProperty("firstNumber").getValue();
item = container.getItem(0);
int secondNumber = item.getItemProperty("secondNumber").getValue();
result = firstNumber + secondNumber;
item = container.getItem(0);
item.getItemProperty("result").setValue(result);
/* -------------------------------- */
container.addValueChangeListener(ev -> {
List<?> itemIds = container.getItemIds();
for(Object itemId: itemIds) {
Item item = container.getItem(itemId);
Integer firstNumber = (Integer) item.getItemProperty("firstNumber").getValue();
Integer secondNumber = (Integer) item.getItemProperty("secondNumber").getValue();
item.getItemProperty("result").setValue(firstNumber+secondNumber);
}
});