We use the CellDynamicContents event for that. You can define the total number of rows, but the CellDynamicContents event will be raised only for cells that become visible in the control's viewport. if you want, you can even cache the values you have already retrieved no to request them again and again.