void __fastcall TGridModeDemoMainForm::tvDataControllerFilterGetValueList(
    TcxFilterCriteria *Sender, int AItemIndex,
    TcxDataFilterValueList *AValueList)
{
  TDataSet *ADataSet = ((TcxGridDBTableView*)Grid->FocusedView)->DataController->DataSet;
  TcxGridDBColumn *AColumn = ((TcxGridDBTableView*)Grid->FocusedView)->Columns[AItemIndex];
  bool AIsLookupColumn = (AColumn->PropertiesClass == __classid(TcxLookupComboBoxProperties));
  try{
    Screen->Cursor = crHourGlass;
    GridModeDemoDataDM->qryHelper->SQL->Clear();
    GridModeDemoDataDM->qryHelper->SQL->Add(
      "Select DISTINCT " + AColumn->DataBinding->FieldName + " From " +
      GridModeDemoDataDM->GetTableNameByDataSet(ADataSet));
    GridModeDemoDataDM->qryHelper->SQL->Add(
      GetSQLCondition((TcxGridDBTableView*)Grid->FocusedView, false));
    GridModeDemoDataDM->qryHelper->Open();
    GridModeDemoDataDM->qryHelper->First();
    while (!GridModeDemoDataDM->qryHelper->Eof){
      Variant ADisplayValue = GridModeDemoDataDM->qryHelper->Fields->Fields[0]->Value;
      if (AIsLookupColumn){
        TcxLookupComboBoxProperties *AProperties =
          (TcxLookupComboBoxProperties*)AColumn->GetProperties();
        ADataSet = AProperties->ListSource->DataSet;
        ADisplayValue = ADataSet->Lookup(
          AProperties->KeyFieldNames,ADisplayValue, AProperties->ListFieldNames);
      }
      if (VarIsNull(ADisplayValue)) return;
      AValueList->Add(fviValue, GridModeDemoDataDM->qryHelper->Fields->Fields[0]->Value,
        ADisplayValue, false);
      GridModeDemoDataDM->qryHelper->Next();
    }
    GridModeDemoDataDM->qryHelper->Close();
  }
  __finally{
    Screen->Cursor = crDefault;
  }
}