![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перпендикулярный грид [D7, IB6.x]
uw © (2004-01-08 14:31:00)
Посоветуйте компонент типа TDBGrid, который разворачивал бы запрос не сверху вниз, а слева направо. Т.е. изначально количество строк в гриде известно, а количество столбцов определяется запросом.
jack128 (2004-01-09 17:18:00) [1]
> Преобразование формы представления данных должно происходить
> на уровне DataSet-ов, а не на уровне DataAware контролов
ЭЭЭ. А можно прояснить? Я всегда думал, что Dataset это - универсальный способ ДОСТУПА к данным, а уж визуальным представлением как раз таки data controls и должны заниматься?
uw (2004-01-09 16:29:00) [2]
>kaif © (09.01.04 02:47) [14]
>Если же требуется редактирование
Да, редактирование как раз и нужно. Пришлось написать довольно пространную SP, т.к. грид хоть и небольшой (в среднем - 4 * 6), но работает с пятью таблицами. NXDBGrids очень хорошо подошел. Несколько диковато, правда, сверху грида выглядит указатель на курсор, но после того, как я его прикрыл панелью, все стало красиво. А главное – выглядит так, как к этому привык пользователь, работая с бумажными документами.
kaif (2004-01-09 02:47:00) [3]
Я бы все же использовал обычный TStringGrid или написал своего потомка от TDrawGrid. Скорее всего тебе нужно иметь динамический набор столбцов (переменное число). Поэтому транспонирование в хранимой процедуре делать не стоит. Проще всего перемещать данные на клиент обычным SQL-запросом с "вертикальным" набором. А потом разворачивать его в событии AfterOpen в TStringGrid. Разумеется, если не требуется редактирование набора.
Если же требуется редактирование, то я бы не решился вообще отклоняться от классики. Обычно юзеру проще работать с вертикальным скроллингом, чем с горизонтальным. Особенно надо учитывать, что есть юзеры с разрешением экрана 600x800 да еще любители "крупного" системного шрифта (120 dpi).
Для небольших наборов, если мне нужно бывает решать такую задачу я действую еще проще - использую дополнительную таблицу в памяти. В палитре RX DB Aware есть такая неплохая таблица. Перекачиваешь набор в эту таблицу, транспонируя, как тебе угодно. Потом данные можно редактировать и как угодно отсылать обратно в базу. Это самый простой способ и наиболее надежный. Плюс можно вообще закрыть транзакцию и разорвать связь с сервером, если хочется. Данные в таблице в памяти никуда не денутся... А потом опять оживить транзакции и запомнить изменения, когда нужно. И работают таблицы в памяти очень "гладко".
Вообще чисто методологически, пожалуй правильнее всего именно применять таблицы в памяти. Открыл запрос, перекачал в таблицу в памяти, закрыл запрос. А органы управления (сетки и т.п.) пусть будут классическими. Преобразование формы представления данных должно происходить на уровне DataSet-ов, а не на уровне DataAware контролов. Но это ИМХО, конечно.
uw (2004-01-08 16:28:00) [4]
>rootim (08.01.04 15:38) [10]
Спасибо за NXDBGrid, попробую.
>All
Тоже спасибо!
MV (2004-01-08 16:22:00) [5]
У серверов БД часто имеется ограничение на число столбцов.
Предложение: создай хранимую процедуру, которая будет выполнять необходимое "транспонирование" и возвращать результат, например, в виде двух полей:
- первое - (целое) - число колонок
- второе - строка - значения колонок, (со специальными разделителями, например)
Потом, после отрытия набора данных, динамически формируешь нужное количество Calculate fields, и всем им назначаешь одну и ту же процедуру обработки события OnCalculate. Этот обработчик по имени поля будет извлекать нужное значение из длинной строки.
Все.
Возможны варианты.
Polevi (2004-01-08 15:45:00) [6]
TDrawGrid
rootim (2004-01-08 15:38:00) [7]
DBCtrlGrid вполне рабочий вариант.. 1-строка 2,3.. столбца..
раньше видел такой NXDBGrid... если не найдеш... могу вскрыть свои архивы.. под 7-ку подойти должен...
Fareader (2004-01-08 15:34:00) [8]
ИМХО - от лукавого это все. А не проще ли строки (кол-во коих заранее) известно назначить столбцами? А сделать такой "переворот" используя хранимую процедуру.
Alex_Bredin (2004-01-08 15:07:00) [9]
а еще лучше- не мучаться и использовать сводные таблицы в екселе-вот где мощь! ;)
Alex_Bredin (2004-01-08 15:05:00) [10]
что-то подобное можно получить, используя компоненты Decision Cube(в простейшей форме), в частности,можно менять местами строки и столбцы выборки
посмотрите примеры, может подойдет
Ильш (2004-01-08 14:51:00) [11]
InfoPower кажется такое умеет.
Danilka (2004-01-08 14:37:00) [12]
[3] uw © (08.01.04 14:34)
готовых незнаю.
даже не могу представить, что в строке поиска по торри.нет надо написать, чтобы найти такое.
:)
uw (2004-01-08 14:36:00) [13]
>MV (08.01.04 14:34) [2]
Запрос такой и будет, а вот выбранные строки я хотел бы располагать не сверху вниз, а слева направо.
MV (2004-01-08 14:34:00) [14]
А какой запрос так делать может? Что-то мне ничего, кроме select * from... в голову не приходит. Просвятите...
uw (2004-01-08 14:34:00) [15]
>Danilka © (08.01.04 14:33) [1]
Нет, руками-то - это понятно.
Danilka (2004-01-08 14:33:00) [16]
если только грид, то, например, TStringGrid :))