x11 Posted February 27, 2021 Share Posted February 27, 2021 в этой теме есть сетка, в которой есть очень полезный функционал - фильтры. http://forums.unigui.com/index.php?/topic/11857-grid-filters-list/&tab=comments#comment-63164 Вопрос такой: как прикрутить эти фильтры именно к стандартной сетке uniDBGrid, чтобы не создавать новую компоненту. У меня не получается. Ошибок нет, приложение работает, но пункт Filters в выпадающем меню колонок отсутствует. Хотя бы потому что, у этой сетки не работают итоги и не хочется каждый раз тратить время на переустановку одной компоненты при переустановке (при обновлении) uniGUI. CustomDBGridFilter.rar Quote Link to comment Share on other sites More sharing options...
x11 Posted February 28, 2021 Author Share Posted February 28, 2021 По примеру из темы сделал так: procedure DbgLoadFilters(dbg: TUniDBGrid); var s: string; begin dbg.ClientEvents.ExtEvents.Values['afterrender'] := 'function afterrender(sender, eOpts) { sender.addPlugin(''gridfilters''); }'; for var i := 0 to pred(dbg.Columns.Count) do begin if s.IsEmpty then s := 'columns[' + i.ToString + '].filter = {type: ''list''};' else s := s + sLineBreak + 'columns[' + i.ToString + '].filter = {type: ''list''};' end; dbg.ClientEvents.ExtEvents.Values['reconfigure'] := 'function reconfigure(sender, store, columns, oldStore, oldColumns, eOpts) { ' + s + sLineBreak + '}'; end; работает. Теперь усложняем. Можно ли как-то в список Filters добавить свои фильтры? Там не хватает 2 важных пункта: "пустые" и "непустые". Т.е. чтобы можно было отфильтровать пустые и непустые записи (по тому и ли иному столбцу). Спасибо. Quote Link to comment Share on other sites More sharing options...
x11 Posted February 28, 2021 Author Share Posted February 28, 2021 Т.е. чтобы вверху появились пункты. Quote Link to comment Share on other sites More sharing options...
x11 Posted February 28, 2021 Author Share Posted February 28, 2021 Проблема. Если есть пустые ячейки, то этот пункт тоже есть, но если его выбрать, то фильтрация не работает. Все записи прячутся, хотя 6 записй должно остаться после включения этого пункта фильтрации. Quote Link to comment Share on other sites More sharing options...
Sherzod Posted February 28, 2021 Share Posted February 28, 2021 4 hours ago, x11 said: Теперь усложняем. Можно ли как-то в список Filters добавить свои фильтры? Там не хватает 2 важных пункта: "пустые" и "непустые". Т.е. чтобы можно было отфильтровать пустые и непустые записи (по тому и ли иному столбцу). 4 hours ago, x11 said: Если есть пустые ячейки, то этот пункт тоже есть, но если его выбрать, то фильтрация не работает. Все записи прячутся, хотя 6 записй должно остаться после включения этого пункта фильтрации. Нужно проанализировать плагин. Quote Link to comment Share on other sites More sharing options...
x11 Posted February 28, 2021 Author Share Posted February 28, 2021 И еще вопрос. А слово "filters" можно как-то локализовать на другой язык, переименовать? Quote Link to comment Share on other sites More sharing options...
Sherzod Posted February 28, 2021 Share Posted February 28, 2021 4 minutes ago, x11 said: И еще вопрос. А слово "filters" можно как-то локализовать на другой язык, переименовать? function afterrender(sender, eOpts) { let fp = sender.addPlugin('gridfilters'); fp.setConfig({menuFilterText: 'Фильтр'}); } 1 Quote Link to comment Share on other sites More sharing options...
x11 Posted March 16, 2021 Author Share Posted March 16, 2021 Возникла проблема. Если заголовок многоуровневый (когда у колонок заполнено свойство GroupHeader), то появляется ошибка: columns[2] is undefined Подскажите, пожалуйста, где и какую проверку добавить? Спасибо. Quote Link to comment Share on other sites More sharing options...
x11 Posted March 16, 2021 Author Share Posted March 16, 2021 Всего 19 колонок в сетке. Проверяю цикл - тоже 19 колонок: procedure DbgLoadFilters(dbg: TUniDBGrid); function GetCol(const i: string): string; begin result := 'if (columns[' + i + ']) {columns[' + i + '].filter = {type: ''list''}};'; end; var s: string; begin for var i := 0 to pred(dbg.Columns.Count) do begin if s.IsEmpty then s := GetCol(i.ToString) else s := s + sLineBreak + GetCol(i.ToString); end; // UniSession.Log(s); dbg.ClientEvents.ExtEvents.Values['reconfigure'] := 'function reconfigure(sender, store, columns, oldStore, oldColumns, eOpts) { ' + s + sLineBreak + '}'; end; вот такой код получается: if (columns[0]) {columns[0].filter = {type: 'list'}}; if (columns[1]) {columns[1].filter = {type: 'list'}}; if (columns[2]) {columns[2].filter = {type: 'list'}}; if (columns[3]) {columns[3].filter = {type: 'list'}}; if (columns[4]) {columns[4].filter = {type: 'list'}}; if (columns[5]) {columns[5].filter = {type: 'list'}}; if (columns[6]) {columns[6].filter = {type: 'list'}}; if (columns[7]) {columns[7].filter = {type: 'list'}}; if (columns[8]) {columns[8].filter = {type: 'list'}}; if (columns[9]) {columns[9].filter = {type: 'list'}}; if (columns[10]) {columns[10].filter = {type: 'list'}}; if (columns[11]) {columns[11].filter = {type: 'list'}}; if (columns[12]) {columns[12].filter = {type: 'list'}}; if (columns[13]) {columns[13].filter = {type: 'list'}}; if (columns[14]) {columns[14].filter = {type: 'list'}}; if (columns[15]) {columns[15].filter = {type: 'list'}}; if (columns[16]) {columns[16].filter = {type: 'list'}}; if (columns[17]) {columns[17].filter = {type: 'list'}}; if (columns[18]) {columns[18].filter = {type: 'list'}}; в конечном итоге в меню просто отсутствует пункт filter но если этот код применить к сетке, где заголовок является одноуровневым, то проблем нет Quote Link to comment Share on other sites More sharing options...
Sherzod Posted March 16, 2021 Share Posted March 16, 2021 1 hour ago, x11 said: но если этот код применить к сетке, где заголовок является одноуровневым, то проблем нет Да. Я проанализирую. Quote Link to comment Share on other sites More sharing options...
Sherzod Posted March 16, 2021 Share Posted March 16, 2021 2 hours ago, x11 said: но если этот код применить к сетке, где заголовок является одноуровневым, то проблем нет Вы должны использовать примерно следующий цикл...: Quote Link to comment Share on other sites More sharing options...
x11 Posted March 17, 2021 Author Share Posted March 17, 2021 Простите. Я так и не понял, на что именно обратить внимание? На forEach или на проверку if (col.titleEl)? Quote Link to comment Share on other sites More sharing options...
Sherzod Posted March 17, 2021 Share Posted March 17, 2021 1 minute ago, x11 said: Простите. Я так и не понял, на что именно обратить внимание? На forEach или на проверку if (col.titleEl)? Здравствуйте, Да, и на "многоуровневый" forEach: ... else if (col.columns) { col.columns.forEach(function(col) { ... Quote Link to comment Share on other sites More sharing options...
Sherzod Posted March 17, 2021 Share Posted March 17, 2021 13 minutes ago, x11 said: Простите. Я так и не понял, на что именно обратить внимание? На forEach или на проверку if (col.titleEl)? Попробуйте: function reconfigure(sender, store, columns, oldStore, oldColumns, eOpts) { columns.forEach(function(col) { if (col.titleEl) { col.filter = {type: "list"} } else if (col.columns) { col.columns.forEach(function(col) { if (col.titleEl) { col.filter = {type: "list"} } }) } }); } 1 Quote Link to comment Share on other sites More sharing options...
x11 Posted March 17, 2021 Author Share Posted March 17, 2021 спасибо огромное очень хотелось бы, чтобы функционал фильтров был бы встроен непосредственно в uniDBGrid, т.к. это очень удобно и функционально 1 Quote Link to comment Share on other sites More sharing options...
x11 Posted March 17, 2021 Author Share Posted March 17, 2021 15 minutes ago, Sherzod said: Попробуйте: но этот код можно применять только к многоуровневым заголовка, я правильно понимаю? Quote Link to comment Share on other sites More sharing options...
Sherzod Posted March 17, 2021 Share Posted March 17, 2021 Всем. 1 Quote Link to comment Share on other sites More sharing options...
MSMK Posted October 5, 2021 Share Posted October 5, 2021 On 2/28/2021 at 2:59 PM, x11 said: Т.е. чтобы вверху появились пункты. девки) Quote Link to comment Share on other sites More sharing options...
MSMK Posted October 5, 2021 Share Posted October 5, 2021 On 2/28/2021 at 2:59 PM, x11 said: Т.е. чтобы вверху появились пункты. есть один минус, при использовании фильтра типа "List", строится список тлько из данных текущей страницы (page), список по всем страницам он не строит. Использовании пагинации в гриде нужно, так как большой объем данных Quote Link to comment Share on other sites More sharing options...
MSMK Posted October 5, 2021 Share Posted October 5, 2021 49 minutes ago, =GGG= said: есть один минус, при использовании фильтра типа "List", строится список тлько из данных текущей страницы (page), список по всем страницам он не строит. Использовании пагинации в гриде нужно, так как большой объем данных а также фильтрация только по текущей странице 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.