The server doesn't retain the value because each request is handled by a new instance of the page class. The variable holding the data table is not the same as the variable in the previous request.
You can avoid the database call if you store the data table somewhere between requests, but the drawback is the resources needed for that. If you put the data table in view state, it will cost you net bandwith and affect the page load time. If you store it on the server it adds to the memory used, and it's not trivial to keep track of what data you can remove from memory.