I was wondering why most of the web sites having articles/blogs about GridView
Sorting, Paging uses ViewState/Sessions objects etc for storing datatable
records for further use. Another way of using was getting data from database on
every request. But, if DB table data is not frequently changing, then why we
need to hit DB every time. Why can't' we store the data somewhere else. Here,
again came ViewState/Sessions objects etc for saving. Is there no other way of
doing it? Yes, we can achieve it by using static classes.
Note:
Am trying to show how we can do it by using static classes, if my way of coding
and logics is not good, please comment on it, so improvement can be done. Also,
this minimizes number of coding lines.
MVS used: 2008/2010
DB used: Northwind
1. Declared a temp Dataset object ->
private
static DataSet
tmpds = new DataSet();,
which was used for storing records
from Database and later used for sorting and paging of GridView.
2. For sorting, declared a temp String ->
static
String tmpSort =
" DESC";, and later using as
dataView.Sort =
e.SortExpression + (string)((e.SortDirection ==
SortDirection.Ascending) ? tmpSort : tmpSort);
tmpSort = (tmpSort == " ASC") ?
" DESC" : " ASC";
You can see on Page Load am calling Timer event
for fetching the records. Also, Timer Interval property was set to 10secs. It
will trigger the event in every 10secs for fetching records from DB; this will
take care of new records updations also.
Sample source codes attached for download and please post your comments.

Mayur GujrathiPosted Apr 9, 2011, 2:34 AM
Hi, this is very nice article
sagar BhosalePosted Feb 1, 2011, 12:52 AM
Thanks for uploading such nice tutorials. I want to know how to create Chatting application in browser? using simple asp.net concept without using socket & remoting concept.Please replye as you possible.
Andrew FensterPosted Oct 25, 2010, 11:16 AM
One other thought. If your web application is running on multiple servers, you may have problems with static variables. You may also have problems using the Cache, but that's a different issue. I've seen articles about problems with static variables in IIS. See for example http://sharenotes.wordpress.com/2010/01/07/static-variables-issue-in-shared-hosting-or-multiple-servers/ So again, I think it's a clever idea, but I don't think I would try it without a lot of testing on a server farm.
Andrew FensterPosted Oct 25, 2010, 8:37 AM
There's already an object to do what you want, the Cache. You can stick your DataSet in the Cache like this: Cache["MyDataSet"] = myDataSet; You get it back out of the Cache like this: DataSet myDataSet = (DataSet)Cache["MyDataSet"]; if (myDataSet == null) { myDataSet = LoadMyDataSet( ); Cache["MyDataSet"] = myDataSet; } You can control how long the data remains in the Cache. For example, you can have the Cache drop your DataSet every 20 minutes. So the next time you need it after 20 minutes, the data will get reloaded. There are many other features, and the Cache is optimized to work with your server. There's no need for you to rewrite the book when there's already something there. If the Cache is not sufficient, there are other very well developed alternatives such as the MongoDB or SQLite. So I think you have a clever idea, making a static DataSet, but it's not necessary.
Suthish NairPosted Sep 17, 2010, 3:15 PM
Hi, Thanks for the comments, i was waiting for some discussions about static topics. Because sometime its a difficult topic to understand, am still learning. :-) You are right, the above article not saying this a final solution to avoid session, veiwstate etc. But to an extend you can avoid those. If you are sharing same datatable/dataset across all users/sessions, then you can try above article. This line will always reset the dataset and bind new updated records if needed. private static DataSet tmpds = new DataSet(); There will be always one copy of tmpds. I think this will not increase the variable/obects count in memory, only the dataset will get refreshed with new records. If am wrong, please correct me. But, if your datatable/dataset is different against every sessions then i will not suggest above article. Static variable is not good to store user-specific data. Also, you can change your logic in removing static variable (tmpSort) and use a Label control for storing sorting value. <asp:Label ID="lbl1" runat="server"> DESC</asp:Label> //private static String tmpSort = " DESC"; dataView.Sort = e.SortExpression + (string)((e.SortDirection == SortDirection.Ascending) ? lbl1.Text : lbl1.Text); lbl1.Text = (lbl1.Text == " ASC") ? " DESC" : " ASC"; A Static variable has only a single lifetime, which lasts for the entire time your application is running. Resetting of application pool or IIS reset will helps clear the data.
Felipe RamosPosted Sep 16, 2010, 11:47 AM
Nari, my question would be on what the trade would be like; What would be the memory implications when you have an increasing amount of concurrent users? I always thought that static members shouldn't be associated with specific objects.
Meyyappan MeyyappanPosted Sep 14, 2010, 1:40 PM
Hi, Just wondering that static object will be shared across all users. say if second user sets new value for dataset,first user also will get the new value isnt it? Pls coorect me if im wrong