x11 Posted April 22, 2020 Share Posted April 22, 2020 Вопрос по TUniDBGrid. У каждой колонки есть в заголовке кнопка, где выпадает меню с пунктами сортировки и "Столбцы". Непонятно зачем реализовано так, у каждого столбца есть меню "Столбцы". Почему бы это меню не перенести в одну единственную кнопку над столбцом Индикатор? Я уверен, это разгрузит форму и уменьшит передачу данных между клиентом и сервером, что положительно отразится на производительности и сервера, и клиента. Особенно, если в приложении очень много столбцов. Если это возможно, подскажите, как это реализовать. Спасибо. Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 Я имею ввиду, чтобы сделать вот так: Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 22, 2020 Share Posted April 22, 2020 4 minutes ago, x11 said: У каждой колонки есть в заголовке кнопка, где выпадает меню с пунктами сортировки и "Столбцы". Непонятно зачем реализовано так, у каждого столбца есть меню "Столбцы". Ну эта особенность самой библиотеки ExtJS. 5 minutes ago, x11 said: Почему бы это меню не перенести в одну единственную кнопку на столбцом Индикатор? Я также попробую проанализировать этот момент. 2 Quote Link to comment Share on other sites More sharing options...
Tokay Posted April 22, 2020 Share Posted April 22, 2020 Идея отличная. Виндовые гриды часто так и работают. Удобно. Другой вариант: сделать в углу просто кнопку + по клику отображать окно со списком полей с возможностью включения, отключения и драг-дропа для смены последовательности полей в гриде. 1 Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 Ок, как временное решение можно и так. А какое свойство TUniDBGrid отвечает за отображение меню "Столбцы"? Чтобы скрыть это меню, чтобы список столбцов не грузился по 50 раз. У меня, например, в приложении очень много столбцов (приложение по работе с разного рода объявлениями, где много-много параметров). Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 22, 2020 Share Posted April 22, 2020 55 minutes ago, x11 said: А какое свойство TUniDBGrid отвечает за отображение меню "Столбцы"? Попробуйте эту конфигурацию: Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share 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 Link to comment Share on other sites More sharing options...
Sherzod Posted April 22, 2020 Share Posted April 22, 2020 Ну если хотите в "beforeInit", то просто включите и эту строку тоже: config.enableColumnHide=false; 1 Quote Link to comment Share on other sites More sharing options...
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.