Как получить доступ к TableEditor или EditingSupport, который был присоединен к TableViewer? - PullRequest
0 голосов
/ 01 апреля 2010

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

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

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

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

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

Если нет, мы, вероятно, перепишем наших провайдеров меток, чтобы они также обрабатывали столбцы с EditingSupport, но было бы неплохо, если бы нам это не нужно.

1 Ответ

1 голос
/ 02 апреля 2010

Я не могу найти способ получить объекты 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");
}

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

...