Dronton2
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору clear2121 Насколько я помню, если используешь ProgrammedFilter, то нужно использовать FilterList, причём, всю работу делать вручную: очистка, заполнение и т.д. Могу привести кусок кода на Delphi: Код: var fC, fTC, fL, fA: TdxMemField; i, beg, fin: integer; begin with mdControlVal do begin DisableControls; FilterList.Clear; // ProgrammedFilter := False; // Filtered := False; ProgrammedFilter := True; iAttrID := aRecord.Values[tvItemsAttrID.Index]; fC := Data.IndexOf(FieldByName('CHILDS')); fTC := Data.IndexOf(FieldByName('TRUE_CHILDS')); fL := Data.IndexOf(FieldByName('LEVEL')); fA := attrMap.Data.IndexOf(attrMap.FieldByName('ATTR')); for i := 0 to attrMap.Data.RecordCount - 1 do if PInteger(fA.Values[i])^ = iAttrID then begin beg := PInteger(attrMap.Data.IndexOf(attrMap.FieldByName('BEG')).Values[i])^; fin := PInteger(attrMap.Data.IndexOf(attrMap.FieldByName('FIN')).Values[i])^; break; end; for i := beg to fin do //Data.RecordCount - 1 do if (PDouble(fL.Values[i])^ = 1) and (PDouble(fC.Values[i])^ = PDouble(fTC.Values[i])^) then FilterList.Add(Pointer(i + 1)); Filtered := True; EnableControls; end; end; | mdControlVal и attrMap - две таблицы типа TdxMemData. Фильтр создаётся для mdControlVal. Написано было давно. В приведённом примере много мусора, я не стал упрощать для примера код - дольше было бы объяснять, как заполнять список. Смысл в том, что FilterList содержит список отфильтрованных записей. Преимущества: - работает быстрее, чем обычное фильтрование - может потребоваться при извращённом фильтровании, когда обычный фильтр создать сложно. Когда я этот код писал, пришлось покопаться в исходниках для TdxMemData - они несложные. Добавлено: Да, ещё: aRecord - запись в каком-то другом TableView. | Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 17:00 06-11-2007 | Исправлено: Dronton2, 17:10 06-11-2007 |
|