Isadore
Hi
I used to (until last year) work as an Analytical Chemist, so this is actually quite interesting. Nice site!
Anyway, it seems to me that you might like to consider the following
If you use a reader, you are fundamentally hitting the db for every request. You can avoid hitting the db every postback by only binding if not page.ispostback, but even so, that is a lot of hits, potentially.
As we mentioned, you can choose to persist a dataset, and I think from looking at your site this might be appropriate. The data is not constantly changing, and no SQL needs to be sent to the db to query the records or anything.
What you might like to consider is instead of using session state, to persist the ds in application state. You could persist the entire data table in application state, and then for each page request, deep clone another datatable, filtered by the dropdown choice. You can then sort this.
You will need to work out some means of invalidating the application ds so that is is refreshed from the db occasionally. The simplest might be to do this in the session start event in global.asax. You could store an application variable with the last time the ds was refreshed and update it if this is too long ago.
Having said all this, even 200 hits per day should not merit this scheme, unless perhaps there is other demand on the db. If the user experience is acceptable, then you don't need to squeeze more performance out of it.
One other thing you might like to look at is paging the datagrid - some of those tables are quite big and I expect they will grow over time.
Finally, I am not a consultant, or some guru. I'm just going through the same kinds of problems myself and keeping an eye on this forum so I can investigate stuff I am likely to run into.
Hope this is of use.
Mark