我目前正在开发一个应用程序,它在几个地方使用TableViewer来显示格式化的表格数据。每个表必须具有导出功能,其所有内容都将导出到Excel文件中。
为了避免不必要的代码重复,我认为依靠SWT的查看器框架并使用它来使用注册的标签提供程序获取格式化的表格数据会很好。
此方法适用于标准只读表,可以使用表级和列级标签提供程序。但是,当我在表上设置了EditingSupport或TableEditors时,我陷入困境。
在这种情况下,我们经常让标签提供程序返回空白值,让TableViewer处理EditingSupport或TableEditor以获取单元格数据的表示。
我有没有办法访问已连接到TableViewer的TableEditor或EditingSupport(不保留对所述对象的单独引用),因此我可以使用它们来检索单元格数据的正确表示吗
如果没有,我们可能会重写我们的标签提供程序,以便它们也可以使用EditingSupport来处理列,但如果我们不必这样做,它会很好。
答案 0 :(得分:1)
我无法找到从TableViewer检索EditingSupport或TableEditor对象的方法。我们将EditingSupport对象分别存储用于我们的用途,但听起来这不是一个选项,因此您可以在列本身的数据映射中存储给定列的EditingSupport对象。类似的东西:
TableColumn column = new TableColumn(table, SWT.RIGHT);
EditingSupport editingSupport = new TableEditingSupport();
column.setData("editing_support", editingSupport);
这使您可以通过对TableViewer的单个引用来访问EditingSupport对象,当您想要检索它们时,您可以执行以下操作:
final Table table = tableViewer.getTable();
for(TableColumn column : table.getColumns())
{
EditingSupport editingSupport = (EditingSupport)column.getData("editing_support");
}
它相当丑陋和hacky,根据你的情况,我可能会建议重写LabelProviders,但如果你选择不这样做,这是一个选项。显然,如果您可以访问表格或列表,您可以绕过一些检索中的混乱,但核心思想保持不变。