Это не так просто, как я надеялся:
Используя wxWidgets (серия стабильных версий 2.8), у меня есть wxGrid (не в подклассах) с пользовательским «адаптером данных», как wxGridTableBase-произведенный класс.
wxGrid* grid = new wxGrid (this, ID_TABLE);
grid->SetTable (new TableAdapter (foo, bar, baz));
grid->EnableEditing (false);
sizer->Add(grid, wxSizerFlags (1).Expand());
«Простая» вещь, которую я не могу найти, - это способ обновления сетки при изменении базовой модели данных.Простого вызова wxWindow :: Update (pGrid->Update()
) явно недостаточно для того, чтобы заставить сетку вызывать базовую реализацию wxGridTableBase?
wxGrid* const grid = (wxGrid* const) FindWindow (ID_TABLE);
if (NULL != grid) {
grid->Update ();
grid->AutoSizeColumns ();
}
В частности, эта сетка действует как список и будет иметь строкидобавляется и удаляется из него асинхронно, тем же или (потенциально) другим процессом - это общий список данных, который может обновляться любой из нескольких сетевых систем.Сама таблица / сетка фактически доступна только для чтения;другие элементы управления используются для добавления и удаления элементов, и каждая строка имеет один атрибут логического типа, который также можно переключать.
Кажется, что новые строки не добавляются в представление, и удаление строк приведет кпрерывистые SEGV в коде чертежа wx.
Из-за механизма динамического / асинхронного обновления я надеюсь избежать необходимости постоянно удалять и повторно добавлять сетку в окно, так какЯ уверен, что это вызовет всевозможные мерцания и злобу… поэтому я вернусь к тому, чтобы попробовать что-то вроде грубой силы, если это будет необходимо, но я бы предпочел избежать этого.
К сожалению, несмотря на пометку «стабильной версии», документация по wxGrid в основном состоит из Yet to be written
тегов.
Обновлено: У меня возникает подозрение, что это макетпроблема контейнера.При рисовании сетки нижняя часть сетки (последняя строка) может фактически перекрывать как кадр wxStaticBox вокруг своего раздела окна wxFrame, так и часть строки состояния кадра.Добавление и удаление строк, по-видимому, не приводит к изменению структуры контейнера;Я экспериментирую с попыткой звонить Layout
и тому подобное.В идеале это должна быть область прокрутки, но wxGrid должен по-прежнему быть «ограниченным» внутри содержащего Sizer.
Макет состоит, по сути, из статического поля, содержащего вертикальное поле, первым элементом которого является горизонтальное поле кнопок, а затем сетка, как показано ниже:
--[ Static Box ]------------------------
| |
| [Button] [Button] [Button] |
| |
| ----------------------------------- |
| | | A | B | C | |
| |-----------------------------------| |
| | 1 | 1a | 1b | 1c | |
| ----------------------------------- |
| |
----------------------------------------
К сожалению, политика компании запрещает мне публиковать скриншоты: - (
Если это имеет значение, это (в настоящее время) wxGTK-2.8.12 на Fedora 16 (x86_64), хотя я вижу идентичное поведение на CentOS5 / RHEL5используя пакеты EPEL (Fedora).