我目前正在开发一个在多个地方使用TableViewer来显示格式化表格数据的应用程序。每个表都必须具有导出功能,其中所有内容都将导出到Excel文件中。
为了避免不必要的代码重复,我认为最好依靠SWT的查看器框架,并使用它通过注册的标签提供程序获取格式化的表格数据。
此方法与标准只读表(表级和列级标签提供程序)一起使用时效果很好。但是,在表上设置了EditingSupport或TableEditor时,我感到很困惑。
在这种情况下,我们经常使用标签提供程序返回空白值,并让TableViewer处理EditingSupport或TableEditor以获取单元格数据的表示形式。
我有什么办法可以访问TableViewer或附加到TableViewer的EditingSupport(无需单独引用所述对象),以便可以使用它们来检索单元格数据的正确表示形式?
如果不是这样,我们可能会重写标签提供程序,以便它们也使用EditingSupport处理列,但是如果我们不必这样做,那就很好了。
最佳答案
我找不到从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");
}
它相当丑陋,而且很笨拙,根据您的情况,我可能会建议您按照您所说的重写LabelProviders,但是如果您选择不这样做,则可以选择。显然,如果您有权访问表或列列表,则可以绕过检索中的一些混乱,但核心思想保持不变。