Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Проблема с refresh grid'а  [new]
Pr0teus
Guest
Никак не могу понять в чем проблема. Суть заключается в следующем. Есть grid, на колонки которого устанавливаются фильтры. Снятие фильтра осуществляется в методе clearfilter класса grid (текст метода см. ниже). Данный метод вызывается из двух мест, из toolbar'а и popup меню. При этом если он вызван из toolbar'а, то grid нормально обновляется, если же из popup меню, то нет (запись просто становиться на EOF()). Если же идти пошагово в Debug Mode то все нормально проходит.

Код toolbar'а
IF VARTYPE(THISFORM.CurrentGrid) = "O" THEN
  THISFORM.CurrentGrid.ClearFilter()
ENDIF

Код popup меню
ON SELECTION BAR 5 OF submenufiltr loGrid.ClearFilter(loHeader)
ON SELECTION BAR 6 OF submenufiltr loGrid.ClearFilter()

Код ClearFilter
LPARAMETERS loHeader

LOCAL loColumn, lcAlias, i, lcFilter,llDoIt,lcTableName, lnRecNo


WITH THIS
  m.lcAlias = ALIAS()
  m.llDoIt = .T.
  
 IF VARTYPE(m.loHeader) = "O"
    
    .ClearFilterTable(loHeader.Parent)  && очистка таблицы с фильтрами
    loHeader.Parent.Filtr_Value = ''    
    .Total_Filtr = .BuildFilterStr()         && построение нового фильтра

  ELSE

    * очистка всех фильтров
    IF EMPTY(.Total_Filtr) THEN
      m.llDoIt = .F.
    ELSE
      FOR m.i = 1 TO .ColumnCount
        .Columns[m.i].Filtr_Value = ''
      ENDFOR
    ENDIF
    .Total_Filtr = ''    

    * удаление записей из служебной таблицы
    m.lcTableName = UPPER(ALLTRIM(THIS.Name) + "_ExFilter")
    IF USED(m.lcTableName) THEN
      SELECT (m.lcTableName)
      DELETE ALL
    ENDIF

  ENDIF
  
  IF m.llDoIt THEN

    IF !EMPTY(.RecordSource) AND USED(.RecordSource)
          
      SELECT (.RecordSource)
      m.lcFilter = ALLTRIM(.Total_Filtr)
    
      IF EMPTY(m.lcFilter)
        SET FILTER TO
      ELSE
        SET FILTER TO &lcFilter
      ENDIF


      * почему-то из toolbar'а все обновляется и grid отображает все данные
      * а из popup меню grid не обновляется и запись ставится на EOF
      * хотя вызовы равнозначны 8(
      GOTO TOP
     
    ENDIF

    .ShowAllPictureHeader()
    .Refresh()
    IF !EMPTY(m.lcAlias)
      SELECT (m.lcAlias)
    ENDIF

    .After_Set_Filter()
    .RefreshAggregate()
  ENDIF
ENDWITH
31 май 07, 09:16    [4208830]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с refresh grid'а  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Есть такая проблема с фильтром на гриде.
Решается только переводом фокуса с грида и возвратом на него. Сообственно, когда вы делаете эту опреацию через Toolbar, фокус и "уходит" с грида. Аналогичная операция происходит и при работе с отладчиком.
Т.к. перевод фокуса с гридом не всегда желателен, то в класса я эту операцию не включал бы.
С уважением, Алексей
31 май 07, 11:00    [4209850]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с refresh grid'а  [new]
Pr0teus
Guest
2 Aleksey-K

Поясните пожалуйста фразу, а то не догоняю что-то 8) :
Aleksey-K
Т.к. перевод фокуса с гридом не всегда желателен, то в класса я эту операцию не включал бы.
31 май 07, 11:08    [4209931]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с refresh grid'а  [new]
PaulWist
Member

Откуда:
Сообщений: 2236
А мне вот это пояснить

Aleksey-K
Сообственно, когда вы делаете эту опреацию через Toolbar, фокус и "уходит" с грида.


поведение тулбара изменилось?
31 май 07, 13:36    [4211593]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с refresh grid'а  [new]
Pr0teus
Guest
Что-то всем все надо объяснять 8)
Ладно, Aleksey-K в принципе все объяснил, но его совет я не допонял )))

P.S.
Grid кстати основан на классе Aleksey-K smartgrid, но с дополнительными модификациями. Все хочу выложить, но времени не хватает на рихтовку.
31 май 07, 13:54    [4211777]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить