2010-04-01 3 views
0

В настоящее время я работаю над приложением, которое использует TableViewer в нескольких местах для отображения форматированных табличных данных. Каждая таблица должна иметь функцию экспорта, где все ее содержимое экспортируется в файл Excel.Как получить доступ к TableEditor или EditingSupport, который был прикреплен к TableViewer?

Чтобы избежать ненужного дублирования кода, я подумал, что было бы неплохо полагаться на среду просмотра SWT и использовать его для получения форматированных табличных данных с помощью зарегистрированных поставщиков меток.

Этот подход хорошо работает со стандартными таблицами только для чтения, либо с поставщиками этикеток на уровне таблиц и столбцов. Тем не менее, я застрял, когда в таблице были установлены EditingSupport или TableEditors.

В таких случаях у нас часто были поставщики меток, которые возвращают пустые значения, и позволяют TableViewer иметь дело с EditingSupport или TableEditor, чтобы получить представление данных ячейки.

Есть ли способ получить доступ к TableEditor или EditingSupport, который был прикреплен к TableViewer (без сохранения отдельной ссылки на указанные объекты), чтобы я мог использовать их для получения правильного представления данных соты?

Если нет, мы, вероятно, перепишем наши поставщики меток, чтобы они обрабатывали столбцы с помощью EditingSupport, но было бы неплохо, если бы нам не пришлось.

ответ

1

Невозможно найти, чтобы найти объекты EditingSupport или TableEditor из TableViewer. Мы храним объекты EditingSupport отдельно для наших целей, но похоже, что это не вариант для вас, поэтому вы можете сохранить объект EditingSupport для данного столбца в карте данных самого столбца. Что-то вроде:

TableColumn column = new TableColumn(table, SWT.RIGHT); 
EditingSupport editingSupport = new TableEditingSupport(); 
column.setData("editing_support", editingSupport); 

Это дает вам доступ к EditingSupport объектов через одну ссылку на TableViewer и когда вы хотите, чтобы получить их, вы могли бы сделать что-то вроде:

final Table table = tableViewer.getTable(); 
for(TableColumn column : table.getColumns()) 
{ 
    EditingSupport editingSupport = (EditingSupport)column.getData("editing_support"); 
} 

Его довольно некрасиво и Hacky и, в зависимости от ваших обстоятельств, я, вероятно, предлагаю переписать LabelProviders, как вы сказали, но если вы решите не делать этого, это вариант. Очевидно, что если у вас есть доступ к таблице или списку столбцов, вы можете обойти часть беспорядка в поиске, но основная идея остается неизменной.

+0

Спасибо за ваш ответ. Я не мог использовать этот подход из-за структуры существующей кодовой базы, поэтому я исправил поставщиков меток, когда это было необходимо. – christopheml