w2ui сетка выбрать строку после удаления - PullRequest
0 голосов
/ 06 октября 2019

в сетке w2ui Я хочу выбрать линию сетки после удаления строки ниже. Вот мой код JavaScript:


   w2ui[ grd_obj.grid_id ].on( 'delete', function( event ) 
   {
      event.onComplete = function()
      { 
         var min_ind = 100000
         var sel = w2ui[ grd_obj.grid_id ].getSelection()
         for ( var r in sel )
         {
            var ind = w2ui[ grd_obj.grid_id ].get( sel[ r ].recid, true )
            min_ind = Math.min( ind, min_ind )
         }
         if ( event.phase == 'after' )
         {
            var ind = w2ui[ grd_obj.grid_id ].prevRow( min_ind )
            var rcd = w2ui[ grd_obj.grid_id ].records[ ind ]
            w2ui[ grd_obj.grid_id ].selectNone()
            w2ui[ grd_obj.grid_id ].select( { recid: rcd[ grd_obj.grid_table.grid_key ], column: 0 } )
         }
      }
   })

Я не могу найти, как перезагружать "перезагрузить" после удаления ... Отладка Я вижу, что в "после" события .select () работает иможно увидеть, что нужная запись выбрана. Но, как я понимаю, «удалить» триггер «перезагрузить» сетки и мой выбор исчезает ...: (

Как решить эту проблему?

База данных на стороне сервера (mysql + php).

Заранее спасибо ...

РЕДАКТИРОВАНИЕ (решено):

Найдено решение. Не уверен, что это хорошо, но оно работает ... Сделал что-то подобноечто: В свой объект сетки добавлен параметр grid_setRec, затем в событии delete присвоить это значение

   w2ui[ grd_obj.grid_id ].on( 'delete', function( event ) 
   {
      event.onComplete = function()
      { 
         var min_ind = 10000
         var sel = w2ui[ grd_obj.grid_id ].getSelection()
         for ( var r in sel )
         {
            var ind = w2ui[ grd_obj.grid_id ].get( sel[ r ].recid, true )
            min_ind = Math.min( ind, min_ind )
         }
         if ( w2ui[ grd_obj.grid_id ].total > 0 )
         {
            var ind = w2ui[ grd_obj.grid_id ].prevRow( min_ind )
            var rcd = w2ui[ grd_obj.grid_id ].records[ ind ]
            grd_obj.grid_setRec = rcd[ grd_obj.grid_table.grid_key ]
         }
      }
   })

В событии load загрузить это значение:

   w2ui[ grd_obj.grid_id ].on( 'load', function( event ) 
   {
      event.onComplete = function()
      { 
         if ( grd_obj.grid_setRec != '' )
         {
            reload_callBack( grd_obj, grd_obj.grid_setRec )
            grd_obj.grid_setRec = ''
         }
      }
   })

функция reload_callBackЯ уже сегодня использую как reload событие обратного вызова, затем добавляю новую запись в сетку.

function reload_callBack( grd_obj, rcd_id )
{
   setTimeout( function ()
   { 
      w2ui[ grd_obj.grid_id ].selectNone()
      w2ui[ grd_obj.grid_id ].select( { recid: rcd_id, column: 0 } )
      var ind = w2ui[ grd_obj.grid_id ].get( parseInt( rcd_id ), true )
      w2ui[ grd_obj.grid_id ].scrollIntoView( ind )
   }, 100 )
}

Теперь все работает так, как я хотел ...:)

1 Ответ

0 голосов
/ 07 октября 2019

Решил эту проблему, добавив собственную переменную для перезагрузки. «Удалить» событие triiger «загрузить» событие. Здесь я вижу необходимость повторного выбора с функцией обратного вызова или нет ...

...