make sure we can't send an invalid row to the loader
full grid loader modified
 * 10 rows to start (used to be 20)
 * smarter when it need to load rows ( verify the rows up/down are loaded instead of total loaded count )
 * 2 rows load up/down if focused row is not loaded instead of 20 ( background timer will take care of others )
 * background timer:cancel background loader if pending requests exists (instead of waiting for completion)
 * background loader: use focused row as the start row, now the last loaded row