- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我知道我必须使用 grid.getDataProvider()
来获取 ListDataProvider
(假设我发送了一个 List
到 grid .setItems()
).在其他计算页脚总计我做的:
Collection myItems = ((ListDataProvider)grid.getDataProvider()).getItems();
for(MyItem myItem : myItems)
total += myItem.getValue();
footer.getCell(footerCell).setText(format(total));
但是如果我添加页脚,这会失败,因为它会计算我网格中的所有项目。例如,如果我添加:
((ListDataProvider)grid.getDataProvider()).addFilter(myFilter);
顶部的代码失败,因为页脚不是过滤后的总计,而是完整的网格总计。
话虽如此someone suggested I use :
grid.getDataCommunicator().fetchItemsWithRange(...);
但是这是一个 protected 方法。假设我创建自己的子类,我什至不明白该方法是如何工作的。
但即便如此,这似乎还是过于复杂,而且本应简单,尤其是在能够在网格中添加过滤的情况下。
因此,我的大问题是,如果过滤网格,如何计算 Vaadin 8 网格中的页脚总数?
最佳答案
要重新计算总数,您可以使用 DataProviderListener当过滤器改变时触发。在其实现中,您可以 fetch来自 DataProvider 的项目用Query ,因为 fetch 方法还考虑了您定义的过滤器。
下面的例子主要是基于Vaadin grid sampler这个想法是显示每月报价及其总计的列表。过滤器将允许您查看从某个月开始的数据(这很愚蠢,但可以帮助您入门):
import com.vaadin.data.provider.ListDataProvider;
import com.vaadin.data.provider.Query;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Grid;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.components.grid.FooterRow;
import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.themes.ValoTheme;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class FilteredGrid extends VerticalLayout {
public FilteredGrid() {
// list data provider with some random data
Random random = new Random();
List<Quote> quotes = IntStream.range(1, 11).mapToObj(month -> new Quote(month, random.nextInt(10))).collect(Collectors.toList());
ListDataProvider<Quote> provider = new ListDataProvider<>(quotes);
// month number filter combo
ComboBox<Integer> monthFilterCombo = new ComboBox<>("Starting with", IntStream.range(1, 10).boxed().collect(Collectors.toList()));
monthFilterCombo.setEmptySelectionCaption("All");
monthFilterCombo.addStyleName(ValoTheme.COMBOBOX_SMALL);
monthFilterCombo.addValueChangeListener(event -> {
if (event.getValue() == null) {
provider.clearFilters();
} else {
provider.setFilter(quote -> quote.getMonth() > event.getValue());
}
});
// grid setup
Grid<Quote> grid = new Grid<>(Quote.class);
grid.setDataProvider(provider);
// header and footer
HeaderRow header = grid.appendHeaderRow();
header.getCell("month").setComponent(monthFilterCombo);
FooterRow footer = grid.prependFooterRow();
footer.getCell("month").setHtml("<b>Total:</b>");
provider.addDataProviderListener(event -> footer.getCell("value").setHtml(calculateTotal(provider)));
// add grid to UI
setSizeFull();
grid.setSizeFull();
addComponent(grid);
// trigger initial calculation
provider.refreshAll();
}
// calculate the total of the filtered data
private String calculateTotal(ListDataProvider<Quote> provider) {
return "<b>" + String.valueOf(provider.fetch(new Query<>()).mapToInt(Quote::getValue).sum()) + "</b>";
}
// basic bean for easy binding
public class Quote {
private int month;
private int value;
public Quote(int month, int value) {
this.month = month;
this.value = value;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
}
结果:
关于java - 如何通过过滤计算 Vaadin 8 网格页脚中的总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46722217/
+--------+-------+----------+-----------+ | Maker | Model | SeatType | NoOfSeats | +--------+------
如何使用 jQuery 计算 p 标签之间的字符数? 我尝试: DEMO html: 1 1 1 js: var tBytes = 0, tFiles = $('b').length; fo
在 MongoDB 上运行正常的“查找”查询时,我可以通过在返回的游标上运行“计数”来获得总结果计数(不考虑限制)。因此,即使我将结果集限制为 10(例如),我仍然可以知道结果总数为 53(再次,例如
在 100% 堆叠条形图中,如何让数据标签同时显示值和总百分比?示例:129 (60.3%) 当您将鼠标悬停在栏上时,它会显示在工具提示中,但在栏本身上不可见。 此处示例:https://docs.g
我在Kibana中的总和有问题。 我的用例是,我的每个服务器都会定期报告打开的 session 数。在Kibana中,我想可视化所有服务器上所有 session 的总数。但是,即使只有一台服务器联机且
我正在使用 jQuery 和 ASP.NET MVC 3 以及 razor View 引擎。 我有几个可以在其中输入数值的文本框。我有一个标签控件,其中包含由 jQuery 计算的文本框总数。 我有以
像这样的结果: 75 Ansari 5 10 88 Koodoo 4 0 90 Koodoo 14 0 83 Koodoo 5 0
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我是 PHP 的初学者,我正在为我的网站编写一些代码。我想获得当时处于事件状态的 session 总数。我知道这是一项艰巨的任务,但有可能。我该怎么做? 我google了一下,有人说可以通过统计tem
1。问题陈述 我很难在正确的记录行中显示 COUNT() 的总数。 如何将 COUNT() 显示到正确的相应服务 2。背景 我想根据stage_id 和分解到project_name 显示员工负责的项
我整个下午都在尝试处理一个(或两个或三个)查询,以便获得三个表的所有子表的计数。看看我的设计: 用户表 id_user | name 1 | foo 2 | bar 获奖表 id_won | user
我有以下脚本。想要文件夹、子文件夹和文件的数量: Sub CountFiles(ByVal path1 As String) Dim fso As Object Dim subfolder As Ob
我对 c3.js 中的饼图有疑问。 如何在标题中添加饼图的总数? var title = new Array('data1.sql','data2.sql') var dtitle = new Arr
我在这方面玩得很开心。我正在尝试针对具有递归关系(分层)的表编写查询(使用 Oracle),并获取存储在树中每个节点及其下方的另一个表中的记录总数。另一个表只有与叶节点相关的记录。但是,我想获得树中每
有没有办法获取模块在任何时间点使用的绑定(bind)总数(通过模板的 {{ .. }}/ng-xxx="..." 、 $scope.$watch(...) 等)? 最佳答案 使用 document.g
我有一个非常简单的表格,因为我现在真的只是在玩 RoR,只是收集一些数据并将其插入数据库,没有什么令人兴奋的只是基本的 CRUD。但是,我想在表格的页脚中放置一个总和字段,但我在网上找不到任何接近的东
这个 mysql 查询给出了我的产品的销售数量(total 和total_staff),按一天中的天数和小时数分组。我想要每个产品的 total 和 total_staff 的总和(不按任何内容分组,
我正在尝试计算 For 循环中每个 user_name 赢得的总金额,并将其显示在 Amount Won: 之后。但是,当我运行下面的代码时,赢得金额后没有任何显示: - 它完全是空白的。我什至尝试将
我有 3 个表。产品价格、开票产品和订购产品的表格。我正在尝试创建一个连接这些的 View 。我想输出产品价格以及开票产品总数和订购产品总数。 产品价格 id season_id product
例如,我在另一个查询的 while 循环内的查询中有一个 mysql_num_rows 结果为 4,8,15,16,23,42。我的问题是如何计算 while 循环中的所有结果? (共 133 个)谢
我是一名优秀的程序员,十分优秀!