powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / VirtualTreeView: многострочный текст в ячейках
16 сообщений из 41, страница 2 из 2
VirtualTreeView: многострочный текст в ячейках
    #39817512
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks,

да, не вполне понятно, почему в "стандартном" датасете единственный итератор. Может быть, так сделали, чтобы не возникало проблем с синхронизацией при изменениях.
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39817530
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> Таким образом, мне не нужны ни родные датасеты

Сразу из запроса в свой массив засасываешь что ли?
А синхронизация как тогда? Или после каждого
изменения процедура повторяется с нуля?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39818635
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамfraks> Таким образом, мне не нужны ни родные датасеты

Сразу из запроса в свой массив засасываешь что ли?
А синхронизация как тогда? Или после каждого
изменения процедура повторяется с нуля?


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
// CDS - буфер данных (замени, заменитель датасета
// CDV - компонент который связывает мой буфер данных (CDS) с визуальными компонентами

procedure TFrmBase.F5;
begin
 // запомнили параметры текущей строки ID, ROW_NUM и еще чего-то
  CDV.RowSavePosition;

 // выполнили запрос лежащий в QSel, результат сложили в буфер
 // если поле возвращаемое запросом в буфере отсутствует - оно создается
 // если поле уже есть - используется существующее
 // перед выполнением запроса буфер СВЫ очищается от данных, но для некоторых случаев есть процедура без очистки
  CDS.ExecSelect(QSel);
                                 
 // взбодрим визуальщину, в первую очередь объявим гриду сколько строк данных в CDS и сколько полей
 // так же синхронизируем список полей в гриде со списком в CDS
  CDV.Sync;

 // репозиционируемся на ту же строку где стояли, если это возможно
  CDV.RowRestorePositionID;
end;



Редактирование в гриде не применяется. Только путем открытия другой формы, где поля одной текущей записи, в данном случае это сделано в процедуре BaseEdit (редактирование записи в справочнике баз)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TFrmBase.ItemEditClick(Sender: TObject);
var
  id: integer;
  iRow: cardinal; // текущая выбранная строка в дереве
begin
  if not CDV.RowSelected(iRow) then Exit;
  id := CDS.ReadIntegerFN (iRow, 'ID');
  //
  if BaseEdit(id) then begin
    F5; // позиционирование на ID там уже есть
  end;
end;



После редактирования в большинстве случаев обновляется весь буфер, процедурой F5, и позиционируемся на ту же запись где были. В локалке это не составляет проблем, при не долгоиграющем запросе. Если запрос тяжелый - то можно после редактирования обновить одну запись, но для этого нужно писать отдельный запрос.

Иногда работаю по другому - получил записи, сложил в буфер, добавил/убавил, поредактировал в буфере же. И потом по результатам редактировая уже иду по массиву и выполняю insert/update/delete.

Все достаточно прямолинейно.

Вся эта музыка занимает примерно 200кб на паскале.
Код непригоден для публикации т.к. тут же закидают какахами, однако для внутреннего применения у меня уже работает более 10 лет, естественно с заточками под очередные нужды.

У полей массива есть форматирование, можно делать форматы не извращаясь на сервере.
И минимальные возможности раскраски - для всей строки: цвет, стиль шрифта, цвет фона

Сортировка данных кликом на шапке грида (одна или более колонок), ненужные поля можно скрывать.
Не сделано фильтрации, не запоминается позиция колонок, но не особо пока и требовалось...
Запоминается ширина колонок.

В гриде Романа Мочалова можно было делать многострочные заголовки колонок, можно было делать выравнивание заголовков, в VTV этого нет, или не из коробки.
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39818813
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> procedure TFrmBase.F5;
fraks> CDV.RowSavePosition;
fraks> CDS.ExecSelect(QSel);
fraks> CDV.Sync;
fraks> CDV.RowRestorePositionID;
fraks>
fraks> После редактирования в большинстве случаев обновляется весь
fraks> буфер, процедурой F5, и позиционируемся на ту же запись где были.

Понятно, спасибо.

fraks> Сортировка данных кликом на шапке грида (одна или более колонок)

А сортировку как делаешь, тоже полным рефрешем?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39818825
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksКогда-то давно, ниасилив понять почему так сложно пробежаться по датасету без парадигмы "текущая запись, и только так" ...

TDBGrid, например, для отображения данных из множества записей, манипулирует свойством .ActiveRecord датасета. Смещая его, а затем возвращая назад. Таким образом текущая запись как бы остается текущей (смотри метод TCustomDBGrid.DrawCell ). Но напрямую значениое ActiveRecord не изменить, надо это делать через DataLink
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39818935
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамfraks> procedure TFrmBase.F5;
fraks> CDV.RowSavePosition;
fraks> CDS.ExecSelect(QSel);
fraks> CDV.Sync;
fraks> CDV.RowRestorePositionID;
fraks>
fraks> После редактирования в большинстве случаев обновляется весь
fraks> буфер, процедурой F5, и позиционируемся на ту же запись где были.

Понятно, спасибо.

fraks> Сортировка данных кликом на шапке грида (одна или более колонок)

А сортировку как делаешь, тоже полным рефрешем?


Нет, сортировка которая у меня делается по клику на хедере - она выполняется сугубо на клиенте.
У меня массив CDS сделан на основе TList, а сортировка - через его QuickSort. Пришлось написать только свои компаре в соответствии с типом данных, направлением сортировки и набором полей сортировки.
Это в моих CDS/CDV поведение по умолчанию, ничего дополнительно делать не нужно, сортировка всегда есть "искаропки".

Если нужна именно серверная сортировка - то это программируется отдельно, но это нужно в единичных случаях.

Так же в Popup меню грида/дерева достраиваются пункты меню

- "Сохранить в файл" DBF/XLS/CSV
- Поиск по подстроке

К хедеру грида автоматичски цепляется попап-меню, в котором по правой кнопке мыши открывается:

- список Caption полей в CDS, поставив/убрав чекбокс можно показать/скрыть поле в гриде
- список Name полей CDS, с указанием типа данных

Так же в прилинкованный к CDV статус-бар в первую панель выводится количество записей, во вторую - время выполнения запроса, если данные в CDS попали через CDS.ExecSelect
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39818936
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще в моем CDS сделан поиск по полю, на равенство. Если по этому полю сделана сортировка то поиск ведется не перебором а "половинным делением", если не ошибаюсь в названии метода. Соответственно, никаких иных словарей мне не требуется, у меня свой есть, с неограниченным количеством полей.
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39818963
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В fib+ датасет шикарный, и поиск есть "асинхронный", и локальный фильтр, и экспорт-импорт, и т.д.
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39819047
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёВ fib+ датасет шикарный, и поиск есть "асинхронный", и локальный фильтр, и экспорт-импорт, и т.д.

Это все появилось позже, кроме того - он именно что датасет, а мне эта парадигма категорически не нравится.
И по разборкам с фибами - нужно потыкаться в кучу мест, сделать какие-то тесты, поспрошать по форумам что бы понять как с ним толком работать, учесть все его фичи. Если мне нужно немногое - то проще сделать самому и не разбираться с чужим. избыточным для меня кодом.
В свое время просил сделать FIBLite - где есть только базовые вещи, типа как в UIB, и отдельным пакетом все датасеты и прочее.
Но было понятно что едва ли авторы возьмутся за такое глобальное разделение при минимальном спросе.
Я бы купил Lite, за полную цену фибов. Но нету такого.
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39819149
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> Нет, сортировка которая у меня делается по клику
fraks> на хедере - она выполняется сугубо на клиенте.
fraks> У меня массив CDS сделан на основе TList

Подожди, а этот твой брифкейс - он для всех наборов данных, даже
для больших? Или ты всегда принудительно ограничиваешь First 1000 ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39819173
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамfraks> Нет, сортировка которая у меня делается по клику
fraks> на хедере - она выполняется сугубо на клиенте.
fraks> У меня массив CDS сделан на основе TList

Подожди, а этот твой брифкейс - он для всех наборов данных, даже
для больших? Или ты всегда принудительно ограничиваешь First 1000 ?


Гугление про "брифкейс" дало понимание что речь про барсетку :)

Если серьезно, то First конечно можно употреблять, но это как бы крайняя мера, т.к. сразу возникает вопрос все я увидел или нет.
Так что в основном у меня ограничения строятся в интерфейсе таким образом что бы юзери не хотели странного и не тянули десятки тысяч записей без нужды.

При этом, при реальной нужде я без проблем получаю туда и 50 и 100 тысяч записей.
К примеру формирование прайса. Во временной таблице на сервере колдую над включением/исключением товаров по различным условиям, получаю там список ID и потом сджойнив все это дело тяну на клиента в CDS. Потом уже на клиенте делаю некотрые удобные агрегаты, типа суммы по издательствам, и оттуда уже делается экспорт в файл нужного формата.

Работает мой CDS весьма быстро и 1000 записей - не является для него "большой выборкой". На фоне самого фетча расходы на CDS незаметны.
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39819181
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К примеру, получение справочника авторов, формата ID, NAME,
47 тысяч записей, занимает 0,359сек

Используем на работе стороннюю программу для работы с заказами, так получилось что она написана на Delphi + Firebird.
Но в Delphi применены какие-то компоненты с красотами, блэкджеком и прочим.
Я лезу у ту же базу и получаю оттуда те же данные.
Чужая программа делает это за 2-3 секунды, моя - за 0,1сек.
Как так можно тормознуть работу - не понимаю. Наверное там развесистый датасет, визуальщина, красоты, фильтры и проч.
Но нафига это все такой ценой?
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39819479
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> Гугление про "брифкейс" дало понимание что речь про барсетку :)

Странно, ты вроде с Толей лично знаком.
Он, видимо, не хотел усложнять твой слух
сложными буржуйскими терминами. :-)

http://delphiplus.org/delphi-i-tekhnologiya-com/model-briefcase.html
https://rsdn.org/article/db/briefcase1.xml#E3C

fraks> Если серьезно, то First конечно можно употреблять, но это как
fraks> бы крайняя мера, т.к. сразу возникает вопрос все я увидел или нет.
fraks> Так что в основном у меня ограничения строятся в интерфейсе
fraks> таким образом что бы юзери не хотели странного и не тянули
fraks> десятки тысяч записей без нужды.

Володь, это всё хорошо, конечно, если пользователи сюблюдают эти
твои рекомендации и оптимально используют возможности функционала.
А если несколько человек начнёт 100 тыщ записей туда-сюда гнать по 10
раз в минуту - может статься, что серверный вариант был бы лучше.

Впрочем, это так, мысли вслух, просто удивился.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39819555
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамВолодь, это всё хорошо, конечно, если пользователи сюблюдают эти
твои рекомендации и оптимально используют возможности функционала.
А если несколько человек начнёт 100 тыщ записей туда-сюда гнать по 10
раз в минуту - может статься, что серверный вариант был бы лучше.


Вопрос в том что у пользователя не должно быть возможности ослаблением фильров, при всем желании, получить 100 тысяч записей.
У меня такое возможно только если в журнале документов поставить фильтр не 10 дней а 5000 дней.
В остальных местах никаких сотен тысяч не получается.

И не понял, что такое "серверный" вариант?
Если про сортировку - то естественно, запросы выдают результат уже изначально сортированный в наиболее применимом варианте сортировки. И если пользователю вдруг понадобится посмотреть не совсем стандартное, например максимальная сумма документа - то достаточно отсортировать по сумме.
...
Рейтинг: 0 / 0
VirtualTreeView: многострочный текст в ячейках
    #39819719
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> В остальных местах никаких сотен тысяч не получается.

Ну тогда и смысла париться нет.

> И не понял, что такое "серверный" вариант?

Это когда order by делается на сервере, есессно.
Это хуже, если юзеры щелкают по столбцам
туда-сюда на мелких гридах по 30 записей,
возвращенных тяжелыми запросами, и лучше,
если записей много (а запросы не тяжелые).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
VirtualTreeView: многострочный текст в ячейках
    #40091095
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кроик Семён


Вот СПАСИБО тебе, добрый человек! А я уж замучился врукопашную экспериментировать, а тут решение - простое и готовое!
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / VirtualTreeView: многострочный текст в ячейках
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]