x11 Posted April 22, 2020 Posted April 22, 2020 Вопрос по TUniDBGrid. У каждой колонки есть в заголовке кнопка, где выпадает меню с пунктами сортировки и "Столбцы". Непонятно зачем реализовано так, у каждого столбца есть меню "Столбцы". Почему бы это меню не перенести в одну единственную кнопку над столбцом Индикатор? Я уверен, это разгрузит форму и уменьшит передачу данных между клиентом и сервером, что положительно отразится на производительности и сервера, и клиента. Особенно, если в приложении очень много столбцов. Если это возможно, подскажите, как это реализовать. Спасибо. Quote
Sherzod Posted April 22, 2020 Posted April 22, 2020 4 minutes ago, x11 said: У каждой колонки есть в заголовке кнопка, где выпадает меню с пунктами сортировки и "Столбцы". Непонятно зачем реализовано так, у каждого столбца есть меню "Столбцы". Ну эта особенность самой библиотеки ExtJS. 5 minutes ago, x11 said: Почему бы это меню не перенести в одну единственную кнопку на столбцом Индикатор? Я также попробую проанализировать этот момент. 2 Quote
Tokay Posted April 22, 2020 Posted April 22, 2020 Идея отличная. Виндовые гриды часто так и работают. Удобно. Другой вариант: сделать в углу просто кнопку + по клику отображать окно со списком полей с возможностью включения, отключения и драг-дропа для смены последовательности полей в гриде. 1 Quote
x11 Posted April 22, 2020 Author Posted April 22, 2020 Ок, как временное решение можно и так. А какое свойство TUniDBGrid отвечает за отображение меню "Столбцы"? Чтобы скрыть это меню, чтобы список столбцов не грузился по 50 раз. У меня, например, в приложении очень много столбцов (приложение по работе с разного рода объявлениями, где много-много параметров). Quote
Sherzod Posted April 22, 2020 Posted April 22, 2020 55 minutes ago, x11 said: А какое свойство TUniDBGrid отвечает за отображение меню "Столбцы"? Попробуйте эту конфигурацию: Quote
x11 Posted April 22, 2020 Author Posted April 22, 2020 А можно это сделать с помощью TUniClientEvents? Почему я так хочу, отвечаю. При загрузке формы/фрейма я сделал так, что выполняется начальная процедура инициализации настроек сетки UniDBGrid из файла (файлов). Чтобы все сетки на всех фреймах выглядели похоже (одинаково), я выполняю такую процедуру: procedure dbgLoadBeforeInitJs(const dbg: TUniDBGrid); const constMultiColumnSortFileName = 'dbgBeforeInit.js'; Var sl: TStringList; sDbgFileName, sMultiColumnSortFileName, beforeInit: string; begin // config.multiColumnSort = true; sl := TStringList.Create; try //сперва грузим общий файл для всех сеток sMultiColumnSortFileName := IncludeTrailingPathDelimiter(UniServerModule.FilesFolderPath) + constMultiColumnSortFileName; if FileExists(sMultiColumnSortFileName) then begin sl.LoadFromFile(sMultiColumnSortFileName); beforeInit := dbg.ClientEvents.UniEvents.Values['beforeInit']; if beforeInit.IsEmpty then dbg.ClientEvents.UniEvents.Values['beforeInit'] := sl.Text else// если в событии beforeInit уже что-то есть dbg.ClientEvents.UniEvents.Values['beforeInit'] := beforeInit + sLineBreak + sl.Text end; sl.Clear; // теперь грузим файл для конкретной сетки, если он есть sDbgFileName := IncludeTrailingPathDelimiter(UniServerModule.FilesFolderPath) + dbg.Owner.Name + '.' + dbg.Name + '.js';// имя формы/фрейма + имя сетки if FileExists(sDbgFileName) then begin sl.LoadFromFile(sDbgFileName); beforeInit := dbg.ClientEvents.UniEvents.Values['beforeInit']; if beforeInit.IsEmpty then dbg.ClientEvents.UniEvents.Values['beforeInit'] := sl.Text else// если в событии beforeInit уже что-то есть dbg.ClientEvents.UniEvents.Values['beforeInit'] := beforeInit + sLineBreak + sl.Text end; finally sl.Free; end; end; А в файле написано вот так: Quote function beforeInit(sender, config) { config.multiColumnSort = true; } В итоге мне не надо настраивать каждый раз новую сетку руками в designtime. А сеток у меня будет много. Quote
Sherzod Posted April 22, 2020 Posted April 22, 2020 Ну если хотите в "beforeInit", то просто включите и эту строку тоже: config.enableColumnHide=false; 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.