Example Program - Block filling a grid control


The following program fills a grid with random numbers. It demonstrates the RowRequest() event which is triggered when the user scrolls to the end of the grid and the DataPending property is still TRUE. When the program runs out of data at 500 rows it leaves the DataPending property in its default FALSE value.

If you click on the grid and then press page down you will notice that the grid automatically adds the next block of rows. The same is true if you scroll down through the grid with the scroll bar.

DEFFORM Form1()={.form,.form$,.Style=0x50C000C4,.Width=310,.Height=196,.Text$="Block filled grid example",.Id=1024},\
{.ok,.button$,.Style=0x50010001,.Left=255,.Top=6,.Width=50,.Height=14,.Text$="OK",.__Anchor=5,.Id=1},\
{.cancel,.button$,.Style=0x50010000,.Left=255,.Top=23,.Width=50,.Height=14,.Text$="Cancel",.__Anchor=5,.Id=2},\
{.txtControl1,.static$,.Style=0x50000000,.Left=18,.Top=130,.Width=197,.Height=55,.Text$="Notice that when you pull down the scroll bar, or if you page down the grid continues to grow.  The grid will not grow beyond 500 entries.",.Id=1001},\
{.GridControl1,.KCMLgrid$,.Style=0x50010030,.Left=8,.Top=7,.Width=233,.Height=110,.Id=1000,.Rows=10,.Cols=8,.FixedRows=1}
DEFEVENT Form1.Enter()
	REM fill an initial ten rows
	LOCAL DIM row,col
	FOR row = 1 TO 10
	FOR col = 1 TO 8
		IF (col == 1)
			.GridControl1.Cell(row, col).Text$ = row
			CONTINUE
		END IF
		.GridControl1.Cell(row, col).Text$ = INT(RND(1) * 1000)
	NEXT col, row
	.GridControl1.DataPending = TRUE
END EVENT
DEFEVENT Form1.GridControl1.RowRequest()
	REM Grid wants new row, give it another 10
	LOCAL DIM row,col
	..Rows = ..Rows + 10
	FOR row = ..Rows - 9 TO ..Rows
	FOR col = 1 TO 8
		IF (col == 1)
			..Cell(row, col).Text$ = row
			CONTINUE
		END IF
		..Cell(row, col).Text$ = INT(RND(1) * 1000)
	NEXT col
	NEXT row
	IF (..Rows < 500)
		..DataPending = TRUE
	END IF
END EVENT
FORM END Form1
Form1.Open()