AFAIK, the TDBGrid and TDataSet are interacting correctly - TDataSet buffers the records it contains in memory, and won't make them available until all records are in, so to speak.
On a different approach... by TDataSet, do you mean a TTable? You might try a TQuery instead; depending on the database you're using, and what it is you're trying to achieve, it might be an appropriate solution for you. What exactly are you using as a database, and how does the user interact with the grid in your application? [EMAIL PROTECTED] wrote: > > Delphi 5. > Have a TDBGrid attached to a TDataset. > > The dataset has a custom filter ie > procedure TForm1.OnFilterRecord(DataSet: TDataSet; var Accept: > Boolean); ... > > Sometimes, the filter will only pick out a handful of records from a large > dataset. Say 7 records. > > I notice the grid does not display any entries until all 7 have been found > (the grid contains more than 7 rows). To find all 7, the entire file has > been scanned. > > Is there a way to update the grid immediately: as soon as OnFilterRecord > has returned Accept=true ? > > That is, the grid would populate rows (plop, plop, plop) as the entire > file was scanned and each of the records found. The user could then CANCEL > when they saw their record come up. Instead of waiting for the entire file > to be filtered/scanned. > > Dataset.Refresh starts the while process over again: that is not what > I want. > > Feels like I want a "grid.refresh" method: an Application.ProcessMessages > sort of thing, to ensure the grid is actually displaying the record which > I know has just been accepted in OnFilterRecord. > > Is there a trick, or am I deluding myself, and should take a different > approach... ? > > Many thanks in advance. > > [Non-text portions of this message have been removed]

