<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>With Great Power comes Great Response.write("Ability") : Components</title><link>http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx</link><description>Tags: Components</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>ADO.NET Data Services : Efficient Error Handling across Application Tiers</title><link>http://blogs.msdn.com/phaniraj/archive/2009/11/14/ado-net-data-services-efficient-error-handling-across-application-tiers.aspx</link><pubDate>Sat, 14 Nov 2009 04:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9922386</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/9922386.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=9922386</wfw:commentRss><description>&lt;p&gt;While developing an application that spans multiple tiers , it is important that you be able to flow error information through the tiers without losing    &lt;br /&gt;any context or details in the tiers. With ADO.NET Data Services , we have an error contract which guarantees that all errors thrown from the Data Service ,     &lt;br /&gt;wrapped inside a &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.services.dataserviceexception.aspx"&gt;DataServiceException&lt;/a&gt; , will be represented in a standard way on the wire when we send the error down to the client.     &lt;br /&gt;    &lt;br /&gt;For example , consider the Query Interceptor shown below . &lt;/p&gt;  &lt;pre class="csharpcode"&gt;[QueryInterceptor(&lt;span class="str"&gt;&amp;quot;Customers&amp;quot;&lt;/span&gt;)]
&lt;span class="kwrd"&gt;public&lt;/span&gt; Expression&amp;lt;Func&amp;lt;Customers, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt; OnQueryCustomers()
{
        &lt;span class="kwrd"&gt;string&lt;/span&gt; loggedInUser = HttpContext.Current.User.Identity.Name;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (UserHasAccessToSet(&lt;span class="str"&gt;&amp;quot;Customers&amp;quot;&lt;/span&gt;, loggedInUser))
        {
            &lt;span class="rem"&gt;//Filter Expression goes here&lt;/span&gt;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; entity =&amp;gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="rem"&gt;//User does not have access to '/Customers' , throw AccessViolationException&lt;/span&gt;
        {
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DataServiceException(403,
                &lt;span class="str"&gt;&amp;quot;Forbidden&amp;quot;&lt;/span&gt;,
                String.Format(&lt;span class="str"&gt;&amp;quot;User '{0}' cannot request data from '{1}' table&amp;quot;&lt;/span&gt;, loggedInUser, &lt;span class="str"&gt;&amp;quot;Customers&amp;quot;&lt;/span&gt;),
                &lt;span class="str"&gt;&amp;quot;en-US&amp;quot;&lt;/span&gt;);
        }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;











.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;











.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;When the Astoria server runtime throws the above exception , the 403 value specified above&amp;#160; gets turned into the response status code of the request 
  &lt;br /&gt;which caused this exception.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/Ado.netDataServicesEfficientErrorHandlin_A066/StatusCodeInFiddler_1.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="StatusCodeInFiddler" border="0" alt="StatusCodeInFiddler" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/Ado.netDataServicesEfficientErrorHandlin_A066/StatusCodeInFiddler_thumb_1.png" width="402" height="79" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;and the error message is serialized out to be in this format : &lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;standalone&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;yes&amp;quot;&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;error&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/ado/2007/08/dataservices/metadata&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Forbidden&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;message&lt;/span&gt; &lt;span class="attr"&gt;xml:lang&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;en-US&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;User 'NoPermissions' cannot request data from 'Customers' table&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;message&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;error&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;At this point , the service has not lost any information that the service author intended to convey to a service consumer. 
  &lt;br /&gt;

  &lt;br /&gt;Now , lets consider the client library and how it handles this case. 

  &lt;br /&gt;Lets consider a query for the “Customers” set to which the currently logged-in user doesn't have permissions.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (Customers customerEntity &lt;span class="kwrd"&gt;in&lt;/span&gt; northwindContext.CreateQuery&amp;lt;Customers&amp;gt;(&lt;span class="str"&gt;&amp;quot;Customers&amp;quot;&lt;/span&gt;) ) {
 &lt;span class="rem"&gt;//Do something with the customerEntity here&lt;/span&gt;
}&lt;/pre&gt;

&lt;p&gt;In this case, running the above code&amp;#160; would result in a DataServiceQueryException being thrown.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;System.Data.Services.Client.DataServiceQueryException: 
  An error occurred while processing this request. ---&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;        &lt;br /&gt;     System.Data.Services.Client.DataServiceClientException: 
      &lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;standalone&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;yes&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;        &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;error&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/ado/2007/08/dataservices/metadata&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Forbidden&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;message&lt;/span&gt; &lt;span class="attr"&gt;xml:lang&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;en-US&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;User 'NoPermissions' cannot request data from 'Customers' table&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;message&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;      &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;error&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Note that the DataServiceException thrown by the server is now set to the Message property of the InnerException of the DataServiceQueryException. 
  &lt;br /&gt;We do not de-serialize the DataServiceException into an exception type on the client side. 

  &lt;br /&gt;By default , since the exception is now a string on the client side , you don’t have direct&amp;#160; access to the information contained inside the Exception. 

  &lt;br /&gt;The information is all still there , just not easily accessible anymore. Since the error contract is &lt;a href="http://msdn.microsoft.com/en-us/library/dd541497(PROT.10).aspx"&gt;documented&lt;/a&gt; and follows a standard pattern , 

  &lt;br /&gt;we can easily write a visitor that de-serializes an exception object from the “Message” property&amp;#160; of the Inner Exception.&lt;/p&gt;

&lt;p&gt;One such de-serializer for Error contracts is shown at the bottom of this post 
  &lt;br /&gt;It contains two methods : 

  &lt;br /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;TryParse : which takes in an exception caused during Querying or updating via the client library and 
    &lt;br /&gt;returns a DataServiceException that was thrown by the Server &lt;/li&gt;

  &lt;li&gt;Throw : which takes in an exception caused during Querying or updating via the client library and 
    &lt;br /&gt;re-throws the DataServiceException that was thrown by the Server &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;script src="http://gist.github.com/227246.js"&gt;&lt;/script&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9922386" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Demo/default.aspx">Demo</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Documentation/default.aspx">Documentation</category></item><item><title>Entities , How many ways do I count thee ?</title><link>http://blogs.msdn.com/phaniraj/archive/2008/08/18/entities-how-many-ways-do-i-count-thee.aspx</link><pubDate>Mon, 18 Aug 2008 02:51:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8875636</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/8875636.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=8875636</wfw:commentRss><description>&lt;p&gt;Its a common ask that we introduce aggregating mechanisms in Data services so that one can do a Count of    &lt;br /&gt;the number of entities present in an EntitySet easily.     &lt;br /&gt;In this blog post , I will outline one method of implementing a “Count” method that works for you.     &lt;br /&gt;    &lt;br /&gt;The interface to the count method will be     &lt;br /&gt;&lt;/p&gt;  &lt;pre class="darkcsharpcode"&gt;http://&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ServiceEndPoint&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;/Count?entitySetName='&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;entitySetName&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;'&lt;/pre&gt;

&lt;h4&gt;Server-Side&lt;/h4&gt;

&lt;p&gt;On the server-side , we will write a Service Operation that takes the name of the EntitySet as an input parameter.&lt;/p&gt;

&lt;pre class="darkcsharpcode"&gt;[WebGet]
 &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; Count(&lt;span class="kwrd"&gt;string&lt;/span&gt; entitySetName) {
 &lt;span class="rem"&gt;//Implementation goes here&lt;/span&gt;
 }&lt;/pre&gt;

&lt;p&gt;In your Service Operations / Interceptors ,&amp;#160; you have access to the CurrentDataSource which represents your data providers. 
  &lt;br /&gt;The entity sets are properties off of the CurrentDataSource. We will get the entityset off of the CurrentDataSource 

  &lt;br /&gt;and get the count of entities by casting it to &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.ilistsource.aspx"&gt;IListSource&lt;/a&gt;.&lt;/p&gt;

&lt;pre class="darkcsharpcode"&gt;[WebGet]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; Count(&lt;span class="kwrd"&gt;string&lt;/span&gt; entitySetName)  {
&lt;span class="kwrd"&gt;&lt;br /&gt;long&lt;/span&gt; countOfEntities = 0;

&lt;span class="rem"&gt;//Get the Property off of the CurrentDataSource&lt;/span&gt;
PropertyInfo esProperty = &lt;span class="kwrd"&gt;this&lt;/span&gt;.CurrentDataSource.GetType().GetProperty(entitySetName);

&lt;span class="rem"&gt;//Get the EntitySet off of the CurrentDataSource&lt;/span&gt;
&lt;span class="kwrd"&gt;object&lt;/span&gt; esValue = esProperty.GetValue(&lt;span class="kwrd"&gt;this&lt;/span&gt;.CurrentDataSource, &lt;span class="kwrd"&gt;null&lt;/span&gt;);

&lt;span class="rem"&gt;//Cast the EntitySet to IListSource&lt;/span&gt;
IListSource genericESList = esValue &lt;span class="kwrd"&gt;as&lt;/span&gt; IListSource;

&lt;span class="rem"&gt;//Get the count of entities by fetching the list and getting the value of its &amp;quot;Count&amp;quot; Property&lt;/span&gt;
countOfEntities = genericESList.GetList().Count;

&lt;span class="kwrd"&gt;return&lt;/span&gt; countOfEntities;
}&lt;/pre&gt;

&lt;h4&gt;Client-Side&lt;/h4&gt;

&lt;p&gt;we will make an extension method on the data service context that takes the name of the entityset and returns the count. 
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="darkcsharpcode"&gt;DataServiceContext nwContext = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataServiceContext( &lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;&amp;quot;ServiceRoot&amp;quot;&lt;/span&gt;) );
&lt;span class="kwrd"&gt;long&lt;/span&gt; countOfProducts = nwContext.Count(&lt;span class="str"&gt;&amp;quot;Products&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;p&gt;Extension method on the DataServiceContext to retrieve count of entities in entityset&amp;#160; on the server . 
  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="darkcsharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; Count(&lt;span class="kwrd"&gt;this&lt;/span&gt; DataServiceContext context, &lt;span class="kwrd"&gt;string&lt;/span&gt; entitySetName) {
 &lt;span class="rem"&gt;//Call the ServiceOperation on the server side passing the entitySetNameas a parameter&lt;/span&gt;
 var results = context.Execute&amp;lt;&lt;span class="kwrd"&gt;long&lt;/span&gt;&amp;gt;(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(String.Format(&lt;span class="str"&gt;&amp;quot;Count?entitySetName='{0}'&amp;quot;&lt;/span&gt;, entitySetName),
   UriKind.RelativeOrAbsolute));
 &lt;span class="rem"&gt;//Get the result off of the IEnumerable&lt;/span&gt;
 &lt;span class="kwrd"&gt;long&lt;/span&gt; count = results.First&amp;lt;&lt;span class="kwrd"&gt;long&lt;/span&gt;&amp;gt;();
 &lt;span class="rem"&gt;//return the count&lt;/span&gt;
 &lt;span class="kwrd"&gt;return&lt;/span&gt; count;
}&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;h4&gt;Complete Sample Code : &lt;/h4&gt;

&lt;h5&gt;Put this in your Service Code on the server . &lt;/h5&gt;

&lt;br /&gt;

&lt;pre class="darkcsharpcode"&gt;[WebGet]
[SingleResult]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; Count(&lt;span class="kwrd"&gt;string&lt;/span&gt; entitySetName) {
&lt;span class="kwrd"&gt;long&lt;/span&gt; countOfEntities = 0;
&lt;span class="kwrd"&gt;if&lt;/span&gt; (entitySetName == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
  &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span class="str"&gt;&amp;quot;entitySetName&amp;quot;&lt;/span&gt;);
}
&lt;span class="rem"&gt;//Get the Property off of the CurrentDataSource&lt;/span&gt;
PropertyInfo esProperty = &lt;span class="kwrd"&gt;this&lt;/span&gt;.CurrentDataSource.GetType().GetProperty(entitySetName);
&lt;span class="kwrd"&gt;if&lt;/span&gt; (esProperty == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
&lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentException(String.Format(&lt;span class="str"&gt;&amp;quot;No EntitySet named {0} found on the DataSource&amp;quot;&lt;/span&gt;, entitySetName));
}
&lt;span class="kwrd"&gt;try&lt;/span&gt; {
 &lt;span class="rem"&gt;//Get the EntitySet off of the CurrentDataSource&lt;/span&gt;
 &lt;span class="kwrd"&gt;object&lt;/span&gt; esValue = esProperty.GetValue(&lt;span class="kwrd"&gt;this&lt;/span&gt;.CurrentDataSource, &lt;span class="kwrd"&gt;null&lt;/span&gt;);
 &lt;span class="rem"&gt;//Cast the entitySet to IListSource&lt;/span&gt;
 IListSource genericESList = esValue &lt;span class="kwrd"&gt;as&lt;/span&gt; IListSource;
 &lt;span class="rem"&gt;//If the cast succeeded&lt;/span&gt;
 &lt;span class="kwrd"&gt;if&lt;/span&gt; (genericESList != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
 countOfEntities = genericESList.GetList().Count;
 }
}
&lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception exception) {
&lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DataServiceException(&lt;span class="str"&gt;&amp;quot;'Count' method Failed with , see InnerException --&amp;gt;&amp;quot;&lt;/span&gt;, exception);
}
&lt;span class="kwrd"&gt;return&lt;/span&gt; countOfEntities;
}&lt;/pre&gt;

&lt;h5&gt;Put this in your client Code . &lt;/h5&gt;

&lt;pre class="darkcsharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ClientExtensions {
&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// This Method returns the count of the number if entities present in an Entityset&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;context&amp;quot;&amp;gt;The DataServiceContext which contains the entities&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;entitySetName&amp;quot;&amp;gt;The EntitySetName whose entities should be counted&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The number of entities in the entityset&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;example&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;///  long countOfProducts = context.Count(&amp;quot;Products&amp;quot;);&lt;/span&gt;
&lt;span class="rem"&gt;/// &amp;lt;/example&amp;gt; &lt;/span&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; Count(&lt;span class="kwrd"&gt;this&lt;/span&gt; DataServiceContext context, &lt;span class="kwrd"&gt;string&lt;/span&gt; entitySetName)
{
    &lt;span class="rem"&gt;//Call the ServiceOperation on the server side passing the entitySetName as a parameter&lt;/span&gt;
    var results = context.Execute&amp;lt;&lt;span class="kwrd"&gt;long&lt;/span&gt;&amp;gt;(&lt;br /&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(String.Format(&lt;span class="str"&gt;&amp;quot;Count?entitySetName='{0}'&amp;quot;&lt;/span&gt;, entitySetName), UriKind.RelativeOrAbsolute)&lt;br /&gt;            );
    &lt;span class="rem"&gt;//Get the result off of the IEnumerable&lt;/span&gt;
    &lt;span class="kwrd"&gt;long&lt;/span&gt; count = results.First&amp;lt;&lt;span class="kwrd"&gt;long&lt;/span&gt;&amp;gt;();
    &lt;span class="rem"&gt;//return the count&lt;/span&gt;
    &lt;span class="kwrd"&gt;return&lt;/span&gt; count;
}
}&lt;/pre&gt;
In a future post , I will talk about how to off load the counting work to your database , if you have a relational database

&lt;br /&gt;as your backend.

&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8875636" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Demo/default.aspx">Demo</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Documentation/default.aspx">Documentation</category></item><item><title>GridViewFilterExtender : Filter GridView Rows Client-Side</title><link>http://blogs.msdn.com/phaniraj/archive/2007/10/27/building-an-excel-like-gridview-filter-extender.aspx</link><pubDate>Sat, 27 Oct 2007 14:30:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5771108</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/5771108.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=5771108</wfw:commentRss><description>&lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Download Source Code and Sample application&lt;/strong&gt;&amp;nbsp; :&amp;nbsp; &lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 26px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-925c2d2bb2d03c6b.skydrive.live.com/embedrow.aspx/Public/GridViewFilterExtender.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;br&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="709" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="348"&gt;&lt;strong&gt;Excel's Filter Dialog&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="359"&gt;&lt;strong&gt;My GridView Filter Extender&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="351"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/Excel_Filter.jpg"&gt;&lt;br&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="396" alt="Excel_Filter" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/Excel_Filter_thumb.jpg" width="339" border="0"&gt;&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="359"&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/GridRowFilterExtender_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="416" alt="GridRowFilterExtender" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/GridRowFilterExtender_thumb.jpg" width="306" border="0"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="354"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="359"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;The above Screen Shots look promising , don't they ?&lt;br&gt;So, How would one go about building such a control ? Well, I have it laid out in front of you .&lt;br&gt;&lt;br&gt;1) Find all unique Strings in the same column &lt;br&gt;2) Build a lookup table that stores the Unique string and the row Indices for the rows that contain the Unique String&lt;br&gt;3) Once user builds a Filter Expression and clicks on "Ok" , Filter the Rows in the Table based on the Expression.&lt;br&gt;4) For Now , the Filter Expression can only be&amp;nbsp; a sequence of strings that the user wants to see in the grid.&lt;/p&gt; &lt;p&gt;Ex : If your grid looks like this :&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/GridViewSampleData_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="295" alt="GridViewSampleData" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/GridViewSampleData_thumb.jpg" width="194" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The filter expression would be a comma-separated string that contains the unique strings to match in the rows.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; _currentRowFilter = &lt;span class="str"&gt;"Ajax,Moo"&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
The lookup Table would look like this :&lt;/p&gt;&lt;pre class="csharpcode"&gt;_lookupTable
        Select All    &lt;span class="str"&gt;"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23"&lt;/span&gt;    
        Ajax    &lt;span class="str"&gt;"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16"&lt;/span&gt;    
        Moo    &lt;span class="str"&gt;"17,18,19,20,21,22,23"&lt;/span&gt;    &lt;br&gt;
so , if we want to filter the rows , we would need to : &lt;/pre&gt;
&lt;p&gt;1) Hide all Rows to begin with . &lt;br&gt;&lt;b&gt;HideRows : this.lookupTable["Select All"]&lt;/b&gt; 
&lt;p&gt;2) Show only those rows that are found in the lookup table against the filter Terms. &lt;br&gt;&lt;b&gt;ShowRows :this.lookupTable["Ajax"]&lt;/b&gt; 
&lt;p&gt;That's about the algorithm / design for the extender to work .&lt;br&gt;Getting this working is another matter altogether.&lt;br&gt;Once you have understood this , lets start: 
&lt;p&gt;&lt;b&gt;Find all unique Strings in the same column :&lt;/b&gt; 
&lt;p&gt;once you find all the unique strings in all subsequent rows for the same column , we will need to build the checkbox list that &lt;br&gt;will allows the user to select the filter Terms. &lt;b&gt;I.e this :&lt;/b&gt;&lt;pre class="csharpcode"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/FilterExpressionSelector_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="245" alt="FilterExpressionSelector" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/FilterExpressionSelector_thumb.jpg" width="155" border="0"&gt;&lt;/a&gt; &lt;/pre&gt;
&lt;p&gt;This is a bit tricky , the way one would go about doing this would be :&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Find out which Column the Extender is added in .Find the Cell Index of the Column , lets say _cellIndex&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For all subsequent rows in the table, Lookup the innerText of the Cell with CellIndex cellIndex. 
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For Each Row &lt;/strong&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Read the innerText of the Cell at CellIndex cellIndex.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF the string read is not yet present in the lookup Table then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add it to the lookup Table along with the rowIndex of the current Row&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ELSE if string is already present in the lookupTable then 
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Begin &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add the RowIndex to the lookupTable[string] location. &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END IF 
&lt;p&gt;Once you have found all the Unique Strings , build the CheckBoxList and attach the appropriate handlers . 
&lt;p&gt;&lt;b&gt;Once user builds a Filter Expression and clicks on "Ok" , Filter the Rows in the Table based on the Expression.&lt;/b&gt; 
&lt;p&gt;Hide All Rows .&lt;br&gt;Get all the Rows in the Table other than the header and the footer , _rowsInTable.&lt;br&gt;Get the Current Search Filter by adding all the strings that are checked in the CheckBoxList.&lt;br&gt;For each term in the Search Filter , get the appropriate row Indices ,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For each row Index in the Row Indices, &lt;b&gt;_rowIndex&lt;br&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; assign the cssClass _inFilterCssClass to the _rowsInTable[_rowIndex]. 
&lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;This is all neat , what if I have multiple columns in my GridView and I want to filter &lt;br&gt;each succeeding Column depending on the previous Column?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Well, I have thought about that too ..&lt;br&gt;This is what we would do :&lt;br&gt;Every FilterExtender &lt;strong&gt;(a)&lt;/strong&gt; can have a Dependent Filter&amp;nbsp; &lt;strong&gt;(b)&lt;/strong&gt; , if filter &lt;strong&gt;(b) &lt;/strong&gt;is used to filter data ( it raises the itemFiltered Event ),&lt;br&gt;then&amp;nbsp; the Filter &lt;strong&gt;(a) &lt;/strong&gt;has to rebuild its index to remove any index text &lt;br&gt;that was removed as a result of the filter expression on filter &lt;strong&gt;(b)&lt;/strong&gt;.&lt;br&gt;&lt;strong&gt;&lt;br&gt;Important Note about the DependentFilterID &lt;br&gt;&lt;/strong&gt;&lt;br&gt;If a FilterExtender &lt;strong&gt;(a)&lt;/strong&gt;&amp;nbsp; has a FilterExtender &lt;strong&gt;(b)&lt;/strong&gt;&amp;nbsp; as its Dependent Filter ID , they both should have the matching values for the &lt;br&gt;InFilterCssClass and the NotInFilterCssClass attributes.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="612" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="610"&gt;&lt;strong&gt;Set DependentFilterID &lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="610"&gt;&lt;strong&gt;In markup&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="610"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;Raj:GridViewFilterExtender  DependentFilterId="optionListPnl"&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="610"&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="610"&gt;&lt;pre class="csharpcode"&gt;$find(&amp;lt;filterBehaviorID&amp;gt;).set_dependentFilterId(&amp;lt;dependentFilterId&amp;gt;)&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Attributes :&lt;/strong&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="757" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="644"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;TargetControlID&lt;/td&gt;
&lt;td valign="top" width="644"&gt;ID of the control upon clicking on which , the Filter is shown&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;OkButtonId&lt;/td&gt;
&lt;td valign="top" width="644"&gt;ID of the control upon clicking on which , the FilterExpression is applied and the filter is hidden&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;CancelButtonId&lt;/td&gt;
&lt;td valign="top" width="644"&gt;ID of the control upon clicking on which , the FilterExpression is &lt;u&gt;NOT applied &lt;/u&gt;and the filter is hidden&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;EnableSelectAll&lt;/td&gt;
&lt;td valign="top" width="644"&gt;If the filter contains an option to "Select All" Rows&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;InFilterCssClass&lt;/td&gt;
&lt;td valign="top" width="644"&gt;The CssClass applied to all rows which are available from the Filter Expression.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;NotInFilterCssClass&lt;/td&gt;
&lt;td valign="top" width="644"&gt;The CssClass applied to all rows which are NOT available from the Filter Expression.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;FilterPanelID&lt;/td&gt;
&lt;td valign="top" width="644"&gt;The Panel Control which contains the Filter &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Events :&lt;/strong&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="765" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="120"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="640"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="120"&gt;itemSelected&lt;/td&gt;
&lt;td valign="top" width="640"&gt;When any filter Expression is Selected&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="120"&gt;itemFiltered&lt;/td&gt;
&lt;td valign="top" width="640"&gt;When the filter Expression is applied.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="120"&gt;onOk&lt;/td&gt;
&lt;td valign="top" width="640"&gt;when the Control Referenced by OkButtonId is clicked&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="120"&gt;onCancel&lt;/td&gt;
&lt;td valign="top" width="640"&gt;when the Control Referenced by CancelButtonId is clicked&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;strong&gt;Subscribing to the Events :&lt;br&gt;&lt;br&gt;a) Markup :&lt;br&gt;&lt;/strong&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Raj:OptionPickerBehavior&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="optionListPnl"&lt;/span&gt; &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnToggle"&lt;/span&gt;
         &lt;span class="attr"&gt;blah&lt;/span&gt; &lt;span class="attr"&gt;blah&lt;/span&gt; &lt;span class="attr"&gt;blah&lt;/span&gt;
         &lt;span class="attr"&gt;OnOkScript&lt;/span&gt;&lt;span class="kwrd"&gt;="okClickHandler"&lt;/span&gt;
         &lt;span class="attr"&gt;OnCancelScript&lt;/span&gt; &lt;span class="kwrd"&gt;="cancelClickHandler"&lt;/span&gt;
         &lt;span class="attr"&gt;OnClientItemFiltered&lt;/span&gt; &lt;span class="kwrd"&gt;="itemFilteredHandler"&lt;/span&gt;
         &lt;span class="attr"&gt;OnClientItemSelected&lt;/span&gt; &lt;span class="kwrd"&gt;="itemSelectedHandler"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Raj:OptionPickerBehavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&amp;lt;script language=&lt;span class="str"&gt;"javascript"&lt;/span&gt; type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt;&amp;gt;
            &lt;span class="kwrd"&gt;function&lt;/span&gt; itemSelectedHandler(element,args)  {
                Sys.Debug.trace( args.get_text() + &lt;span class="str"&gt;"   "&lt;/span&gt; + args.get_isChecked());
            }
            &lt;span class="kwrd"&gt;function&lt;/span&gt; itemFilteredHandler(element,args)  {
                Sys.Debug.trace( args.get_item() + &lt;span class="str"&gt;"   "&lt;/span&gt; + args.get_filterText());
            }
            &lt;span class="kwrd"&gt;function&lt;/span&gt; okClickHandler(element,args)  {
                Sys.Debug.trace( &lt;span class="str"&gt;"Ok Button was clicked"&lt;/span&gt; );
            }
             &lt;span class="kwrd"&gt;function&lt;/span&gt; cancelClickHandler(element,args)  {
                Sys.Debug.trace( &lt;span class="str"&gt;"Cancel Button was clicked"&lt;/span&gt;);
            }
            &lt;span class="kwrd"&gt;function&lt;/span&gt; traceCall(msg) {
                $get(&lt;span class="str"&gt;"traceDiv"&lt;/span&gt;).appendChild(document.createTextNode(msg)); 
            }
 &amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;b) Script &lt;br&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;$find(&lt;span class="str"&gt;"BehaviorId"&lt;/span&gt;).add_onOk( okClickHandler );

$find(&lt;span class="str"&gt;"BehaviorId"&lt;/span&gt;).add_onCancel( cancelClickHandler );

$find(&lt;span class="str"&gt;"BehaviorId"&lt;/span&gt;).add_itemFiltered( itemFilteredHandler );

$find(&lt;span class="str"&gt;"BehaviorId"&lt;/span&gt;).add_itemSelected( itemSelectedHandler );&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="Trebuchet MS"&gt;That's it for now ! Do give feedback on the control if you get a chance to use it / look at it .&lt;br&gt;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5771108" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Prototype/default.aspx">Prototype</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Astoria/default.aspx">Astoria</category></item><item><title>How to : Perform Operations on all instances of a Ajax Control Extender on a page</title><link>http://blogs.msdn.com/phaniraj/archive/2007/06/20/how-to-perform-operations-on-all-instances-of-a-ajax-control-extender-on-a-page.aspx</link><pubDate>Wed, 20 Jun 2007 17:12:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3424908</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/3424908.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=3424908</wfw:commentRss><description>&lt;p&gt;Consider a scenario wherein you have a lot of control Extenders on a page and you want to conduct operations on all instances&lt;/p&gt; &lt;p&gt;Specific Extender or specific instances of an extender.&lt;/p&gt; &lt;p&gt;We all know that we can reference certain instances of an Extender by&amp;nbsp;using &amp;nbsp;its BehaviorID and the &lt;a href="http://ajax.asp.net/docs/ClientReference/Global/FindShortcutMethod.aspx" target="_blank"&gt;$find&lt;/a&gt; function.&lt;/p&gt; &lt;p&gt;Now , consider an implementation where you want to Collapse/Expand all Collapsible Panels present on a Page.&lt;/p&gt; &lt;p&gt;You don't know how many CollapsiblePanels will be present on the page and what their IDs will be .&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Solution&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The ASP.NET Ajax Framework has a couple of really useful functions which will help us here.&lt;/p&gt; &lt;p&gt;You can get all instances of all behaviors present on the page using the &lt;strong&gt;&lt;a href="http://ajax.asp.net/docs/ClientReference/Sys/ApplicationClass/SysApplicationGetComponentsMethod.aspx" target="_blank"&gt;Sys.Application.getComponents()&lt;/a&gt; &lt;/strong&gt;method.&lt;/p&gt; &lt;p&gt;There&amp;nbsp; , it's &amp;nbsp;that simple !!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;How do you use this to find all instances of a &lt;u&gt;Specific Control Extender &lt;/u&gt;on a page ?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Ans : You can find out the "Type" of any given Behavior by&amp;nbsp;using any of the following code Snippets.&lt;/p&gt; &lt;h5&gt;&lt;strong&gt;1) Using the Object.getType() Method.&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;&amp;nbsp;EX: &lt;/p&gt; &lt;p&gt;&amp;nbsp;Given that your behavior Instance is : controlYourSelf of type : HoverMenu&lt;/p&gt;&lt;pre class="csharpcode"&gt;Object.getType( controlYourSelf ).getName()&lt;/pre&gt;&lt;pre class="csharpcode"&gt;will give you the name of the AjaxControlToolkit behavior .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Ex output is :  AjaxControlToolkit.HoverMenuBehavior and so on and so forth.&lt;/pre&gt;
&lt;h5&gt;&lt;strong&gt;2) Using the get_name() method on the Behavior Instance.&lt;/strong&gt;&lt;/h5&gt;&lt;pre class="csharpcode"&gt;Your Behavior Name will not be qualified with AjaxControlToolkit.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;so , if you call get_name() on controlYourSelf Behavior .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;controlYourSelf.get_name() will give you : HoverMenuBehavior&lt;/pre&gt;&lt;pre class="csharpcode"&gt;usage : &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;lt;BehaviorInstance&amp;gt;.get_name()&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;Consider the Following Example which shows you how to &lt;strong&gt;&lt;u&gt;Collapse all the Collapsible Panels present on a page&lt;/u&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Algorithm would be:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;Find all instances of the CollapsiblePanel Behavior on the page. 
&lt;li&gt;&amp;nbsp;On each of them , 
&lt;li&gt;&amp;nbsp;Check if the Panel is Collapsed by calling the get_Collapsed() function. 
&lt;li&gt;&amp;nbsp;If not collapsed&amp;nbsp;, call the collapsePanel Function to collapse the Panel.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Code would be&amp;nbsp; :&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Function To Collapse all CollapsiblePanels on a page , if not already collapsed.&lt;/span&gt;
&lt;span class="kwrd"&gt;function&lt;/span&gt; collapseAllCollapsiblePanels() {
    &lt;span class="kwrd"&gt;var&lt;/span&gt; currentBehavior = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
   &lt;span class="rem"&gt;//1) Find all instances of the CollapsiblePanel Behavior on the page.&lt;/span&gt;
    &lt;span class="rem"&gt;//Get all the Behaviors Present in the Page&lt;/span&gt;
    &lt;span class="kwrd"&gt;var&lt;/span&gt; allBehaviors = Sys.Application.getComponents() ;
    &lt;span class="rem"&gt;//Loop Through them&lt;/span&gt;
    &lt;span class="kwrd"&gt;for&lt;/span&gt;( &lt;span class="kwrd"&gt;var&lt;/span&gt; loopIndex = 0 ; loopIndex &amp;lt; allBehaviors.length; loopIndex++ ) {
        currentBehavior = allBehaviors[loopIndex];
    &lt;span class="rem"&gt;//For each behavior , check the Behavior Name &lt;/span&gt;
        &lt;span class="kwrd"&gt;if&lt;/span&gt;( currentBehavior.get_name() === &lt;span class="str"&gt;"CollapsiblePanelBehavior"&lt;/span&gt; ) {
      &lt;span class="rem"&gt;//If its of type CollapsiblePanelBehavior&lt;/span&gt;
        &lt;span class="rem"&gt;//3) Check if the Panel is Collapsed by calling the get_Collapsed() function.&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt;( !currentBehavior.get_Collapsed() ) {
            &lt;span class="rem"&gt;//4) If not collapsed , call the collapsePanel Function to collapse the Panel.&lt;/span&gt;
                currentBehavior.collapsePanel();
            }
        }
    }
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;You can use this approach in your applications  for any myriad number of reasons .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Hope this helps Someone out there.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3424908" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>HowTo : Change Visible Tab Using JavaScript in the MS AJAX TabControl</title><link>http://blogs.msdn.com/phaniraj/archive/2007/04/16/howto-change-visible-tab-using-javascript-in-the-ms-ajax-tabcontrol.aspx</link><pubDate>Tue, 17 Apr 2007 01:20:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2157741</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/2157741.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=2157741</wfw:commentRss><description>&lt;p&gt;I have seen this in the forums a lot ..&lt;/p&gt; &lt;p&gt;"How do I change the Visible Tab in the MS AJAX TabControl on the Client-Side using Javascript ?"&lt;/p&gt; &lt;p&gt;Well, I have posted it several times and I think Its time I'd rather point people to a link than write the same piece again and again :-).&lt;/p&gt; &lt;p&gt;So, here you go .....&lt;/p&gt; &lt;p&gt;1) Consider that you have a TabControl on your page by the name of "MyTabs" . &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabContainer&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="MyTabs"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
//blah blah blah
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabContainer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;2) &lt;font face="tre"&gt;You can access the Methods exposed by the TabControl by accessing its  behavior.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tre"&gt;   The Behavior is not accessible easily . &lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tre"&gt;   The  TabControl has a property called as "control" that provides a way to access the Client-Side Methods of the &lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tre"&gt;   TabControl.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;   EX: var&lt;/span&gt; tabBehavior = $get(&lt;span class="str"&gt;'&amp;lt;%=MyTabs.ClientID%&amp;gt;'&lt;/span&gt;).control; &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tre"&gt;3) once you have a handle to the Tabbehavior , you can use the "set_activeTab" method to set the Active Tab of the TabControl.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;   EX:tabBehavior.set_activeTabIndex(1); &lt;/pre&gt;&lt;pre class="csharpcode"&gt;4)  You are Done !!&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Complete  Code for the ChangeTab Function :&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;lt;script language=&lt;span class="str"&gt;"javascript"&lt;/span&gt;&amp;gt; 

&lt;span class="kwrd"&gt;function&lt;/span&gt; changeTab( tabIndex ){ 
&lt;span class="kwrd"&gt;var&lt;/span&gt; tabBehavior = $get(&lt;span class="str"&gt;'&amp;lt;%=MyTabs.ClientID%&amp;gt;'&lt;/span&gt;).control; 
tabBehavior.set_activeTabIndex(tabIndex); 
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;lt;/script&amp;gt; 
&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Complete Example is posted below :&lt;/pre&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolKit" %&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Select Tabs By Script&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="frmAccessAccordion"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;function&lt;/span&gt; changeTab(){ 
        &lt;span class="rem"&gt;//Get The Index of the Current Selected Index in the DropDownList&lt;/span&gt;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; tabIndex = parseInt( $get(&lt;span class="str"&gt;'&amp;lt;%=dlTabindex.ClientID%&amp;gt;'&lt;/span&gt;).value );
        &lt;span class="rem"&gt;//Get a Handle to the Tab Behavior &lt;/span&gt;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; tabBehavior = $get(&lt;span class="str"&gt;'&amp;lt;%=MyTabs.ClientID%&amp;gt;'&lt;/span&gt;).control; 
        &lt;span class="rem"&gt;//Set the Currently Visible Tab &lt;/span&gt;
        tabBehavior.set_activeTabIndex(tabIndex); 
        }
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        Select Tab To Show :
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:DropDownList&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="dlTabindex"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="One"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Two"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Three"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:DropDownList&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnDynamicAnimate"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Button"&lt;/span&gt; &lt;span class="attr"&gt;OnClientClick&lt;/span&gt;&lt;span class="kwrd"&gt;="changeTab();return false;"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="scrpManager"&lt;/span&gt; &lt;span class="attr"&gt;EnablePartialRendering&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabContainer&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="MyTabs"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="tabOne"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    One
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    Tab One
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="tabTwo"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    Two
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    Tab Two
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnServer"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Submit"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="tabThree"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    Three
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    Tab Three
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="Button1"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Submit"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabContainer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2157741" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/TABContainer/default.aspx">TABContainer</category></item><item><title>Sys.Preview.Timer Control - A Client Side Timer</title><link>http://blogs.msdn.com/phaniraj/archive/2007/03/15/sys-preview-timer-control-a-client-side-timer.aspx</link><pubDate>Thu, 15 Mar 2007 10:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1885299</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/1885299.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=1885299</wfw:commentRss><description>&lt;p&gt;We have quite often come across&amp;nbsp; scenarios where-in we need to execute certain client-Side code at certain intervals .&lt;/p&gt; &lt;p&gt;What we often ended up doing is to use the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/settimeout.asp"&gt;window.setTimeOut()&lt;/a&gt; and the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/setinterval.asp"&gt;window.setInterval&lt;/a&gt; functions of IE to execute an expression &lt;/p&gt; &lt;p&gt;at certain intervals of time .&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The Sys.Preview.Timer Provides an abstraction over these functions and makes it easier to define Functions to be Executed at certain &lt;/p&gt; &lt;p&gt;Time Intervals.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;You need to include the Script file "&lt;font face="cali" color="#ff0000"&gt;PreviewScript.js&lt;font color="#000000"&gt;" to&amp;nbsp; have access to the Timer Control .&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="Scripts/PreviewScript.js"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Instantiating the Timer control :&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; clientSideTimer = &lt;span class="kwrd"&gt;new&lt;/span&gt; Sys.Preview.Timer();&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="Treb"&gt;By default , once instatiated , the Timer is disabled .&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Enable The Timer&lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;clientSideTimer.set_enabled( &lt;span class="kwrd"&gt;true&lt;/span&gt; ); &lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;u&gt;&lt;strong&gt;Set the Interval for the timer :&lt;/strong&gt;&lt;/u&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Interval is measured in milliseconds &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;clientSideTimer.set_interval( 1000 );&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Add a function to be called at the interval&lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;You add the function to be called at the interval by running &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;clientSideTimer.add_tick( OnTimerTick );&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tRE"&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tRE"&gt;The Parameter "OnTimerTick" is a function that is executed at the Interval specified.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tRE"&gt;You can add multiple Functions to be callled at the interval.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tRE"&gt;The functions are executed at the interval in the &lt;u&gt;same order that they are added using add_tick&lt;/u&gt;.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Stop the Timer &lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Disable the Timer to stop the  Timer Entirely.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;clientSideTimer.set_enabled( &lt;span class="kwrd"&gt;false&lt;/span&gt; ); &lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Alternatively , you can stop certain functions being called by calling the "&lt;font color="#ff0000"&gt;&lt;strong&gt;remove_tick&lt;/strong&gt;&lt;font color="#000000"&gt;&lt;strong&gt;" &lt;/strong&gt;Method on the Timer.&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;clientSideTimer.remove_tick( OnTimerTick );&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Check out the  Sample attached to get a view of how the control works and how you can use it .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Whats Missing :&lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The main pain point I see in using the Timer Control is that &lt;u&gt;I cannot pass a context to the Functions called at the "Tick" event.&lt;/u&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The reason this happens is because ..&lt;/pre&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;The Function that returns the callback to the "Tick" event passes "Sys.EventArgs.Empty"  to the callback.&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class="csharpcode"&gt;You can customize the Script to enable the functionality of passing a context to the Timer Callback.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;We will discuss that in a future post .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1885299" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/phaniraj/attachment/1885299.ashx" length="55359" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>Customizing the Alert  Messages in IE</title><link>http://blogs.msdn.com/phaniraj/archive/2007/03/03/cusomizing-the-alert-confirm-messages-in-ie.aspx</link><pubDate>Sat, 03 Mar 2007 11:53:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1794544</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/1794544.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=1794544</wfw:commentRss><description>&lt;p&gt;Have you ever felt that this looks ugly ?&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CusomizingtheAlertConfirmMessagesinIE_B410/Ordinary%5B1%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="192" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CusomizingtheAlertConfirmMessagesinIE_B410/Ordinary.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Did you ever want to customize the Image , the text, the Icons ?&lt;/p&gt; &lt;p&gt;You would probably want to customize it to the Look and feel of your web application.&lt;/p&gt; &lt;p&gt;We are gonna talk about how to customize the Alert Box in IE .&lt;/p&gt; &lt;p&gt;When we are done , it will look like this .&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CusomizingtheAlertConfirmMessagesinIE_B410/customAlert%5B1%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="192" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CusomizingtheAlertConfirmMessagesinIE_B410/customAlert.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We can change the Default ALERT function with Javascript .&lt;/p&gt;&lt;pre class="csharpcode"&gt;window.alert=&lt;span class="kwrd"&gt;function&lt;/span&gt;( alertMessage ){
&lt;span class="rem"&gt;//Function Body&lt;/span&gt;
}
&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Thats it!!! Thats the Magic line!&lt;/pre&gt;&lt;pre class="csharpcode"&gt;With this function , you can customize the way the alert messages are shown.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;I will demonstrate one way to render the custom Alert  message.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;We will put a DIV in the Page that will show the alert message .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="alertPanel"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&lt;font face="Consolas" size="2"&gt;We will form the body by forming a string containing the representational HTML .&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;    &amp;lt;DIV&amp;gt; //To Contain the Alert Message&lt;/pre&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;       &amp;lt;IMG&amp;gt; //The icon of the message prompt&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class="csharpcode"&gt;             &amp;lt;SPAN&amp;gt; //This element contains the text to be shown&lt;/pre&gt;&lt;pre class="csharpcode"&gt;             &amp;lt;INPUT TYPE="BUTTON"/&amp;gt; //The Button to close the alert message &lt;/pre&gt;&lt;pre class="csharpcode"&gt;    &amp;lt;/DIV&amp;gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Actual Code showing the same &lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; alertBox = &lt;span class="str"&gt;"&amp;lt;DIV style=\"width:350px;height:70px\" class=\"alertPosition\"&amp;gt;"&lt;/span&gt;;
            alertBox +=&lt;span class="str"&gt;"&amp;lt;div class=\"alertBoxIn\" &amp;gt;"&lt;/span&gt;;
                     alertBox  +=&lt;span class="str"&gt;"&amp;lt;img src=\"images/InfoBox-48x48.png\" style=\"position: relative; top: 1%; left: 2%\" /&amp;gt;&amp;lt;/td&amp;gt;"&lt;/span&gt;;
                     alertBox +=&lt;span class="str"&gt;"&amp;lt;SPAN style=\"position: relative; top:-30%; left: 12%\"&amp;gt;"&lt;/span&gt;+alertMessage+&lt;span class="str"&gt;"&amp;lt;/SPAN&amp;gt;"&lt;/span&gt;;
                     alertBox  +=&lt;span class="str"&gt;"&amp;lt;input style=\"position: relative; top:20%; left:10%\" type=\"button\" value=\"    Ok      \" onclick=\"closeAlert();\" /&amp;gt;"&lt;/span&gt;;
            alertBox+=&lt;span class="str"&gt;"&amp;lt;/div&amp;gt;"&lt;/span&gt;;
    alertBox+=&lt;span class="str"&gt;"&amp;lt;/div&amp;gt;"&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Once the Body of the Alert message is formed , we need to add it to the document.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;we will do this by injecting the body of the Alert Message into the alertPanel Div that we already have on the page .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;document.getElementById(&lt;span class="str"&gt;"alertPanel"&lt;/span&gt;).innerHTML = alertBox;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;Upon click of the Button , you would want to close the alert message .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;We close the Alert message by removing it from the document .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;document.getElementById(&lt;span class="str"&gt;"alertPanel"&lt;/span&gt;).innerHTML =   &lt;span class="str"&gt;""&lt;/span&gt; ;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Completed Function looks like this ......&lt;/pre&gt;&lt;pre class="csharpcode"&gt;window.alert=&lt;span class="kwrd"&gt;function&lt;/span&gt;( alertMessage )
{
    &lt;span class="kwrd"&gt;var&lt;/span&gt; alertBox = &lt;span class="str"&gt;""&lt;/span&gt;;
            alertBox +=&lt;span class="str"&gt;"&amp;lt;div style=\"width:350px;height:70px\" class=\"alertBoxIn alertPosition\" &amp;gt;"&lt;/span&gt;;
                     alertBox  +=&lt;span class="str"&gt;"&amp;lt;img src=\"images/InfoBox-48x48.png\" style=\"position: relative; top: 1%; left: 2%\" /&amp;gt;&amp;lt;/td&amp;gt;"&lt;/span&gt;;
                     alertBox +=&lt;span class="str"&gt;"&amp;lt;SPAN style=\"position: relative; top:-30%; left: 12%\"&amp;gt;"&lt;/span&gt;+alertMessage+&lt;span class="str"&gt;"&amp;lt;/SPAN&amp;gt;"&lt;/span&gt;;
                     alertBox  +=&lt;span class="str"&gt;"&amp;lt;input style=\"position: relative; top:20%; left:10%\" type=\"button\" value=\"    Ok      \" onclick=\"closeAlert();\" /&amp;gt;"&lt;/span&gt;;
            alertBox+=&lt;span class="str"&gt;"&amp;lt;/div&amp;gt;"&lt;/span&gt;;
    document.getElementById(&lt;span class="str"&gt;"alertPanel"&lt;/span&gt;).innerHTML = alertBox;
    document.getElementById(&lt;span class="str"&gt;"alertPanel"&lt;/span&gt;).focus();
 }&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Bonus:&lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Creating your own alert prompt message&lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;I changed the icon to make it look like an error message .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;See here.....&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CusomizingtheAlertConfirmMessagesinIE_B410/customError%5B1%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="192" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CusomizingtheAlertConfirmMessagesinIE_B410/customError.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The javascript for this custom error function is :&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; ErorMessage( errorMessage )
{
 
  &lt;span class="kwrd"&gt;var&lt;/span&gt; alertBox = &lt;span class="str"&gt;"&amp;lt;DIV style=\"width:350px;height:70px\" class=\"alertPosition\"&amp;gt;"&lt;/span&gt;;
            alertBox +=&lt;span class="str"&gt;"&amp;lt;div class=\"alertBoxIn\" &amp;gt;"&lt;/span&gt;;
                     alertBox  +=&lt;span class="str"&gt;"&amp;lt;img src=\"images/ErrorCircle-48x48.png\" style=\"position: relative; top: 1%; left: 2%\" /&amp;gt;&amp;lt;/td&amp;gt;"&lt;/span&gt;;
                     alertBox +=&lt;span class="str"&gt;"&amp;lt;SPAN style=\"position: relative; top:-30%; left: 12%\"&amp;gt;"&lt;/span&gt;+errorMessage+&lt;span class="str"&gt;"&amp;lt;/SPAN&amp;gt;"&lt;/span&gt;;
                     alertBox  +=&lt;span class="str"&gt;"&amp;lt;input style=\"position: relative; top:20%; left:10%\" type=\"button\" value=\"    Ok      \" onclick=\"closeAlert();\" /&amp;gt;"&lt;/span&gt;;
            alertBox+=&lt;span class="str"&gt;"&amp;lt;/div&amp;gt;"&lt;/span&gt;;
    alertBox+=&lt;span class="str"&gt;"&amp;lt;/div&amp;gt;"&lt;/span&gt;;
    document.getElementById(&lt;span class="str"&gt;"alertPanel"&lt;/span&gt;).innerHTML = alertBox;
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Once this function is implemented, you can use the alert in your functions normally , be sure to include the script and the div "alertPanel".&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Complete code looks like this ......&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;AJAX Client Side Documentation&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;link&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="css/defaultStyles.css"&lt;/span&gt; &lt;span class="attr"&gt;rel&lt;/span&gt;&lt;span class="kwrd"&gt;="stylesheet"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/css"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        window.alert=&lt;span class="kwrd"&gt;function&lt;/span&gt;( alertMessage )
            {
                &lt;span class="kwrd"&gt;var&lt;/span&gt; alertBox = &lt;span class="str"&gt;""&lt;/span&gt;;
                        alertBox +=&lt;span class="str"&gt;"&amp;lt;div style=\"width:350px;height:70px\" class=\"alertBoxIn alertPosition\" &amp;gt;"&lt;/span&gt;;
                                 alertBox  +=&lt;span class="str"&gt;"&amp;lt;img src=\"n\" style=\"position: relative; top: 1%; left: 2%\" /&amp;gt;&amp;lt;/td&amp;gt;"&lt;/span&gt;;
                                 alertBox +=&lt;span class="str"&gt;"&amp;lt;SPAN style=\"position: relative; top:-30%; left: 12%\"&amp;gt;"&lt;/span&gt;+alertMessage+&lt;span class="str"&gt;"&amp;lt;/SPAN&amp;gt;"&lt;/span&gt;;
                                 alertBox  +=&lt;span class="str"&gt;"&amp;lt;input style=\"position: relative; top:20%; left:10%\" type=\"button\" value=\"    Ok      \" onclick=\"closeAlert();\" /&amp;gt;"&lt;/span&gt;;
                        alertBox+=&lt;span class="str"&gt;"&amp;lt;/div&amp;gt;"&lt;/span&gt;;
                document.getElementById(&lt;span class="str"&gt;"alertPanel"&lt;/span&gt;).innerHTML = alertBox;
                document.getElementById(&lt;span class="str"&gt;"alertPanel"&lt;/span&gt;).focus();
             }
             
            &lt;span class="kwrd"&gt;function&lt;/span&gt; ErorMessage( errorMessage )
            {
             
              &lt;span class="kwrd"&gt;var&lt;/span&gt; alertBox = &lt;span class="str"&gt;"&amp;lt;DIV style=\"width:350px;height:70px\" class=\"alertPosition\"&amp;gt;"&lt;/span&gt;;
                        alertBox +=&lt;span class="str"&gt;"&amp;lt;div class=\"alertBoxIn\" &amp;gt;"&lt;/span&gt;;
                                 alertBox  +=&lt;span class="str"&gt;"&amp;lt;img src=\"images/ErrorCircle-48x48.png\" style=\"position: relative; top: 1%; left: 2%\" /&amp;gt;&amp;lt;/td&amp;gt;"&lt;/span&gt;;
                                 alertBox +=&lt;span class="str"&gt;"&amp;lt;SPAN style=\"position: relative; top:-30%; left: 12%\"&amp;gt;"&lt;/span&gt;+errorMessage+&lt;span class="str"&gt;"&amp;lt;/SPAN&amp;gt;"&lt;/span&gt;;
                                 alertBox  +=&lt;span class="str"&gt;"&amp;lt;input style=\"position: relative; top:20%; left:10%\" type=\"button\" value=\"    Ok      \" onclick=\"closeAlert();\" /&amp;gt;"&lt;/span&gt;;
                        alertBox+=&lt;span class="str"&gt;"&amp;lt;/div&amp;gt;"&lt;/span&gt;;
                alertBox+=&lt;span class="str"&gt;"&amp;lt;/div&amp;gt;"&lt;/span&gt;;
                document.getElementById(&lt;span class="str"&gt;"alertPanel"&lt;/span&gt;).innerHTML = alertBox;
            }

            &lt;span class="kwrd"&gt;function&lt;/span&gt; closeAlert()
            {
                &lt;span class="kwrd"&gt;var&lt;/span&gt; alertBox =  document.getElementById(&lt;span class="str"&gt;"alertPanel"&lt;/span&gt;);
                alertBox.innerHTML =&lt;span class="str"&gt;""&lt;/span&gt;;
            }

    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Alert Popup"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript:alert('This is a custom alert message')"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Error Popup"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript:ErorMessage('This is a custom Error message')"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="alertPanel"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;PROPS:&lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Images I use in the demo come from here ...&lt;a title="http://www.iconarchive.com/category/application/vista-elements-icons-by-icons-land.html" href="http://www.iconarchive.com/category/application/vista-elements-icons-by-icons-land.html"&gt;http://www.iconarchive.com/category/application/vista-elements-icons-by-icons-land.html&lt;/a&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Icons rock !!! If interested , give the author a visit at : &lt;a title="http://www.icons-land.com/" href="http://www.icons-land.com/. "&gt;http://www.icons-land.com/. &lt;/a&gt; I strongly suggest you check them out .&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1794544" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>Change ServiceMethods and Web Service for the AutoCompleteExtender From Client Side</title><link>http://blogs.msdn.com/phaniraj/archive/2007/02/16/change-servicemethods-and-web-service-for-the-autocompleteextender-from-client-side.aspx</link><pubDate>Fri, 16 Feb 2007 07:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1686950</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/1686950.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=1686950</wfw:commentRss><description>&lt;P&gt;This is quite a common requirement and guess the Docs are not really clear as to how you can achieve this .&lt;/P&gt;
&lt;P&gt;Lemme see how I can help&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;You want to&amp;nbsp; change the Webmethod that the AutoComplete Extender Talks to from the Client Side.&lt;/LI&gt;
&lt;LI&gt;You want to&amp;nbsp; change the WebService that the AutoComplete Extender Talks to from the Client Side.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;You can achieve this easily using the Functions Provided by the Extenders on the Client Side.&lt;/P&gt;
&lt;P&gt;Follow these Simple Steps.&lt;/P&gt;
&lt;P&gt;1) Assign a BehaviourID to the AutoCompleteExtender.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;cc1:AutoCompleteExtender&lt;/SPAN&gt; 
               &lt;SPAN class=attr&gt;ID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="AutoCompleteImagesExtender1"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;runat&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="server"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;TargetControlID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="myTextBox"&lt;/SPAN&gt;
                &lt;SPAN class=attr&gt;ServicePath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="AutoComplete.asmx"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;ServiceMethod&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="GetCompletionList"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;MinimumPrefixLength&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="2"&lt;/SPAN&gt;
                &lt;SPAN class=attr&gt;CompletionInterval&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="1000"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;EnableCaching&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="true"&lt;/SPAN&gt; 
                &lt;SPAN class=attr&gt;CompletionListElementID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="divCompletionImages"&lt;/SPAN&gt;
                &lt;SPAN class=attr&gt;CompletionSetCount&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="12"&lt;/SPAN&gt; 
                &lt;STRONG&gt;&lt;FONT size=3&gt;&lt;SPAN class=attr&gt;BehaviorID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="autoCompleteExtender"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;cc1:AutoCompleteExtender&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;2) You can change the Web Service that the AutoCompleteExtender Talks to by using the Following JavaScript.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; ChangeServicePath(){
        &lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; autoComplete = $find(&lt;SPAN class=str&gt;"&lt;FONT size=3&gt;&lt;STRONG&gt;autoCompleteExtender&lt;/STRONG&gt;&lt;/FONT&gt;"&lt;/SPAN&gt;);
        autoComplete.set_servicePath( &amp;lt;NewServicePath&amp;gt;);
        }&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;As you can see the $find  method is called on the behaviourID of the AutoCompleteExtender.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;The "set_servicePath" method allows you to Set the path to the Web Service that the Extender talks to .&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;3) You can change the Web Service that the AutoCompleteExtender Talks to by using the Following JavaScript.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; ChangeServiceMethod(){
        &lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; autoComplete = $find(&lt;SPAN class=str&gt;"&lt;FONT size=6&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;autoCompleteExtender&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;"&lt;/SPAN&gt;);
        autoComplete.set_serviceMethod( &amp;lt;NewServiceMethodName&amp;gt;);
        }&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;The "set_serviceMethod" method allows you to Set the path to the Web Service that the Extender talks to .&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;Hope this Helps &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;SCRIPT type=text/javascript&gt;
    if (typeof window.Delicious == "undefined") window.Delicious = {};
    Delicious.BLOGBADGE_DEFAULT_CLASS = 'delicious-blogbadge-line';
&lt;/SCRIPT&gt;

&lt;SCRIPT src="http://images.del.icio.us/static/js/blogbadge.js" mce_src="http://images.del.icio.us/static/js/blogbadge.js"&gt;&lt;/SCRIPT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1686950" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category></item><item><title>Implementing Image Zoom using MS Ajax Slider Control</title><link>http://blogs.msdn.com/phaniraj/archive/2007/02/14/implementing-image-zoom-using-ms-ajax-slider-control.aspx</link><pubDate>Wed, 14 Feb 2007 08:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1673863</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/1673863.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=1673863</wfw:commentRss><description>&lt;P&gt;The MS Ajax Control Toolkit provides a lot of cool controls that we can use to implement nifty effects in our applications.&lt;/P&gt;
&lt;P&gt;One of the controls we are gonna play with today is the Ajax Slider Control.&lt;/P&gt;
&lt;P&gt;The Slider Control Provides a way for the user to measure arbitrary values and set them using a cool Slider.&lt;/P&gt;
&lt;P&gt;The Slider control provides the value of the current Slide and lets you do stuff with it .&lt;/P&gt;
&lt;P&gt;Some of the&amp;nbsp; *stuff* we will try today is to implement a Zoom feature for images .&lt;/P&gt;
&lt;P&gt;The Slider control binds to an asp:textbox or an asp:label to show the current value of the Slide.&lt;/P&gt;
&lt;P&gt;It would be great if you could associate the control with arbitrary HTML Elements and associate the slide with their properties.&lt;/P&gt;
&lt;P&gt;You can do that&amp;nbsp; by changing the Code of the Slider Control by downloading the code from the CodePlex Website.&lt;/P&gt;
&lt;P&gt;Today , I will not go into how you can change the control , we will talk about using the Base control to modify the Height and width of an image control &lt;/P&gt;
&lt;P&gt;so that it looks like we are zooming into and out of an image using the Slider.&lt;/P&gt;
&lt;P&gt;See Demo Here &lt;/P&gt;&lt;EMBED height=362 type=application/x-shockwave-flash pluginspage=http://macromedia.com/go/getflashplayer width=412 src=http://images.soapbox.msn.com/flash/soapbox1_1.swf flashvars="c=v&amp;amp;v=fa782978-904e-470f-8081-5236bfd2e0a2" wmode="transparent" quality="high"&gt;&lt;/EMBED&gt;&lt;BR&gt;&lt;A title="Implementing Image Zoom using MS Ajax Slider Control" href="http://soapbox.msn.com/video.aspx?vid=fa782978-904e-470f-8081-5236bfd2e0a2" target=_new&gt;Video: Implementing Image Zoom using MS Ajax Slider Control&lt;/A&gt; 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So,lets stop talking and start coding .&lt;/P&gt;
&lt;P&gt;1) we will need 2 sliders , one for height , one for width .&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=rem&gt;&amp;lt;!-- The Slider to modify the height --&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;ajaxToolkit:SliderExtender&lt;/SPAN&gt; &lt;SPAN class=attr&gt;ID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="heightSlider"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;runat&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="server"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;BehaviorID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Slider2"&lt;/SPAN&gt;
 &lt;SPAN class=attr&gt;TargetControlID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Slider2"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;BoundControlID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Slider2_BoundControl"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Orientation&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Vertical"&lt;/SPAN&gt;
&lt;SPAN class=attr&gt;EnableHandleAnimation&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="true"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Minimum&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="10"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=rem&gt;&amp;lt;!-- The Slider to modify the width--&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;ajaxToolkit:SliderExtender&lt;/SPAN&gt; &lt;SPAN class=attr&gt;ID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="widthSlider"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;runat&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="server"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;BehaviorID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Slider3"&lt;/SPAN&gt;
&lt;SPAN class=attr&gt;TargetControlID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Slider3"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;BoundControlID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Slider3_BoundControl"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Orientation&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Horizontal"&lt;/SPAN&gt;
&lt;SPAN class=attr&gt;EnableHandleAnimation&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="true"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Minimum&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="10"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;2) The TargetControlID refers to the textbox which will receive the changed value from the  Slider.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt; Slider2 --&amp;gt; Height Changed Value&lt;/PRE&gt;&lt;PRE class=csharpcode&gt; Slider3 --&amp;gt; Width  Changed Value&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;3) &lt;SPAN class=kwrd&gt;&lt;FONT color=#000000&gt;Hook the onValueChanged event of the Slider Control behaviour to these functions in the ASPX Page.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;lt;script language =&lt;SPAN class=str&gt;"javascript"&lt;/SPAN&gt;&amp;gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;   &lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; pageLoad(sender,e)
   {
       &lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; sliderbehaviour = $find(&lt;SPAN class=str&gt;'Slider3'&lt;/SPAN&gt;);
       sliderbehaviour.add_valueChanged(ZoomControlWidth);
       sliderbehaviour = $find(&lt;SPAN class=str&gt;'Slider2'&lt;/SPAN&gt;);
       sliderbehaviour.add_valueChanged(ZoomControlHeight);
       sliderbehaviour = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;
   }
           
&amp;lt;/script&amp;gt;   &lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;PRE class=csharpcode&gt; 4) The Image control is specified as a parameter to the  "ZoomControlHeight" and the "ZoomControlWidth" Javascript functions  .&lt;/PRE&gt;&lt;PRE class=csharpcode&gt; 5) The javascript functions are as shown below.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=rem&gt;/********Global variables to specify the Scaling Height and Width**********/&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; HundredPercentHeight = 800;
&lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; HundredPercentWidth  = 800;
&lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; controlID =&lt;SPAN class=str&gt;"imgZoomTarget"&lt;/SPAN&gt;;&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;PRE class=csharpcode&gt;&lt;SPAN class=rem&gt;//Function to Modify Height according to Slider Value&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; ZoomControlHeight(eventArgs)
{
    &lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; currentlyZoomingControl =$get(controlID);
    
    &lt;SPAN class=rem&gt;//Calculate the new height &lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; newHeight  = HundredPercentHeight * (  parseInt( eventArgs.get_Value() ) / 100 ) ;
    &lt;SPAN class=rem&gt;//Assign the New Height&lt;/SPAN&gt;
    currentlyZoomingControl.style.height = parseInt(newHeight) +&lt;SPAN class=str&gt;"px"&lt;/SPAN&gt;;
    &lt;SPAN class=rem&gt;//Let go of the Control Reference&lt;/SPAN&gt;
    currentlyZoomingControl = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;
    
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;PRE class=csharpcode&gt;&lt;SPAN class=rem&gt;//Function to Modify Width according to Slider Value&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; ZoomControlWidth(eventArgs)
{
    &lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; currentlyZoomingControl =$get(controlID);
    &lt;SPAN class=rem&gt;//Calculate the new width&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;( eventArgs.get_Value() == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
    &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt;;
    &lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; newWidth   = HundredPercentWidth  * ( parseInt( eventArgs.get_Value() ) / 100 ) ;
    &lt;SPAN class=rem&gt;//Assign the New Width&lt;/SPAN&gt;
    currentlyZoomingControl.style.width  =  parseInt(newWidth) +&lt;SPAN class=str&gt;"px"&lt;/SPAN&gt;;
    &lt;SPAN class=rem&gt;//Let go of the Control Reference&lt;/SPAN&gt;
    currentlyZoomingControl = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;PRE class=csharpcode&gt;6) The &amp;lt;Img&amp;gt; tag that will be modified by the slider, is ...&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;img&lt;/SPAN&gt; &lt;SPAN class=attr&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="imgZoomTarget"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;src&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="thumbNails/001_by_Frnak.jpg"&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;         &lt;SPAN class=attr&gt;style&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="position: absolute;top: 10px; left: 220px; height: 100px; width: 100px"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&lt;FONT color=#000000&gt;7)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;7) This is how the page looks after we are done&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;A href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_11.jpg" mce_href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_11.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_1.jpg" width=240 height=192 mce_src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_1.jpg"&gt;&lt;/A&gt; &lt;/PRE&gt;&lt;PRE class=csharpcode&gt; &lt;SPAN class=kwrd&gt;&lt;A href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_31.jpg" mce_href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_31.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_3.jpg" width=240 height=192 mce_src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_3.jpg"&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&lt;A href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_21.jpg" mce_href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_21.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_2.jpg" width=240 height=192 mce_src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/ImplementingImageZoomusingMSAjaxSliderCo_8B9C/Zoom_Image_2.jpg"&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt; &lt;/SPAN&gt;&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1673863" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>Customizing the MS Ajax AutoCompleteExtender To Render Images Instead Of Text</title><link>http://blogs.msdn.com/phaniraj/archive/2007/02/10/customizing-the-ms-ajax-autocompleteextender-to-render-images-instead-of-text.aspx</link><pubDate>Sat, 10 Feb 2007 13:13:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1642056</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/1642056.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=1642056</wfw:commentRss><description>&lt;p&gt;We all know about the AutoComplete Extender from MS AJAX.&lt;/p&gt; &lt;p&gt;It looks like this .....&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Original%5B3%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="311" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Original_thumb%5B1%5D.jpg" width="369" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I want to customize the Auto Complete behaviour to render images on the client side rather than the text nodes .&lt;/p&gt; &lt;p&gt;My Server Side WebService returns an array of image URLs. I want to change the way the Results are rendered.&lt;/p&gt; &lt;p&gt;This is how I want it to look.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Modified%5B4%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="245" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Modified_thumb%5B2%5D.jpg" width="373" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I know that its pretty easy to achieve the effect using the client side proxy generated for a webservice.&lt;/p&gt; &lt;p&gt;But, I need to leverage the advantages of the AJAX AutoComplete control such as&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Client Side&amp;nbsp;Caching of Web Service Results&lt;/li&gt; &lt;li&gt;Fully customisable with regard to specifying when and how the server side method call is made .&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So, we download the Source code of the AutoComplete Extender and start our process of hacking through it to achieve what we want.&lt;/p&gt; &lt;p&gt;You can download the Source of the AjaxControlToolkit from &lt;a href="http://www.codeplex.com/AtlasControlToolkit/"&gt;Here&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Once we downloaded , we take a look at the function that renders the Search Results.&lt;/p&gt; &lt;p&gt;The Function inside the AutoComplete Extender that renders the search results is in Javascript.&lt;/p&gt; &lt;p&gt;The File&amp;nbsp; you gotta go to is AutoCompleteBehavior.js.&lt;/p&gt; &lt;p&gt;&amp;lt;Function&amp;gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;_update: &lt;span class="kwrd"&gt;function&lt;/span&gt;(prefixText, completionItems, cacheResults) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (cacheResults &amp;amp;&amp;amp; &lt;span class="kwrd"&gt;this&lt;/span&gt;.get_enableCaching()) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;this&lt;/span&gt;._cache) {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._cache = {};
            }
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._cache[prefixText] = completionItems;
        }

        &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.innerHTML = &lt;span class="str"&gt;''&lt;/span&gt;;
        &lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex = -1;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (completionItems &amp;amp;&amp;amp; completionItems.length) {
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; i = 0; i &amp;lt; completionItems.length; i++) {
             &lt;strong&gt;  &lt;font color="#ff8000"&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; itemElement = document.createElement(&lt;span class="str"&gt;'div'&lt;/span&gt;);
                itemElement.appendChild(document.createTextNode(completionItems[i]));
                itemElement.__item = &lt;span class="str"&gt;''&lt;/span&gt;;
                
                &lt;span class="kwrd"&gt;var&lt;/span&gt; itemElementStyle = itemElement.style;
                itemElementStyle.padding = &lt;span class="str"&gt;'1px'&lt;/span&gt;;
                itemElementStyle.textAlign = &lt;span class="str"&gt;'left'&lt;/span&gt;;
                itemElementStyle.textOverflow = &lt;span class="str"&gt;'ellipsis'&lt;/span&gt;;
                itemElementStyle.backgroundColor = &lt;span class="kwrd"&gt;this&lt;/span&gt;._textBackground;
                itemElementStyle.color = &lt;span class="kwrd"&gt;this&lt;/span&gt;._textColor;
                
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.appendChild(itemElement);&lt;/font&gt;&lt;/strong&gt;
            }
            &lt;span class="kwrd"&gt;var&lt;/span&gt; elementBounds = CommonToolkitScripts.getBounds(&lt;span class="kwrd"&gt;this&lt;/span&gt;.get_element());        
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.style.width = Math.max(1, elementBounds.width - 2) + &lt;span class="str"&gt;'px'&lt;/span&gt;;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._popupBehavior.show();
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._popupBehavior.hide();
        }
    }    &lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&amp;lt;/Function&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The Lines of the function that Renders the Search Results is marked in this &lt;font color="#ff8000"&gt;&lt;strong&gt;color.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Lets study these lines&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; itemElement = document.createElement(&lt;span class="str"&gt;'div'&lt;/span&gt;);
    itemElement.appendChild(document.createTextNode(completionItems[i]));
    itemElement.__item = &lt;span class="str"&gt;''&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;
These lines of code create a "DIV" for each search result from the Web service.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;We will change it to be ...&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; itemElement = document.createElement(&lt;span class="str"&gt;'img'&lt;/span&gt;);
itemElement.src =  completionItems[i];&lt;/pre&gt;&lt;pre class="csharpcode"&gt;This would be enough to render images instead of Text .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Next, onClick of the image thumbnail , we want to assign the image url to another full image on the page.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The function  called when the image is clicked is&lt;/pre&gt;&lt;pre class="csharpcode"&gt; _onListMouseDown: &lt;span class="kwrd"&gt;function&lt;/span&gt;(ev) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (ev.target !== &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement) {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._setText(ev.target.firstChild.nodeValue);
        }
    },&lt;/pre&gt;&lt;pre class="csharpcode"&gt;We will change this to be :&lt;/pre&gt;&lt;pre class="csharpcode"&gt; _onListMouseDown: &lt;span class="kwrd"&gt;function&lt;/span&gt;(ev) {
        $get(&lt;span class="str"&gt;"imgFullBlown"&lt;/span&gt;).src = &lt;span class="kwrd"&gt;event&lt;/span&gt;.srcElement.src;
        },&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;imgFullBlown is gonna be an &amp;lt;IMG&amp;gt; tag on the page that hosts the control .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;As you can see, the src of the image that is clicked is assigned to the src of the "imgFullBlown" tag.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Effects are as shown below .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Modified_FULL%5B4%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="224" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/CustomizingtheMSAjaxAutoCompleteExtender_D485/AutoComplete_Modified_FULL_thumb%5B2%5D.jpg" width="357" border="0"&gt;&lt;/a&gt; &lt;/pre&gt;&lt;pre class="csharpcode"&gt;There you go , build the Project and change the default behaviour or build your own control by extending the AutoCompleteExtender.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;You are  only limited by your imagination.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Everyone has access to the source of some of our best controls.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1642056" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category></item><item><title>Extending the PhotoGrid to allow Xml DataBinding using JavaScript Enumerations</title><link>http://blogs.msdn.com/phaniraj/archive/2007/02/03/extending-the-photogrid-to-allow-xml-databinding-using-javascript-enumerations.aspx</link><pubDate>Sat, 03 Feb 2007 23:04:06 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1592154</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/1592154.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=1592154</wfw:commentRss><description>&lt;p&gt;If you remember one of my previous posts about the PhotoGrid Control , we talked about the control binding to JSON data .&lt;/p&gt; &lt;p&gt;Today&amp;nbsp; , we talk about using Enumerations in Javascript to allow the PhotoGrid to bind to multiple Data Source Types.&lt;/p&gt; &lt;p&gt;Well, lets get going then....&lt;/p&gt; &lt;p&gt;Constructing the Enumeration&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;/**** Enumeration to specify the Data Source Type**********/&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;1) The Constructor for the Enumeration&lt;/pre&gt;&lt;pre class="csharpcode"&gt;AtlasDemo.DataSourceType = &lt;span class="kwrd"&gt;function&lt;/span&gt;(){};&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;2) Define the different Types of data that can be bound using the Prototype Model .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;AtlasDemo.DataSourceType.prototype =
{
    JSON : 0,
    XMLString : 1
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;3) Register the Enumeration using the "registerEnum" function of the ASP.net AJAX framework.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;AtlasDemo.DataSourceType.registerEnum(&lt;span class="str"&gt;"AtlasDemo.DataSourceType"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Modify the  BindGrid Function to accept the type of dataBinding to be performed.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;BindGrid : &lt;span class="kwrd"&gt;function&lt;/span&gt;(dataSourceType)&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;Using the Enumeration from the client application &lt;/pre&gt;&lt;pre class="csharpcode"&gt;as a parameter to the  function  BindGrid , &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; CreateGrid( JSONDataToBeBound )
{
  &lt;span class="rem"&gt;//Create an instance of the PhotoGrid Control&lt;/span&gt;
  &lt;span class="kwrd"&gt;var&lt;/span&gt; gridElement = &lt;span class="kwrd"&gt;new&lt;/span&gt; AtlasDemo.PhotoGrid( leftPosition , topPosition,&lt;span class="str"&gt;""&lt;/span&gt;,0,&lt;span class="str"&gt;"tblThumbnails"&lt;/span&gt;,horizontalOffset,VerticalOffset) ;
  &lt;span class="rem"&gt;//Set the Data for the PhotoGrid Control&lt;/span&gt;
  gridElement.setData(JSONDataToBeBound); 
  &lt;span class="rem"&gt;//Set the Number of images to be shown in one Page&lt;/span&gt;
  gridElement.setPageSize( pageSize );
  &lt;span class="rem"&gt;//Bind the Grid&lt;/span&gt;
  gridElement.BindGrid( AtlasDemo.DataSourceType.JSON  );
  
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Xml Data Format Supported by the PhotoGrid Component&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ResultSet&lt;/span&gt; &lt;span class="attr"&gt;totalResultsAvailable&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;totalResultsReturned&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;firstResultPosition&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Results&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Result&lt;/span&gt; &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="just-a-little-bit_1024.jpg"&lt;/span&gt; &lt;span class="attr"&gt;Summary&lt;/span&gt;&lt;span class="kwrd"&gt;="Website: Deviant Art Homepage Download: 1024x768"&lt;/span&gt; &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="http:\/\/www.pixelgirlpresents.com\/images\/desktops\/elyse\/just-a-little-bit_1024.jpg"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Result&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Result&lt;/span&gt; &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="just-a-little-bit_1024.jpg"&lt;/span&gt; &lt;span class="attr"&gt;Summary&lt;/span&gt;&lt;span class="kwrd"&gt;="Website: Deviant Art Homepage Download: 1024x768"&lt;/span&gt; &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="http:\/\/www.pixelgirlpresents.com\/images\/desktops\/elyse\/just-a-little-bit_1024.jpg"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Result&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Results&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ResultSet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Calling the BindGrid Function With XMl Data &lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;1) Create and append the XML String to  a stringBuilder Object &lt;/pre&gt;&lt;pre class="csharpcode"&gt;   &lt;span class="kwrd"&gt;var&lt;/span&gt; sBuilder = &lt;span class="kwrd"&gt;new&lt;/span&gt; Sys.StringBuilder(&lt;span class="str"&gt;""&lt;/span&gt;);
    sBuilder.append(&lt;span class="str"&gt;"&amp;lt;ResultSet totalResultsAvailable=\"2\" totalResultsReturned=\"2\" firstResultPosition=\"0\"&amp;gt;"&lt;/span&gt;);
        sBuilder.append(&lt;span class="str"&gt;"&amp;lt;Results&amp;gt;"&lt;/span&gt;);
            sBuilder.append(&lt;span class="str"&gt;"&amp;lt;Result Title=\"just-a-little-bit_1024.jpg\" Summary=\"Website: Deviant Art Homepage Download: 1024x768\" Url=\"http:\/\/www.pixelgirlpresents.com\/images\/desktops\/elyse\/just-a-little-bit_1024.jpg\"&amp;gt;&amp;lt;/Result&amp;gt;"&lt;/span&gt;);
            sBuilder.append(&lt;span class="str"&gt;"&amp;lt;Result Title=\"just-a-little-bit_1024.jpg\" Summary=\"Website: Deviant Art Homepage Download: 1024x768\" Url=\"http:\/\/www.pixelgirlpresents.com\/images\/desktops\/elyse\/just-a-little-bit_1024.jpg\"&amp;gt;&amp;lt;/Result&amp;gt;"&lt;/span&gt;);   &lt;/pre&gt;&lt;pre class="csharpcode"&gt;        sBuilder.append(&lt;span class="str"&gt;"&amp;lt;/Results&amp;gt;"&lt;/span&gt;);
    sBuilder.append(&lt;span class="str"&gt;"&amp;lt;/ResultSet&amp;gt;"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="csharpcode"&gt;2) Set the Data to be rendered by the PhotoGrid Control &lt;/pre&gt;&lt;pre class="csharpcode"&gt;PhotoGridGlobalInstance.setData( sBuilder.toString() );&lt;/pre&gt;&lt;pre class="csharpcode"&gt;3) Set the DataSource Type to be XML while Binding ..&lt;/pre&gt;&lt;pre class="csharpcode"&gt;gridElement.BindGrid( AtlasDemo.DataSourceType.XMLString  );&lt;/pre&gt;&lt;pre class="csharpcode"&gt;You are done .. Simple , neat and easy ...&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1592154" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Prototype/default.aspx">Prototype</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>Using the Prototype Model with Microsoft AJAX</title><link>http://blogs.msdn.com/phaniraj/archive/2007/02/01/using-the-prototype-model-with-microsoft-ajax.aspx</link><pubDate>Thu, 01 Feb 2007 21:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1574673</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/1574673.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=1574673</wfw:commentRss><description>&lt;p&gt;Microsoft Ajax allows you to extend your javaScript Programming framework so that you can emulate OOP practices with Javascript .&lt;/p&gt; &lt;p&gt;A SImple Example is &lt;a href="http://ajax.asp.net/docs/tutorials/EnhancingJavaScriptTutorial.aspx"&gt;Here&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The following is a list of stuff you can Use in javascript with Microsoft Ajax Extensions to javascript &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;Classes&lt;/p&gt; &lt;li&gt; &lt;p&gt;Namespaces&lt;/p&gt; &lt;li&gt; &lt;p&gt;Inheritance&lt;/p&gt; &lt;li&gt; &lt;p&gt;Interfaces&lt;/p&gt; &lt;li&gt; &lt;p&gt;Enumerations&lt;/p&gt; &lt;li&gt; &lt;p&gt;Reflection&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Sounds Neat , doesnt it ?&lt;/p&gt; &lt;p&gt;Well, lets get started ...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;We will build a Re-usable Photo Grid Component that you can use in your applications .&lt;/p&gt; &lt;p&gt;PhotoGrid&amp;nbsp; : It will show a grid of thumbnails with Animations associated with Click of each thumbNail.&lt;/p&gt; &lt;p&gt;On Click of the ThumbNail , the ThumbNail will move to a specific location and Resize itself .&lt;/p&gt; &lt;p&gt;The PhotoGird will have the Following Features.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Ability Bind Data in JSON Format  &lt;li&gt;Paging Functionality in Numbers and "Next" and "Prev" Links  &lt;li&gt;Jump to a&amp;nbsp; specific page  &lt;li&gt;Support for Placing the Controls at Specified X and Y Locations  &lt;li&gt;Support for Customising the Horizontal and Vertical Offset between thumbnails  &lt;li&gt;Support for specifying the Number of images in each page.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;It will be written as a Client Side Java Script Re-usable Component&lt;/p&gt; &lt;p&gt;Th JSON Data format will be like this&lt;/p&gt;&lt;pre class="csharpcode"&gt;{
&lt;span class="str"&gt;"ResultSet"&lt;/span&gt;:{&lt;span class="str"&gt;"totalResultsAvailable"&lt;/span&gt;:&lt;span class="str"&gt;"50014"&lt;/span&gt;,&lt;span class="str"&gt;"totalResultsReturned"&lt;/span&gt;:7,&lt;span class="str"&gt;"firstResultPosition"&lt;/span&gt;:1,
&lt;span class="str"&gt;"Result"&lt;/span&gt; :
    [
     {
        &lt;span class="str"&gt;"Title"&lt;/span&gt;:&lt;span class="str"&gt;"The-Incredibles-Poster-C10219976.jpeg"&lt;/span&gt;,
        &lt;span class="str"&gt;"Summary"&lt;/span&gt;:&lt;span class="str"&gt;""&lt;/span&gt;,
        &lt;span class="str"&gt;"Url"&lt;/span&gt;:&lt;span class="str"&gt;"http://a1259.g.akamai.net/f/1259/5586/1d/images.art.com/images/-/The-Incredibles-Poster-C10219976.jpeg"&lt;/span&gt;

     }
     {
        &lt;span class="str"&gt;"Title"&lt;/span&gt;:&lt;span class="str"&gt;"The-Incredibles-Poster-C10219976.jpeg"&lt;/span&gt;,
        &lt;span class="str"&gt;"Summary"&lt;/span&gt;:&lt;span class="str"&gt;""&lt;/span&gt;,
        &lt;span class="str"&gt;"Url"&lt;/span&gt;:&lt;span class="str"&gt;"http://a1259.g.akamai.net/f/1259/5586/1d/images.art.com/images/-/The-Incredibles-Poster-C10219976.jpeg"&lt;/span&gt;

     }
    ]
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The PhotoGrid Component will convert the Data into something that looks like this &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/UsingthePrototypeModelwithMicrosoftAJAX_14A88/Photo_Grid_Preview4.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/UsingthePrototypeModelwithMicrosoftAJAX_14A88/Photo_Grid_Preview3.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/pre&gt;&lt;pre class="csharpcode"&gt;On Clicking of a thumbnail  , it will resize itself automatically , then it will look like this &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/UsingthePrototypeModelwithMicrosoftAJAX_14A88/photo_Grid_THumbnail_Expanded1.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/UsingthePrototypeModelwithMicrosoftAJAX_14A88/photo_Grid_THumbnail_Expanded.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/pre&gt;&lt;pre class="csharpcode"&gt;Now that I  have , hopefully, &lt;font face="Consolas" size="2"&gt;raised your curiosity . lets build this..&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Creating the PhotoGrid Component using Microsoft AJAX Exntensions&lt;/pre&gt;&lt;pre class="csharpcode"&gt;1.Register the NameSpace&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Type.registerNamespace(&lt;span class="str"&gt;"AtlasDemo"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="csharpcode"&gt;2.Declare the Constructor for your class.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;AtlasDemo.PhotoGrid = &lt;span class="kwrd"&gt;function&lt;/span&gt; ( leftPosition , topPosition ,parentControlId ,animatorGlobalIndex ,tableID, horizontalOffset,VerticalOffset ){ 
&lt;span class="kwrd"&gt;this&lt;/span&gt;._jsonString        = &lt;span class="str"&gt;""&lt;/span&gt;;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._gridData          ;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._pageIndex         = 0;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._firstImageIndex   = 0;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._leftPosition      = leftPosition;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._topPosition       = topPosition;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._parentControlId   = parentControlId;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._thumbNailTableId  = tableID;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._horizontalOffset  = horizontalOffset;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._loopIndex         = 0 ;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._verticalOffset    = VerticalOffset;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._pageSize          =7;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._startIndex        =0;
&lt;span class="kwrd"&gt;this&lt;/span&gt;._initialStart      =0;

}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;2. Define the functions of the PhotoGrid using the Prototype model .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;u&gt;&lt;strong&gt;Syntax:&lt;/strong&gt;&lt;/u&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;AtlasDemo.PhotoGrid.prototype = {
  &amp;lt;functionName1&amp;gt;:&lt;span class="kwrd"&gt;function&lt;/span&gt;([arguments])
  {
    &amp;lt;FunctionBody&amp;gt;
  }
  ,
  &amp;lt;functionName2&amp;gt;:&lt;span class="kwrd"&gt;function&lt;/span&gt;([arguments])
  {
     &amp;lt;FunctionBody&amp;gt;
  }
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Code inside the JS function is specified in this  format , pretty neat  and organised &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Actual Function Definitions:&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;Function Name    : &lt;/strong&gt;pagesAvailable&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;Function Purpose : &lt;/strong&gt;To Return the Number of Pages Available For Paging&lt;strong&gt; &lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;Return Value     :&lt;/strong&gt; JSON Object with the total Number of Pages, Pages available in the Forward Direction and Backward Direction&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;Input Parameters : &lt;/strong&gt;None&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;Function Code:&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;pagesAvailable:&lt;span class="kwrd"&gt;function&lt;/span&gt;()
    {
        &lt;span class="kwrd"&gt;var&lt;/span&gt; totalPages    = parseInt(&lt;span class="kwrd"&gt;this&lt;/span&gt;._gridData.ResultSet.totalResultsReturned)/parseInt(&lt;span class="kwrd"&gt;this&lt;/span&gt;._pageSize);
        &lt;span class="kwrd"&gt;var&lt;/span&gt; pagesForward  = parseInt(totalPages) - ( parseInt(&lt;span class="kwrd"&gt;this&lt;/span&gt;._pageIndex) +1 ) ;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; pagesBackWard = parseInt( totalPages - pagesForward ); 
        &lt;span class="kwrd"&gt;var&lt;/span&gt; jsonStringData = &lt;span class="str"&gt;"{\"pagesData\":{\"totalPages\":\""&lt;/span&gt;+totalPages+&lt;span class="str"&gt;"\",\"pagesForward\":\""&lt;/span&gt;+pagesForward+&lt;span class="str"&gt;"\",\"pagesBackWard\":\""&lt;/span&gt;+pagesBackWard+&lt;span class="str"&gt;"\"}}"&lt;/span&gt;
        &lt;span class="kwrd"&gt;return&lt;/span&gt; ( eval( &lt;span class="str"&gt;'('&lt;/span&gt; + jsonStringData + &lt;span class="str"&gt;')'&lt;/span&gt; ) );
    }&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The following are functions inside the Prototype function Declaration, the code is omitted for the purpose of clarity.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;    setPageSize:&lt;span class="kwrd"&gt;function&lt;/span&gt;(pageSize)
    {
        &amp;lt;Function Body&amp;gt;
    },
    setData:&lt;span class="kwrd"&gt;function&lt;/span&gt;(jsonString)
    {
        &amp;lt;Function Body&amp;gt;
    },
    resetPositions:&lt;span class="kwrd"&gt;function&lt;/span&gt;( leftPosition , topPosition , animatorGlobalIndex  )
    {
        &amp;lt;Function Body&amp;gt;
    },
    resetAll:&lt;span class="kwrd"&gt;function&lt;/span&gt; ( jsonString ,leftPosition , topPosition ,parentControlId ,animatorGlobalIndex ,tableID, horizontalOffset,VerticalOffset ){ 
        &amp;lt;Function Body&amp;gt;
    },
    clearResults : &lt;span class="kwrd"&gt;function&lt;/span&gt;( leftPosition , topPosition , horizontalOffset,VerticalOffset )
    {
        &amp;lt;Function Body&amp;gt;
        
    },
    
    ShowPager:&lt;span class="kwrd"&gt;function&lt;/span&gt;(shouldIShowThePager,pagerControlHolder,pagingFunctionName)
    {
        &amp;lt;Function Body&amp;gt;
    },
    PageForward:&lt;span class="kwrd"&gt;function&lt;/span&gt;()
    {
    
        &amp;lt;Function Body&amp;gt;
    },
    __pagingFunction:&lt;span class="kwrd"&gt;function&lt;/span&gt;()
    {
       &amp;lt;Function Body&amp;gt; 
    },
    CurrentPageIndex : &lt;span class="kwrd"&gt;function&lt;/span&gt;()
    {
        &amp;lt;Function Body&amp;gt;
    },
    PageBackward : &lt;span class="kwrd"&gt;function&lt;/span&gt;()
    {
        &amp;lt;Function Body&amp;gt;
    },
    AnimateElement:&lt;span class="kwrd"&gt;function&lt;/span&gt;( imgElement )
    {
        &amp;lt;Function Body&amp;gt;
                        
    },
    CreateNewPhotoCell:&lt;span class="kwrd"&gt;function&lt;/span&gt;( searchResultItem )
    {
        &amp;lt;Function Body&amp;gt;
    }, 
    BindGrid : &lt;span class="kwrd"&gt;function&lt;/span&gt;()
    {
         &amp;lt;Function Body&amp;gt;
    }&lt;/pre&gt;&lt;pre class="csharpcode"&gt;3. Once you have declared the functions supported by the PhotoGrid Class, lets Go ahead and register the class.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;AtlasDemo.PhotoGrid.registerClass(&lt;span class="str"&gt;'AtlasDemo.PhotoGrid'&lt;/span&gt;, &lt;span class="kwrd"&gt;null&lt;/span&gt;, Sys.IDisposable);&lt;/pre&gt;&lt;pre class="csharpcode"&gt;You can read all about the registerClass &lt;a href="http://ajax.asp.net/docs/ClientReference/Global/TypeClass/TypeRegisterClassMethod.aspx"&gt;Here&lt;/a&gt;.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;You are now done!&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Lets go ahead and see how to use this component in our code.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;ASPX Code:&lt;/pre&gt;&lt;pre class="csharpcode"&gt;1. Add the Mandatory Script Manager Control.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="ScriptManager1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;2. Include a reference to your script File in the &lt;strong&gt;&lt;u&gt;&lt;font color="#ff0000"&gt;&amp;lt;BODY&amp;gt; of the ASPX Page&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="ClientScripts/PhotoGrid.js"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;3. The Parent Control that will hold the ThumbNails&lt;/pre&gt;&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="divActualSize"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="left: 10px; overflow: auto; width: 90%; position: absolute;
            top: 18%; height: 650px"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="grey"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="tblThumbnails"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tbody&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tbody&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;4. The Client Functions to the PhotoGrid Component&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; CreateGrid( JSONDataToBeBound )
{
  &lt;span class="rem"&gt;//Create an instance of the PhotoGrid Control&lt;/span&gt;
  &lt;span class="kwrd"&gt;var&lt;/span&gt; gridElement = &lt;span class="kwrd"&gt;new&lt;/span&gt; AtlasDemo.PhotoGrid( leftPosition , topPosition,&lt;span class="str"&gt;""&lt;/span&gt;,0,&lt;span class="str"&gt;"tblThumbnails"&lt;/span&gt;,horizontalOffset,VerticalOffset) ;
  &lt;span class="rem"&gt;//Set the Data for the PhotoGrid Control&lt;/span&gt;
  gridElement.setData(JSONDataToBeBound); 
  &lt;span class="rem"&gt;//Set the Number of images to be shown in one Page&lt;/span&gt;
  gridElement.setPageSize( pageSize );
  &lt;span class="rem"&gt;//Bind the Grid&lt;/span&gt;
  gridElement.BindGrid( );
  
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;we are done !&lt;/pre&gt;&lt;pre class="csharpcode"&gt;I have made a sample application that uses this control and shows off all the features possible .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Please let me know if this control is of any use to you .&lt;/pre&gt;&lt;pre class="csharpcode"&gt; If yes, then how ?&lt;/pre&gt;&lt;pre class="csharpcode"&gt; If No , then which features / options would make it useful ?&lt;/pre&gt;&lt;pre class="csharpcode"&gt;You can download the Sample Application here.&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1574673" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/phaniraj/attachment/1574673.ashx" length="256783" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Prototype/default.aspx">Prototype</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item></channel></rss>