Friday, January 9, 2009

ഡേറ്റാഗ്രിഡ് സോര്‍ട്ടിംങ്ങ് : datagrid sorting

xml ഫയലില്‍ നിന്ന് ഡേറ്റാ എടുത്ത് ഡേറ്റാഗ്രിഡില്‍ ഡിസ്‌പ്ലേ ചെയ്യുമ്പോള്‍ എങ്ങനെയാണ് ഡേറ്റാ സോര്‍ട്ട് ചെയ്യുന്നത് എന്നുള്ള പ്രോഗ്രാം ആണ് താഴെക്കൊടുക്കുന്നത്. prayerrequest.xml എന്ന പേരില്‍ ഒരു xml ഫയല്‍ ഉണ്ടാക്കുന്നു.



[?xml version="1.0" encoding="utf-8"?]

[prayerrequest]

[requesters]

[name]shibu[/name]

[request]test data[/request]

[date]2002-Jan-03[/date]

[/requesters]
::

::

::

::

[/prayerrequest]


നോട്ട് : Xml ല്‍ [നു പകരം< എന്നും ] നു പകരം > എന്നും ഉപയോഗിക്കുക..

ഡേറ്റാഗ്രിഡിലേക്ക് ഡേറ്റാ സോര്‍ട്ട് ചെയ്യാനുള്ള കോഡ് താഴെ കൊടുക്കുന്നു.


{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("prayerrequest.xml"));
DataView dv = new DataView();
dv = ds.Tables[0].DefaultView;
dv.Sort = "request desc";
DataGrid1.DataSource = dv;
DataGrid1.DataBind();
}

ReadXml ഉപയോഗ്ഗിച്ച് Xmlനെ ഡേറ്റാസെറ്റിലേക്ക് എടുത്തതിനു ശേഷം അത് ഡേറ്റാവ്യുവിലേക്ക് മാറ്റുന്നു. dv.Sort = "request desc"; ലെ request ഫീല്‍ഡ് നെയിമും desc സോര്‍ട്ടിംങ്ങ് ഓര്‍ഡറും ആണ്.

ഈ പ്രോഗ്രാമിന്റെ ഔട്ട്പുട്ട് :

ഹിറ്റ് കൌണ്ടര്‍ : hit counter

വെബ് സൈറ്റില്‍ എത്ര ആളുകള്‍ സന്ദര്‍ശനം നടത്തി , ഒരു പ്രത്യേക പേജ് എത്ര ആളുകള്‍ കണ്ടു എന്ന് അറിയുന്നതിനു വേണ്ടിയാണ് ഹിറ്റ് കൌണ്ടറുകള്‍ ഉപയോഗിക്കുന്നത് . ഇവിടെ മൂന്നു രീതികളിലാണ് ഹിറ്റ് കൌണ്ടറുകള്‍ നിര്‍മ്മിച്ചിരിക്കുന്നത്.(ഇതില്‍ ഒന്നാമത്തെ രീതിയ്ക്ക് ഒരു പോരായ്മയുണ്ട് .അതൊരു വലിയ പോരായ്‌മ തന്നെയാണ് )





1. Global.asax ഫയല്‍ ഉപയോഗിച്ച്


2. Xml ഉപയോഗിച്ച്


3. SQL ഉപയോഗിച്ച്





ഏത് പേജില്‍ , എവിടെയാണ് ഹിറ്റ് കൌണ്ടര്‍ കാണിക്കേണ്ടത് , അവിടെ lbl_counter എന്ന പേരില്‍ ഒരു ലേബല്‍ വയ്ക്കുക.





1. Global.asax ഫയല്‍ ഉപയോഗിച്ച്
Global.asax ഫയല്‍ ഉപയോഗിച്ച് ഹിറ്റ് കൌണ്ടര്‍ നിര്‍മ്മിച്ചാല്‍ സിസ്റ്റം (സെര്‍വ്വര്‍) റിസ്റ്റാര്‍ട്ട് ആയിക്കഴിഞ്ഞാല്‍ Global.asax ഫയലില്‍ കൊടുത്തിരിക്കുന്ന വേരിയബളിന്റെ വില ആയിരിക്കും ഹിറ്റ് കൌണ്ടര്‍ നമ്പര്‍ ആയി വീണ്ടും വരുന്നത്. കാരണം ..Code in the global.asax is compiled when the web application is built for the first time. എന്താണ് global.asax ??The global.asax file is used to add applicatuon level logic and processing. The global.asax file resides in the root directory of an ASP.Net application.At run time ,global.asax is parsed and compiled into a dynamically generated .Net framework class derived from the HttpApplication base class.





Global.asax ഫയലിന്റെ


Application_Start ഭാഗത്ത് Application.Add("count",0); എന്നെഴുതുക.


Session_Start ല്‍ Application["count"] = Convert.ToString(Convert.ToInt32(Application["count"])+1); എന്നും എഴുതുക. (ചിത്രം കാണുക)





ഫോമിന്റെ പേജ് ലോഡില്‍ താഴെക്കാണുന്ന കോഡ് എഴുതുക :

lbl_counter.Text = Application["count"].ToString();






2. Xml ഉപയോഗിച്ച് :

ആദ്യം counter.xml എന്ന പേരില്‍ ഒരു xml നിര്‍മ്മിക്കുക.(ചിത്രം നോക്കുക)

പേജ് ലോഡില്‍ താഴെക്കാ‍ണുന്ന കോഡ് എഴുതുക .

{

XmlDocument xmldoc = new XmlDocument();

xmldoc.Load(Server.MapPath("counter.xml"));

DataSet ds = new DataSet();

ds.ReadXml(Server.MapPath("counter.xml"));

lbl_counter.Text = ds.Tables[0].Rows[0].ItemArray[0].ToString();

XmlNode xnode = xmldoc.SelectSingleNode("//counter/number");

xnode.InnerText = Convert.ToString(Convert.ToInt32(lbl_counter.Text) + Convert.ToInt32(1));

xmldoc.Save(Server.MapPath("counter.xml"));

}

3. SQL ഉപയോഗിച്ച് ::

number എന്ന കോളം മാത്രമായി counter എന്ന ടേബിള്‍ ആദ്യം നിര്‍മ്മിക്കുക. (Column Name : number ; Data Type : int)

പേജ് ലോഡില്‍ താഴെക്കാ‍ണുന്ന കോഡ് എഴുതുക

{

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=shibu;Integrated Security=True");

SqlDataAdapter ada = new SqlDataAdapter();

con.Open();

ada.SelectCommand = new SqlCommand("select number from counter", con); SqlDataReader sdr = ada.SelectCommand.ExecuteReader();
sdr.Read();

lbl_counter.Text= sdr.GetValue(0).ToString();

sdr.Close();

Int32 num = (Convert.ToInt32(lbl_counter.Text) + Convert.ToInt32(1));
//update the column

ada.SelectCommand = new SqlCommand("update counter set number=" + num + " where number=" + lbl_counter.Text + "", con);

ada.SelectCommand.ExecuteNonQuery();
con.Close();

}