Skip to main content

DevExpress v25.1 Update — Your Feedback Matters

Our What's New in v25.1 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

Example: TcxCustomDataController.FilteredRecordCount, TcxCustomDataController.FilteredRecordIndex

  • 2 minutes to read

The number of records that satisfy the applied filter criteria can be obtained via the FilteredRecordCount property.

The following example iterates filtered records in a tvUsers view of the ExpressQuantumGrid control and stores values of their key fields in a list. A key field is a unique field used to identify a dataset record.

After that, filtered records can be accessed by their key field values via the data controller’s LocateByKey or the dataset’s Locate methods. These methods make a particular record active, thus allowing you to change its field values.

The key field in the current example is identified by the ID field. To retrieve the ID field value, a filtered record is activated using the FocusedRecordIndex property. This property identifies the record index of the focused record. See the FocusedRecordIndex property for more information.

The record index of a specific filtered record is determined by the FilteredRecordIndex property.

var
  I: Integer;
  AKeyFieldValueList: TList;
//...
  with tvUsers.DataController do
  begin
    //Select records with tvUsersCITY column values
    //equal to 'Los Angeles'
    Filter.Clear;
    Filter.Root.AddItem(tvUsersCITY, foEqual, 'Los Angeles', 
      'Los Angeles');
    Filter.Active := True;
    AKeyFieldValueList := TList.Create;
    BeginUpdate;
    try
      //Copy key field values of filtered records to the list
      for I := 0 to FilteredRecordCount - 1 do
      begin
        FocusedRecordIndex := FilteredRecordIndex[I];
        AKeyFieldValueList.Add(Pointer(Integer(
          DataSet.FieldValues['ID'])));
      end;
      //do some operation on filtered records using key field values
      //...
    finally
      EndUpdate;
      AKeyFieldValueList.Free;
    end;
  end;