<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Kazi Manzur Rashid's Blog</title><link>http://weblogs.asp.net/rashid/default.aspx</link><description>Sharing Thoughts and Learning</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/manzurrashid" type="application/rss+xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.rojo.com/add-subscription?resource=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://blog.rojo.com/RojoWideRed.gif">Subscribe with Rojo</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/manzurrashid" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmanzurrashid" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><item><title>ASP.NET MVC Action Filter - Caching and Compression</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/259208663/asp-net-mvc-action-filter-caching-and-compression.aspx</link><pubDate>Thu, 27 Mar 2008 20:12:17 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6038280</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=6038280</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=6038280</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/03/28/asp-net-mvc-action-filter-caching-and-compression.aspx#comments</comments><description>&lt;p&gt;Caching plays a major role in developing highly scalable web applications. We can cache any http get request in the user browser for a predefined time, if the user request the same URL in that predefined time the response will be loaded from the browser cache instead of the server. You can archive the same in ASP.NET MVC application with the following action filter:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Web;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Web.Mvc;

&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;CacheFilterAttribute&lt;/span&gt; : &lt;span style="color: rgb(43,145,175)"&gt;ActionFilterAttribute
&lt;/span&gt;{
    &lt;span style="color: rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt; Gets or sets the cache duration in seconds. The default is 10 seconds.
&lt;/span&gt;    &lt;span style="color: rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(128,128,128)"&gt;///&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(128,128,128)"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt;The cache duration in seconds.&lt;/span&gt;&lt;span style="color: rgb(128,128,128)"&gt;&amp;lt;/value&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; Duration
    {
        &lt;span style="color: rgb(0,0,255)"&gt;get&lt;/span&gt;;
        &lt;span style="color: rgb(0,0,255)"&gt;set&lt;/span&gt;;
    }

    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; CacheFilterAttribute()
    {
        Duration = 10;
    }

    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;override&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; OnActionExecuted(&lt;span style="color: rgb(43,145,175)"&gt;FilterExecutedContext&lt;/span&gt; filterContext)
    {
        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (Duration &amp;lt;= 0) &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt;;

        &lt;span style="color: rgb(43,145,175)"&gt;HttpCachePolicyBase&lt;/span&gt; cache = filterContext.HttpContext.Response.Cache;
        &lt;span style="color: rgb(43,145,175)"&gt;TimeSpan&lt;/span&gt; cacheDuration = &lt;span style="color: rgb(43,145,175)"&gt;TimeSpan&lt;/span&gt;.FromSeconds(Duration);

        cache.SetCacheability(&lt;span style="color: rgb(43,145,175)"&gt;HttpCacheability&lt;/span&gt;.Public);
        cache.SetExpires(&lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.Now.Add(cacheDuration));
        cache.SetMaxAge(cacheDuration);
        cache.AppendCacheExtension(&lt;span style="color: rgb(163,21,21)"&gt;"must-revalidate, proxy-revalidate"&lt;/span&gt;);
    }
}&lt;/pre&gt;
&lt;p&gt;You can apply the filter in your Controller action method like the following.&lt;/p&gt;&lt;pre class="code"&gt;[&lt;span style="color: rgb(43,145,175)"&gt;CacheFilter&lt;/span&gt;(Duration = 60)]
&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Category(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; name, &lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt;? page)&lt;/pre&gt;
&lt;p&gt;The following shows the screen-shot in firebug&amp;nbsp; when cache filter &lt;strong&gt;is not applied&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/rashid/ActionFilters/NoCache.jpg"&gt;&lt;/p&gt;
&lt;p&gt;and this is the screen-shot when the cache filter &lt;strong&gt;is applied&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/rashid/ActionFilters/Cache.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Another important thing is compression. Now a days, all modern browsers accept compressed contents and it saves huge bandwidth. You can apply the following action filter to compress your response in your&amp;nbsp; ASP.NET MVC application:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Web;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Web.Mvc;

&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;CompressFilter&lt;/span&gt; : &lt;span style="color: rgb(43,145,175)"&gt;ActionFilterAttribute
&lt;/span&gt;{
    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;override&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; OnActionExecuting(&lt;span style="color: rgb(43,145,175)"&gt;FilterExecutingContext&lt;/span&gt; filterContext)
    {
        &lt;span style="color: rgb(43,145,175)"&gt;HttpRequestBase&lt;/span&gt; request = filterContext.HttpContext.Request;

        &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; acceptEncoding = request.Headers[&lt;span style="color: rgb(163,21,21)"&gt;"Accept-Encoding"&lt;/span&gt;];

        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;.IsNullOrEmpty(acceptEncoding)) &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt;;

        acceptEncoding = acceptEncoding.ToUpperInvariant();

        &lt;span style="color: rgb(43,145,175)"&gt;HttpResponseBase&lt;/span&gt; response = filterContext.HttpContext.Response;

        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (acceptEncoding.Contains(&lt;span style="color: rgb(163,21,21)"&gt;"GZIP"&lt;/span&gt;))
        {
            response.AppendHeader(&lt;span style="color: rgb(163,21,21)"&gt;"Content-encoding"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"gzip"&lt;/span&gt;);
            response.Filter = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;GZipStream&lt;/span&gt;(response.Filter, &lt;span style="color: rgb(43,145,175)"&gt;CompressionMode&lt;/span&gt;.Compress);
        }
        &lt;span style="color: rgb(0,0,255)"&gt;else&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (acceptEncoding.Contains(&lt;span style="color: rgb(163,21,21)"&gt;"DEFLATE"&lt;/span&gt;))
        {
            response.AppendHeader(&lt;span style="color: rgb(163,21,21)"&gt;"Content-encoding"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"deflate"&lt;/span&gt;);
            response.Filter = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;DeflateStream&lt;/span&gt;(response.Filter, &lt;span style="color: rgb(43,145,175)"&gt;CompressionMode&lt;/span&gt;.Compress);
        }
    }
}&lt;/pre&gt;
&lt;p&gt;Just decorate your controller action with this filter:&lt;/p&gt;&lt;pre class="code"&gt;[&lt;span style="color: rgb(43,145,175)"&gt;CompressFilter&lt;/span&gt;]
&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Category(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; name, &lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt;? page)&lt;/pre&gt;
&lt;p&gt;The following shows when compression &lt;strong&gt;is not applied&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/rashid/ActionFilters/Uncompressed.jpg"&gt;&lt;/p&gt;
&lt;p&gt;and this is the screen-shot when the compress filter &lt;strong&gt;is applied&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/rashid/ActionFilters/Compressed.jpg"&gt;&lt;/p&gt;
&lt;p&gt;You can also apply both these filter in the same action method, like the following:&lt;br&gt;&lt;/p&gt;&lt;pre class="code"&gt;[&lt;span style="color: rgb(43,145,175)"&gt;CompressFilter&lt;/span&gt;(Order = 1)]
[&lt;span style="color: rgb(43,145,175)"&gt;CacheFilter&lt;/span&gt;(Duration = 60, Order = 2)]
&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Category(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; name, &lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt;? page)&lt;/pre&gt;
&lt;p&gt;And this is the screen-shot:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/rashid/ActionFilters/Both.jpg"&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Enjoy!!!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;: &lt;a href="http://weblogs.asp.net/blogs/rashid/ActionFilters/Filters.zip" target="_blank"&gt;Source.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2008%2f03%2f28%2fasp-net-mvc-action-filter-caching-and-compression.aspx" target="_blank"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2008%2f03%2f28%2fasp-net-mvc-action-filter-caching-and-compression.aspx" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6038280" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/259208663" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Asp.net/default.aspx">Asp.net</category><category domain="http://weblogs.asp.net/rashid/archive/tags/MVC/default.aspx">MVC</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F03%2F28%2Fasp-net-mvc-action-filter-caching-and-compression.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/03/28/asp-net-mvc-action-filter-caching-and-compression.aspx</feedburner:origLink></item><item><title>Kigg - Upgraded to MIX08 ASP.NET MVC Release</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/258386447/kigg-upgraded-to-mix08-asp-net-mvc-release.aspx</link><pubDate>Wed, 26 Mar 2008 15:40:15 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6028612</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=6028612</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=6028612</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/03/26/kigg-upgraded-to-mix08-asp-net-mvc-release.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;[Note: This post was meant to be published the day after MIX08 version was out]&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I have upgraded &lt;a href="http://www.codeplex.com/Kigg" target="_blank"&gt;Kigg&lt;/a&gt; with the &lt;a href="http://go.microsoft.com/fwlink/?LinkID=110956" target="_blank"&gt;new bits&lt;/a&gt;.&amp;nbsp; Upgrading was plain and simple, though I created a new project and added the files instead of &lt;a href="http://blogs.msdn.com/webdevtools/archive/2008/03/12/tips-tricks-upgrading-projects-from-asp-net-mvc-preview-1-to-preview-2-mix-2008.aspx" target="_blank"&gt;changing the Guids&lt;/a&gt;. There has been few changes in the web project which are required by the MIX08 release such as routing declaration, removing attribute for controller actions, using lambdas for action link where it is appropriate and finally changing the Unit test with &lt;a href="http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx" target="_blank"&gt;Scott Hanselman's MVCMockHelper&lt;/a&gt; and Fake View Engine from &lt;a href="http://haacked.com/archive/2007/12/09/writing-unit-tests-for-controller-actions.aspx" target="_blank"&gt;Phil Hack's Test Specific Subclass pattern&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://haacked.com/archive/2008/03/10/thoughts-on-asp.net-mvc-preview-2-and-beyond.aspx" target="_blank"&gt;As Phil Hack already mention&lt;/a&gt; the&amp;nbsp; MIX08 release was focused on to improve the Routing system and the next drop will streamline the testability issues, I think it is the right time to put my requirement list and comments on the new bits, not in any specific order, here I go:&lt;/p&gt; &lt;p&gt;Mix Release:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;It is good to see that controller now can implement &lt;font face="Courier New"&gt;IDisposable&lt;/font&gt;, I was wondering why&amp;nbsp; not going one step further and make the &lt;font face="Courier New"&gt;IController&lt;/font&gt; inherits from &lt;font face="Courier New"&gt;IDisposable?&lt;br&gt;&lt;/font&gt; &lt;li&gt;The &lt;font face="Courier New"&gt;ControllerAction&lt;/font&gt; has vanished, certainly a good choice and I am sure the in next .NET Framework, we do not have to deal with &lt;font face="Courier New"&gt;WebMethod&lt;/font&gt; and &lt;font face="Courier New"&gt;OperationContract&lt;/font&gt; attributes anymore, of course it does not make any sense having a double standard in the same platform. &lt;br&gt; &lt;li&gt;Filter attributes is a better substitute of HttpModule in MVC world. &lt;br&gt; &lt;li&gt;The team has not published any list on the Bug that has been fixed in this release. But I am sure there has not been many, currently two things that are really bothering me:  &lt;ul&gt; &lt;li&gt;It is still not possible to use a base class in Master Page and a concrete class in Content Page. (&lt;a href="http://forums.asp.net/t/1203959.aspx" target="_blank"&gt;Details&lt;/a&gt;)  &lt;li&gt;You cannot turn-off the Session Module. (&lt;a href="http://forums.asp.net/t/1198398.aspx" target="_blank"&gt;Details)&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Previous MVCToolkit has been imported into the core MVC framework which is good, but I would like to see most of the Url building methods of&amp;nbsp; HTMLHelper are also available in UrlHelper, specially those with lambda versions.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Future Release:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Validation Support. Currently we have to write both client side and server side codes, which is really painful, we need to have a similar kind of web form validation controls in MVC space.&lt;br&gt; &lt;li&gt;Close Integration with ASP.NET AJAX. I think the main reason that &lt;a href="http://codeclimber.net.nz/archive/2007/12/18/ASP.NET-Ajax-usage-floats-around-35.aspx" target="_blank"&gt;ASP.NET Ajax is mostly used framework&lt;/a&gt; in developing ASP.NET application due to its tight integration with ASP.NET. We need the same kind of support in MVC. Currently, the &lt;font face="Courier New"&gt;AjaxHelper&lt;/font&gt; is left empty, I guess later on the partial rendering will be implemented over there, but I would like to put more emphasis on the controller actions, what I would love to see is some attributes e.g. &lt;font face="Courier New"&gt;AjaxOperation&lt;/font&gt;, &lt;font face="Courier New"&gt;AjaxMethod&lt;/font&gt; which will generate the client side proxy, same as we have today for the web service and page methods.&lt;br&gt; &lt;li&gt;I do not believe that those Control Helper methods of &lt;a href="http://blog.wekeroad.com/blog/" target="_blank"&gt;Rob Conery&lt;/a&gt; can really substitute the real controls. Instead I find those problematic. Why:&lt;br&gt;&lt;br&gt; &lt;ul&gt; &lt;li&gt;I loose the rich design time support of VS.&lt;br&gt; &lt;li&gt;Certain but very common scenario like bind some data source with a select list with some predefined items what the AppendDataBoundItems property of the List Control does in web form world. Or, consider how do you generate a Url with # with those helpers.&lt;br&gt; &lt;li&gt;Currently helper exists for intrinsic controls, but did you consider the number of parameters when you introduce helper methods for GridView/DataList/Template supported controls.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;Since most of the existing controls of ASP.NET become handicapped in MVC world, why not develop a separate set of controls for MVC, it is hard to imagine running VS without toolbox.&lt;br&gt;&lt;br&gt; &lt;li&gt;Prior MIX08, &lt;a href="http://weblogs.asp.net/scottgu" target="_blank"&gt;ScottGu&lt;/a&gt; posted the &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/02/12/asp-net-mvc-framework-road-map-update.aspx" target="_blank"&gt;roadmap of mix08 release&lt;/a&gt;. I would like to see a detail list of features that are planned for the final version. Certainly, a lot of things will be added/modified from the community feedback. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2008%2f03%2f26%2fkigg-upgraded-to-mix08-asp-net-mvc-release.aspx" target="_blank"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2008%2f03%2f26%2fkigg-upgraded-to-mix08-asp-net-mvc-release.aspx" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6028612" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/258386447" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Asp.net/default.aspx">Asp.net</category><category domain="http://weblogs.asp.net/rashid/archive/tags/MVC/default.aspx">MVC</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F03%2F26%2Fkigg-upgraded-to-mix08-asp-net-mvc-release.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/03/26/kigg-upgraded-to-mix08-asp-net-mvc-release.aspx</feedburner:origLink></item><item><title>Kigg - Building a Digg Clone with ASP.NET MVC Part - 1</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/238021698/kigg-building-a-digg-clone-with-asp-net-mvc-part-1.aspx</link><pubDate>Wed, 20 Feb 2008 06:39:23 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5826217</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5826217</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5826217</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/02/20/kigg-building-a-digg-clone-with-asp-net-mvc-part-1.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/rashid/archive/2008/02/18/kigg-a-digg-like-application-developed-in-asp-net-mvc.aspx" target="_blank"&gt;Earlier&lt;/a&gt;, I mentioned that I will be writing a series of articles on developing &lt;a href="http://kigg.dotnetslackers.com/" target="_blank" rel="nofollow"&gt;Kigg&lt;/a&gt;. The first part is now live. &lt;a href="http://dotnetslackers.com/articles/aspnet/KiggBuildingADiggCloneWithASPNETMVC1.aspx" target="_blank" rel="nofollow"&gt;Check it out&lt;/a&gt;. &lt;/p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fdotnetslackers.com%2farticles%2faspnet%2fKiggBuildingADiggCloneWithASPNETMVC1.aspx" target="_blank"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fdotnetslackers.com%2farticles%2faspnet%2fKiggBuildingADiggCloneWithASPNETMVC1.aspx" border="0"&gt;&lt;/a&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5826217" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/238021698" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Asp.net/default.aspx">Asp.net</category><category domain="http://weblogs.asp.net/rashid/archive/tags/Articles/default.aspx">Articles</category><category domain="http://weblogs.asp.net/rashid/archive/tags/SQL/default.aspx">SQL</category><category domain="http://weblogs.asp.net/rashid/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://weblogs.asp.net/rashid/archive/tags/MVC/default.aspx">MVC</category><category domain="http://weblogs.asp.net/rashid/archive/tags/LINQ+to+SQL/default.aspx">LINQ to SQL</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F02%2F20%2Fkigg-building-a-digg-clone-with-asp-net-mvc-part-1.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/02/20/kigg-building-a-digg-clone-with-asp-net-mvc-part-1.aspx</feedburner:origLink></item><item><title>Kigg - A Digg like application developed in ASP.NET MVC</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/237014953/kigg-a-digg-like-application-developed-in-asp-net-mvc.aspx</link><pubDate>Mon, 18 Feb 2008 14:51:46 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5814413</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>32</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5814413</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5814413</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/02/18/kigg-a-digg-like-application-developed-in-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;For last few weeks, I was bit busy developing a sample application with the new ASP.NET MVC Framework and I am really glad that we finally made it. So, from the &lt;a href="http://dotnetslackers.com/info/about.aspx" target="_blank"&gt;DotNetSlackers.com&lt;/a&gt; Team I am presenting Kigg. Kigg&amp;nbsp; is Developed with:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Regular Web Forms for View.  &lt;li&gt;LINQ to SQL for developing the Model.  &lt;li&gt;ASP.NET Ajax for Ajax operation.  &lt;li&gt;Both VSTest and NUnit for Unit Test.  &lt;li&gt;Rhino Mock.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;While developing it, our main goal was to make it simple and stupid, without considering those Ioc/DI, View Engine, View Factory etc, So the average Joe developer can get a good start on the ASP.NET MVC Framework.&lt;br&gt;We will soon publish a series of Articles which will cover the complete development details of Kigg.&lt;br&gt;&lt;br&gt;You can see the live version running in &lt;a href="http://kigg.dotnetslackers.com/" target="_blank"&gt;DotNetSlackers.com&lt;/a&gt;. &lt;br&gt;The Source is as usual hosted in &lt;a href="http://www.codeplex.com/Kigg" target="_blank"&gt;CodePlex.com&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Enjoy!!!.&lt;br&gt;&lt;br&gt;Note: The Name Kigg = K is taken from DotNet&lt;strong&gt;K&lt;/strong&gt;icks and igg from D&lt;strong&gt;igg. &lt;br&gt;&lt;/strong&gt;&lt;/p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2008%2f02%2f18%2fkigg-a-digg-like-application-developed-in-asp-net-mvc.aspx" target="_blank"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2008%2f02%2f18%2fkigg-a-digg-like-application-developed-in-asp-net-mvc.aspx" border="0"&gt;&lt;/a&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5814413" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/237014953" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Asp.net/default.aspx">Asp.net</category><category domain="http://weblogs.asp.net/rashid/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://weblogs.asp.net/rashid/archive/tags/MVC/default.aspx">MVC</category><category domain="http://weblogs.asp.net/rashid/archive/tags/LINQ+to+SQL/default.aspx">LINQ to SQL</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F02%2F18%2Fkigg-a-digg-like-application-developed-in-asp-net-mvc.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/02/18/kigg-a-digg-like-application-developed-in-asp-net-mvc.aspx</feedburner:origLink></item><item><title>Ajax Style File Upload - How Do I Video</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/234637186/ajax-style-file-upload-how-do-i-video.aspx</link><pubDate>Wed, 13 Feb 2008 23:33:32 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5781631</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5781631</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5781631</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/02/14/ajax-style-file-upload-how-do-i-video.aspx#comments</comments><description>&lt;p&gt;It seems, today is my celebration day. First, our open source project &lt;a href="http://codeplex.com/AjaxDataControls" target="_blank"&gt;AjaxDataControls&lt;/a&gt;&amp;nbsp;&lt;a href="http://weblogs.asp.net/rashid/archive/2008/02/13/ajaxdatacontrols-in-ajaxian.aspx" target="_blank"&gt;get mentioned in Ajaxian&lt;/a&gt;.&amp;nbsp; And now &lt;a href="http://www.joeon.net/" target="_blank"&gt;Joe Stagner&lt;/a&gt; shows ajax style file upload in the new &lt;a href="http://www.asp.net/learn/videos/video-254.aspx" target="_blank"&gt;ASP.NET How do I video&lt;/a&gt; series which I &lt;a href="http://geekswithblogs.net/rashid/archive/2007/08/01/Create-An-Ajax-Style-File-Upload.aspx" target="_blank"&gt;posted few months ago&lt;/a&gt;. I have used this technique extensively and it really serves my purpose. &lt;a href="http://www.asp.net/learn/videos/video-254.aspx" target="_blank"&gt;A must see&lt;/a&gt; if you want to implement the same.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5781631" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/234637186" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Asp.net/default.aspx">Asp.net</category><category domain="http://weblogs.asp.net/rashid/archive/tags/Ajax/default.aspx">Ajax</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F02%2F14%2Fajax-style-file-upload-how-do-i-video.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/02/14/ajax-style-file-upload-how-do-i-video.aspx</feedburner:origLink></item><item><title>AjaxDataControls in Ajaxian</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/234418735/ajaxdatacontrols-in-ajaxian.aspx</link><pubDate>Wed, 13 Feb 2008 15:45:12 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5779452</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5779452</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5779452</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/02/13/ajaxdatacontrols-in-ajaxian.aspx#comments</comments><description>&lt;p&gt;Checkout that AjaxDataControls has been &lt;a href="http://ajaxian.com/archives/ajaxdatacontrols-v10-ajax-extensison-for-net" target="_blank"&gt;reviewed in the Ajaxian&lt;/a&gt;.&amp;nbsp; Really sweet!!!&lt;/p&gt; &lt;p&gt;Do let us know what you like and don't like and what else do you want to see in future.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5779452" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/234418735" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://weblogs.asp.net/rashid/archive/tags/AjaxDataControls/default.aspx">AjaxDataControls</category><category domain="http://weblogs.asp.net/rashid/archive/tags/Community+News/default.aspx">Community News</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F02%2F13%2Fajaxdatacontrols-in-ajaxian.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/02/13/ajaxdatacontrols-in-ajaxian.aspx</feedburner:origLink></item><item><title>Volta - Flickr Widget</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/219025507/volta-flickr-widget.aspx</link><pubDate>Fri, 18 Jan 2008 19:11:28 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5616678</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5616678</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5616678</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/01/19/volta-flickr-widget.aspx#comments</comments><description>&lt;p&gt;My ex-buddy &lt;a href="http://tanzimsaqib.com" target="_blank"&gt;Tanzim Saqib&lt;/a&gt; has wrote an excellent article on creating controls in &lt;a href="http://labs.live.com/volta/download/" target="_blank"&gt;Volta&lt;/a&gt;. Really worth to c&lt;a href="http://dotnetslackers.com/articles/aspnet/BuildingAVoltaControlAFlickrWidget.aspx" target="_blank"&gt;heck it out&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5616678" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/219025507" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Asp.net/default.aspx">Asp.net</category><category domain="http://weblogs.asp.net/rashid/archive/tags/Articles/default.aspx">Articles</category><category domain="http://weblogs.asp.net/rashid/archive/tags/Ajax/default.aspx">Ajax</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F01%2F19%2Fvolta-flickr-widget.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/01/19/volta-flickr-widget.aspx</feedburner:origLink></item><item><title>AjaxDataControls v1.0 Goes Live</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/216430056/ajaxdatacontrols-v1-0-goes-live.aspx</link><pubDate>Mon, 14 Jan 2008 13:37:53 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5602199</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5602199</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5602199</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/01/14/ajaxdatacontrols-v1-0-goes-live.aspx#comments</comments><description>&lt;img alt="" src="http://weblogs.asp.net/blogs/rashid/ADC/logo.png"&gt; &lt;br&gt;&lt;br&gt;I am proud to announce the final release of v1.0 of &lt;a href="http://codeplex.com/AjaxDataControls" target="_blank" rel="nofollow"&gt;AjaxDataControls&lt;/a&gt;. The v1.0 has a lot of enhancements and bug fixes, which I have mentioned in my &lt;a href="http://weblogs.asp.net/rashid/archive/2007/11/30/ajaxdatacontrols-api-changes.aspx" target="_blank"&gt;previous post&lt;/a&gt;, the whole API is now available in CHM format. The Latest sample also has few cool demo of Ajax Control Toolkit integration. Checkout the following screenshots:  &lt;p&gt;Integrating with Calendar Extender: &lt;br&gt;&lt;br&gt;&lt;img alt="" src="http://weblogs.asp.net/blogs/rashid/ADC/GridView-ACT-Calendar.png"&gt;&lt;/p&gt; &lt;p&gt;Integrating with MaskEdit Extender: &lt;br&gt;&lt;br&gt;&lt;img alt="" src="http://weblogs.asp.net/blogs/rashid/ADC/GridView-ACT-MaskEdit.png"&gt;&lt;/p&gt; &lt;p&gt;Integrating with NumericUpDown and&amp;nbsp; FilteredTextBox Extender: &lt;br&gt;&lt;br&gt;&lt;img alt="" src="http://weblogs.asp.net/blogs/rashid/ADC/GridView-ACT-NumericUpDn.png"&gt;&lt;/p&gt; &lt;p&gt;You can download the latest version from the &lt;a href="http://www.codeplex.com/AjaxDataControls/Release/ProjectReleases.aspx?ReleaseId=8312" target="_blank"&gt;CodePlex release tab&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I would love to see your comments and feedbacks.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2008%2f01%2f14%2fajaxdatacontrols-v1-0-goes-live.aspx" target="_blank"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2008%2f01%2f14%2fajaxdatacontrols-v1-0-goes-live.aspx" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5602199" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/216430056" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://weblogs.asp.net/rashid/archive/tags/AjaxDataControls/default.aspx">AjaxDataControls</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F01%2F14%2Fajaxdatacontrols-v1-0-goes-live.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/01/14/ajaxdatacontrols-v1-0-goes-live.aspx</feedburner:origLink></item><item><title>AjaxDataControls GridView Part Two</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/216370705/ajaxdatacontrols-gridview-part-two.aspx</link><pubDate>Mon, 14 Jan 2008 11:10:39 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5601753</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5601753</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5601753</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/01/14/ajaxdatacontrols-gridview-part-two.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/rashid/archive/2007/12/03/ajaxdatacontrols-gridview-part-one.aspx" target="_blank"&gt;In my previous post&lt;/a&gt;, I have shown how to do data binding, data sorting and different type of columns of &lt;a href="http://www.codeplex.com/AjaxDataControls" target="_blank" rel="nofollow"&gt;AjaxDataControls&lt;/a&gt; GridView. In this post, I will show how to enable Drag and Drop of the GridView Columns and automatically persist it with the help of Ajax Profile Service.&lt;/p&gt; &lt;p&gt;The GridView internally uses the preview version of Asp.net Ajax Drag and Drop script for the column Drag and Drop. So the first thing you have to do is to add these scripts in your script manager, the GridView also uses the animation script (PreviewGlitz.js) to do the animation when binding with data, So I would also recommend to add this script to exploit the full feature of&amp;nbsp; GridView.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;asp&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;ScriptManager&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ID&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="TheScriptManager"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;runat&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="server"&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Services&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;asp&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;ServiceReference&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;Path&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="~/DataService.asmx"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Services&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Scripts&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;asp&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;ScriptReference&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;Path&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="~/PreviewScripts/PreviewScript.js"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;asp&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;ScriptReference&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;Path&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="~/PreviewScripts/PreviewDragDrop.js"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;asp&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;ScriptReference&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;Path&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="~/PreviewScripts/PreviewGlitz.js"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Scripts&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;asp&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;ScriptManager&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;By default the GridView turns on the drag and drop for all type of columns except Button, Command and Radio columns. But you can also allow Drag and Drop for those column types by setting the &lt;font face="Courier New"&gt;AllowDragAndDrop&lt;/font&gt; property to &lt;font face="Courier New"&gt;true&lt;/font&gt; of the individual columns. Now, lets take quick example of the GridView, here we will see the Suppliers of the Northwind database. The following shows the control declaration in the aspx page:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ID&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="GridView1"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;runat&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="server"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="DataWebControlStyle"&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AlternatingRowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="AlternatingRowStyle"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;RowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="RowStyle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;HeaderStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="HeaderStyle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Columns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Company"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Company"/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Contact"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ContactName"/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Title"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ContactTitle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Columns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;As you can see we are doing nothing special except adding the preview scripts in the script manager. Next, add the following JavaScript codes in your aspx page:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;script&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="text/javascript"&amp;gt;

&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; _gridView;

    &lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; pageLoad(sender, e)
    {
        _gridView = $find(&lt;span style="color: rgb(163,21,21)"&gt;'&amp;lt;%= GridView1.ClientID %&amp;gt;'&lt;/span&gt;);
        loadSuppliers();
    }

    &lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; loadSuppliers()
    {
        DataService.GetAllSupplier(onLoadSuccess);
    }

    &lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onLoadSuccess(result)
    {
        _gridView.set_dataSource(result);
        _gridView.dataBind();
    }

&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Once done, run it, you will able to do the drag and drop like the following:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://weblogs.asp.net/blogs/rashid/ADC/GridView-DnD.png"&gt;&lt;/p&gt;
&lt;p&gt;As you can see it gives some cool drag and drop abilities of the columns, but once you refresh the page the GridView appears same as it appears for the first time, which means the Drag and Drop of the columns has not been persisted. To add the persistence support we have to do the following things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configure the Asp.net Profile Provider. 
&lt;li&gt;Configure the Ajax Profile Services to allow access the Profile Object. &lt;a href="http://www.asp.net/AJAX/Documentation/Live/tutorials/UsingProfileInformationTutorial.aspx" target="_blank" rel="nofollow"&gt;Click here&lt;/a&gt; if you need to know how to configure the Ajax Profile Service.&amp;nbsp; &lt;li&gt;Few modification in the control declaration and javascript code.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;For the shake of this example I have add the Asp.net Provider support in the Northwind database and added the following settings in the web.config file:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;anonymousIdentification&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;enabled&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;true&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;membership&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;defaultProvider&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;SqlMemberShipProvider&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;userIsOnlineTimeWindow&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;1&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;providers&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;clear&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;SqlMemberShipProvider&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;applicationName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;Northwind&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;connectionStringName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;NorthwindConnectionString&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;System.Web.Security.SqlMembershipProvider&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;providers&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;membership&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;profile&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;defaultProvider&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;SqlProfileProvider&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;providers&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;clear&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;SqlProfileProvider&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;applicationName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;Northwind&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;connectionStringName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;NorthwindConnectionString&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;System.Web.Profile.SqlProfileProvider&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;providers&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;properties&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;DndColumns&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;System.String&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;provider&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;SqlProfileProvider&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;allowAnonymous&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;true&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;properties&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;profile&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;system.web&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;system.web.extensions&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;scripting&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;webServices&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;profileService&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;enabled&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;true&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;readAccessProperties&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;DndColumns&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;writeAccessProperties&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;DndColumns&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;webServices&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;scripting&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;system.web.extensions&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;As you can see, in the profile provider I have added a property named &lt;font face="Courier New"&gt;DndColumns&lt;/font&gt; which type is &lt;font face="Courier New"&gt;string&lt;/font&gt;. You can name it anything but the type needs to be string. Next, I gave both read/write permission of this property to Ajax Profile Service. Now we have to change the previous javascript code and the control to load and persist the columns. The following shows control, the modifications are in bold:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ID&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="GridView1"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;runat&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="server"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="DataWebControlStyle"&lt;/span&gt; &lt;strong&gt;&lt;span style="color: rgb(255,0,0)"&gt;ColumnsLoadedFromProfileEvent&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="onColumnsLoaded"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ColumnDroppedEvent&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: rgb(0,0,255)"&gt;&lt;strong&gt;="onColumnDropped"&lt;/strong&gt;&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AlternatingRowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="AlternatingRowStyle"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;RowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="RowStyle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;HeaderStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="HeaderStyle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Columns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Company"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Company"/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Contact"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ContactName"/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Title"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ContactTitle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Columns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;In the new declaration, I have added two new client side events, the control will fire the &lt;font face="Courier New"&gt;onColumnsLoaded&lt;/font&gt; function when the grid completes the column loading from the asp.net profile and it will also fire the &lt;font face="Courier New"&gt;onColumnsDropped&lt;/font&gt; function when a column is dropped. And the following shows the modified code for the client side:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;script&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="text/javascript"&amp;gt;

&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; _gridView;

    &lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; pageLoad(sender, e)
    {
        _gridView = $find(&lt;span style="color: rgb(163,21,21)"&gt;'&amp;lt;%= GridView1.ClientID %&amp;gt;'&lt;/span&gt;);
        _gridView.loadColumnsFromProfile(&lt;span style="color: rgb(163,21,21)"&gt;'DndColumns'&lt;/span&gt;);
    }

    &lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onColumnsLoaded(sender, e)
    {
        loadSuppliers();
    }

    &lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; loadSuppliers()
    {
        DataService.GetAllSupplier(onLoadSuccess);
    }

    &lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onLoadSuccess(result)
    {
        _gridView.set_dataSource(result);
        _gridView.dataBind();
    }

    &lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onColumnDropped(sender, e)
    {
        _gridView.saveColumnsToProfile(&lt;span style="color: rgb(163,21,21)"&gt;'DndColumns'&lt;/span&gt;);
    }

&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;As you can see, here in the &lt;font face="Courier New"&gt;pageLoad&lt;/font&gt; event (which automatically fired by the Asp.net Ajax Framework) we are instructing the GridView to load the columns from the previously configured Profile property &lt;font face="Courier New"&gt;DndColumns&lt;/font&gt;. Once the columns are loaded, the GridView fires the &lt;font face="Courier New"&gt;onColumnLoaded&lt;/font&gt; function where we are loading the suppliers and when a column is dropped the onColumDropped function gets executed where we are storing the newly ordered columns in the Profile. Now when you refresh the page or re visit the page you will find it persisted.&lt;/p&gt;
&lt;p&gt;You will find the full working demo in the Sample folder of the &lt;a href="http://www.codeplex.com/AjaxDataControls/Release/ProjectReleases.aspx" target="_blank" rel="nofollow"&gt;CodePlex Release tab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2008%2f01%2f14%2fajaxdatacontrols-gridview-part-two.aspx" target="_blank"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2008%2f01%2f14%2fajaxdatacontrols-gridview-part-two.aspx" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5601753" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/216370705" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://weblogs.asp.net/rashid/archive/tags/AjaxDataControls/default.aspx">AjaxDataControls</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F01%2F14%2Fajaxdatacontrols-gridview-part-two.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/01/14/ajaxdatacontrols-gridview-part-two.aspx</feedburner:origLink></item><item><title>Ajax Control Toolkit - Multi-part Series Article</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/216276123/ajax-control-toolkit-multi-part-series-article.aspx</link><pubDate>Mon, 14 Jan 2008 06:46:53 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5601169</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5601169</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5601169</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/01/14/ajax-control-toolkit-multi-part-series-article.aspx#comments</comments><description>&lt;p&gt;I have recently started writing a &lt;a href="http://dotnetslackers.com/articles/columns/ajax/AjaxControlToolkitPartOne.aspx" target="_blank"&gt;multi-part series article on AJAX Control Toolkit&lt;/a&gt;. Throughout the series I will cover the following items:&lt;/p&gt;&lt;strong&gt;Explore&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;Input Helpers - FilteredTextBox and NumericUpDown.  &lt;li&gt;Input Helpers - MaskEdit and Slider.  &lt;li&gt;Input Helpers - CascadingDropDown and Calendar.  &lt;li&gt;Input Helpers - ToggleButton, Rating and ValidatorCallout.  &lt;li&gt;Containers - Dynamic Populate and CollapsiblePanel.  &lt;li&gt;Containers -Tabs.  &lt;li&gt;Containers - Accordion.  &lt;li&gt;Popups - Popup, DropDown and ModalPopup.  &lt;li&gt;Others- NotBot and PasswordStrength.  &lt;li&gt;Others- ToolkitScriptManager. &lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;Architecture&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;Core Framework  &lt;li&gt;Animation Framework &lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;Build&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;Demonstrate how to develop a first class control on top of Ajax Control Toolkit. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://dotnetslackers.com/articles/columns/ajax/AjaxControlToolkitPartOne.aspx" target="_blank"&gt;The introductory part&lt;/a&gt; explores a few basic input helpers.&lt;/p&gt; &lt;p&gt;I would love to see your comments and feedbacks.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fdotnetslackers.com%2farticles%2fcolumns%2fajax%2fAjaxControlToolkitPartOne.aspx" target="_blank"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fdotnetslackers.com%2farticles%2fcolumns%2fajax%2fAjaxControlToolkitPartOne.aspx" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5601169" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/216276123" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Articles/default.aspx">Articles</category><category domain="http://weblogs.asp.net/rashid/archive/tags/Ajax/default.aspx">Ajax</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F01%2F14%2Fajax-control-toolkit-multi-part-series-article.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/01/14/ajax-control-toolkit-multi-part-series-article.aspx</feedburner:origLink></item><item><title>MVP Award and My Last Year Contribution to .NET Community</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/210209610/mvp-award-and-my-last-year-contribution-to-net-community.aspx</link><pubDate>Thu, 03 Jan 2008 01:32:18 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5539013</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5539013</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5539013</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/01/03/mvp-award-and-my-last-year-contribution-to-net-community.aspx#comments</comments><description>&lt;p&gt;A short summary for them who are wondering about my MVP award and my contributions to the .NET Community:&lt;/p&gt; &lt;p&gt;Open Source Projects:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/AjaxDataControls" target="_blank" rel="nofollow"&gt;Asp.net Ajax Data Controls&lt;/a&gt;&amp;nbsp; - &lt;em&gt;Super Hit!!!&lt;/em&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/AjaxExceptionLogging" target="_blank" rel="nofollow"&gt;Asp.net Ajax Exception Logging&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Articles:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://dotnetslackers.com/articles/ajax/ASPNETAjaxGridAndPager.aspx" target="_blank" rel="nofollow"&gt;Asp.net Ajax Grid and Pager&lt;/a&gt;  &lt;li&gt;&lt;a href="http://dotnetslackers.com/articles/ajax/ASPNETAJAXControlDevelopment.aspx" target="_blank" rel="nofollow"&gt;Asp.net Ajax Control Development&lt;/a&gt;  &lt;li&gt;&lt;a href="http://dotnetslackers.com/articles/ajax/ASPNETRepeater.aspx" target="_blank" rel="nofollow"&gt;Asp.net Ajax Repeater&lt;/a&gt;  &lt;li&gt;&lt;a href="http://dotnetslackers.com/columns/ajax/AspNetAjaxExceptionLogging.aspx" target="_blank" rel="nofollow"&gt;Asp.net Ajax Exception Logging&lt;/a&gt;  &lt;li&gt;&lt;a href="http://dotnetslackers.com/columns/ajax/ASPNETAjaxWebService.aspx" target="_blank" rel="nofollow"&gt;Asp.net Ajax Web Service- Common Issues&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Book Reviews:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://www.amazon.com/ASP-NET-AJAX-Action-Alessandro-Gallo/dp/1933988142" target="_blank" rel="nofollow"&gt;Asp.net AJAX in Action&lt;/a&gt;  &lt;li&gt;&lt;a href="http://dotnetslackers.com/articles/ajax/BookReviewAspNetAjaxUpdatePanelControl.aspx" target="_blank" rel="nofollow"&gt;Asp.net AJAX Update Panel Control&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Blog Posts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/01/13/103518.aspx" target="_blank" rel="nofollow"&gt;Cross Domain Iframe Resize&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/01/18/103875.aspx" target="_blank" rel="nofollow"&gt;Secure Url&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx" target="_blank" rel="nofollow"&gt;Secure Cookie&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/06/19/Utilize-ThreadPool-in-WebService.aspx" target="_blank" rel="nofollow"&gt;Utilize ThreadPool in WebService&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/06/21/Performance-Benchmark-with-an-Handy-Class.aspx" target="_blank" rel="nofollow"&gt;Performance Benchmark with an Handy Class&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/06/30/Check-User-Name-in-Ajax-way.aspx" target="_blank" rel="nofollow"&gt;Check User Name in Ajax way&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/07/04/SJAX-Call.aspx" target="_blank" rel="nofollow"&gt;SJAX Call&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/07/14/Cancel-a-Web-Service-Call-in-Asp.net-Ajax.aspx" rel="nofollow"&gt;Cancel a Web Service Call in Asp.net Ajax&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/07/21/Asp.net-Ajax-and-VS2003.aspx" target="_blank" rel="nofollow"&gt;Asp.net Ajax and VS2003&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/07/25/Combine-Multiple-JavaScript-and-CSS-Files-and-Remove-Overheads.aspx" target="_blank" rel="nofollow"&gt;Combine Multiple JavaScript and CSS Files and Remove Overheads&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/07/29/Implement-Yahoos-YSlow-in-your-Asp.net-pages.aspx" target="_blank" rel="nofollow"&gt;Implement Yahoo's YSlow in your Asp.net pages&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/08/01/Create-An-Ajax-Style-File-Upload.aspx" target="_blank" rel="nofollow"&gt;Create An Ajax Style File Upload&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/08/08/Asp.net-Ajax-UpdatePanel-Simultaneous-Update---A-Remedy.aspx" target="_blank" rel="nofollow"&gt;Asp.net Ajax UpdatePanel Simultaneous Update - A Remedy&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/08/24/Showing-Modal-Progress-Dialog-in-all-Ajax-Operation.aspx" target="_blank" rel="nofollow"&gt;Loading UserControl Dynamically in UpdatePanel&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/08/24/Showing-Modal-Progress-Dialog-in-all-Ajax-Operation.aspx" target="_blank" rel="nofollow"&gt;Showing Modal Progress Dialog in all Ajax Operation&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/09/05/Asp.net-ListView---Too-much-CSS-Friendly.aspx" target="_blank" rel="nofollow"&gt;Asp.net ListView - Too much CSS Friendly&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/09/09/Asp.net-ListView---DataBinding.aspx" target="_blank" rel="nofollow"&gt;Asp.net ListView - DataBinding&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/09/13/Asp.net-List---Data-Editing.aspx" target="_blank" rel="nofollow"&gt;Asp.net ListView - Data Editing&lt;/a&gt;  &lt;li&gt;&lt;a href="http://geekswithblogs.net/rashid/archive/2007/09/15/Compress-Asp.net-Ajax-Web-Service-Response---Save-Bandwidth.aspx" target="_blank" rel="nofollow"&gt;Compress Asp.net Ajax Web Service Response - Save Bandwidth&lt;/a&gt;  &lt;li&gt;&lt;a href="http://weblogs.asp.net/rashid/archive/2007/09/19/new-project-asp-net-ajax-exception-logging.aspx" target="_blank" rel="nofollow"&gt;New Project - Asp.net Ajax Exception Logging&lt;/a&gt;  &lt;li&gt;&lt;a href="http://weblogs.asp.net/rashid/archive/2007/09/20/asp-net-ajax-web-service-security.aspx" target="_blank" rel="nofollow"&gt;Asp.net Ajax Web Service Security&lt;/a&gt;  &lt;li&gt;&lt;a href="http://weblogs.asp.net/rashid/archive/2007/09/21/asynchronous-asp-net-page.aspx" target="_blank" rel="nofollow"&gt;Asynchronous Asp.net Page ( Do not Follow it ever)&lt;/a&gt;  &lt;li&gt;&lt;a href="http://weblogs.asp.net/rashid/archive/2007/09/28/implement-jsonp-in-your-asp-net-application.aspx" target="_blank" rel="nofollow"&gt;Implement JSONP in your Asp.net Application&lt;/a&gt;  &lt;li&gt;&lt;a href="http://weblogs.asp.net/rashid/archive/2007/10/26/ajaxdatacontrols-beta-released.aspx" target="_blank" rel="nofollow"&gt;AjaxDataControls - Beta Released&lt;/a&gt;  &lt;li&gt;&lt;a href="http://weblogs.asp.net/rashid/archive/2007/12/03/ajaxdatacontrols-gridview-part-one.aspx" target="_blank" rel="nofollow"&gt;AjaxDataControls GridView Part One&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Forums:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://forums.asp.net/default.aspx?GroupID=34" target="_blank" rel="nofollow"&gt;Asp.net Ajax Forum&lt;/a&gt; : Solved around 200 issues.  &lt;div style="padding-bottom: 4px; padding-top: 4px"&gt;&lt;a href="http://forums.asp.net/34/0/TopAnswerers.aspx" target="_blank" rel="nofollow"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://weblogs.asp.net/blogs/rashid/MVP/AjaxForum2007.png"&gt;&lt;/a&gt; &lt;/div&gt; &lt;li&gt;&lt;a href="http://dotnetslackers.com/community/forums/" target="_blank" rel="nofollow"&gt;DotNetSlackers forum&lt;/a&gt; : &lt;a href="http://dotnetslackers.com/community/members/kazimanzurrashid.aspx" target="_blank" rel="nofollow"&gt;Active member&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt; If you are from Bangladesh, India and I think also from Nepal and want to become MVP. I would suggest:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Do some massive community work both online and offline like writing books or may be articles, participating in forums, newsgroup, blogging, creating few open source projects etc whatever that really helps the community.&lt;/li&gt; &lt;li&gt;Both Microsoft Employees and existing MVPs can nominate you. If your think your contribution is extraordinary and if you know any of them, you can ask to nominate you. Or&lt;/li&gt; &lt;li&gt;You can &lt;a href="http://www.microsoft.com/india/mvp/nominations.aspx" target="_blank" rel="nofollow"&gt;download a nomination form for South Asia region&lt;/a&gt; and nominate yourself.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;The MVP award is announced every quarter and is based on previous year's contribution. If your name is not announced, wait for the next quarter and increase your community activity and apply again. The bottom line is you are helping the community with your exemplary contribution thus making the people life successful.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5539013" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/210209610" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/General/default.aspx">General</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F01%2F03%2Fmvp-award-and-my-last-year-contribution-to-net-community.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/01/03/mvp-award-and-my-last-year-contribution-to-net-community.aspx</feedburner:origLink></item><item><title>MVP Awarded</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/209511648/mvp-awarded.aspx</link><pubDate>Tue, 01 Jan 2008 18:45:53 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5531589</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>27</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5531589</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5531589</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2008/01/02/mvp-awarded.aspx#comments</comments><description>&lt;p&gt;I am proud to announce that I have been awarded as MVP in Visual Asp/Asp.net for 2008.&lt;/p&gt; &lt;blockquote&gt;&lt;em&gt;"Dear Kazi Rashid, Congratulations! We are pleased to present you with the 2008 Microsoft® MVP Award! The MVP Award is our way of saying thank you for promoting the spirit of community and enhancing people’s lives and the industry’s success every day. Your extraordinary efforts in Visual Developer - ASP/ASP.NET technical communities during the past year are greatly appreciated. "&lt;/em&gt;&lt;/blockquote&gt; &lt;p&gt;Since it is my first award, I am very much excited and hoping my contribution to the community will continue like this.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5531589" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/209511648" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/General/default.aspx">General</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2008%2F01%2F02%2Fmvp-awarded.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2008/01/02/mvp-awarded.aspx</feedburner:origLink></item><item><title>AjaxDataControls GridView Part One</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/194229000/ajaxdatacontrols-gridview-part-one.aspx</link><pubDate>Mon, 03 Dec 2007 06:53:35 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5395628</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>9</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5395628</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5395628</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2007/12/03/ajaxdatacontrols-gridview-part-one.aspx#comments</comments><description>&lt;p&gt;The GridView seems to be the most popular among the other controls of &lt;a href="http://www.codeplex.com/AjaxDataControls" target="_blank" rel="nofollow"&gt;AjaxDataControls&lt;/a&gt;. In this post, I will give you a quick walk through on some of the basic features of GridView.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;DataBinding&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;As mention &lt;a href="http://geekswithblogs.net/rashid/archive/2007/06/15/My-New-Project-AjaxDataControls.aspx" target="_blank"&gt;in the past&lt;/a&gt; the purpose of these controls is to enrich the Client Centric Development Model of Asp.net Ajax and thus it depends upon the Web Service or Page Method calls of Asp.net Ajax. The following shows the code which is used to show the Supplier Table of Northwind database.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ID&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="GridView1"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;runat&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="server"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="DataWebControlStyle"&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AlternatingRowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="AlternatingRowStyle"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;RowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="RowStyle"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;HeaderStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="HeaderStyle"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;

&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;script&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="text/javascript"&amp;gt;

&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; pageLoad(sender, e)
    {
        DataService.GetAllSupplier(onLoadSuccess);
    }

    &lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onLoadSuccess(result)
    {
        &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; gridView = $find(&lt;span style="color: rgb(163,21,21)"&gt;'&amp;lt;%= GridView1.ClientID %&amp;gt;'&lt;/span&gt;);

        gridView.set_dataSource(result);
        gridView.dataBind();
    }

&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;And the result is following:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://weblogs.asp.net/blogs/rashid/ADC/GridView-Basic.png"&gt;&lt;/p&gt;
&lt;p&gt;What we are doing is very simple, we are calling a Web Service method to get the supplier list. The web method opens a sql connection and returns a supplier entity collection which we are binding with the GridView in the &lt;font face="Courier New"&gt;successCallback&lt;/font&gt; handler of the web service call. You can also bind to DataSet/DataTable but in that case you have bind the &lt;font face="Courier New"&gt;rows&lt;/font&gt; collection instead of the DataTable/DataSet itself in the &lt;font face="Courier New"&gt;successCallback&lt;/font&gt;. The following shows code which can be used to bind a DataTable with this control:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onLoadSuccess(result)
{
    &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; gridView = $find(&lt;span style="color: rgb(163,21,21)"&gt;'&amp;lt;%= GridView1.ClientID %&amp;gt;'&lt;/span&gt;);

    gridView.set_dataSource(&lt;strong&gt;result.rows&lt;/strong&gt;);
    gridView.dataBind();
}&lt;/pre&gt;
&lt;p&gt;For styling we are also using the HeaderStyle, RowStyle, AlternatingRowStyle like the original GridView. Note that we did not mention any column in the GridView declaration but it is capable to discover the column list from its data source, this same as original GridView &lt;font face="Courier New"&gt;AutoGenerateColumns&lt;/font&gt; property to &lt;font face="Courier New"&gt;true&lt;/font&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Predefined Columns&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Certainly we do not want to show all the columns that are in DataSource and we might want to change the header text and order of the columns. In that case, we have declare the columns in the GridView like the following:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ID&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="GridView1"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;runat&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="server"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="DataWebControlStyle"&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AlternatingRowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="AlternatingRowStyle"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;RowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="RowStyle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;HeaderStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="HeaderStyle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Columns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Company"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Company"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Contact"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ContactName"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Title"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ContactTitle"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Columns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;The same rule applies like the original GridView control that is you have to set the &lt;font face="Courier New"&gt;DataField&lt;/font&gt; name of the columns.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Different Type of Columns&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Currently the GridView has all the built-in columns that are available in original GridView and it has a very extensible API to roll your new column which I will show iin future post. The following shows few of those columns to show the above supplier table:&lt;br&gt;&lt;/p&gt;&lt;img alt="" src="http://weblogs.asp.net/blogs/rashid/ADC/GridView-DifferentColumns.png"&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ID&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="GridView1"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;runat&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="server"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="DataWebControlStyle"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataKeyName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ID"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SelectedIndexChangedEvent&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="onSelectedIndexChanged"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;RowCommandEvent&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="onRowCommand"&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AlternatingRowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="AlternatingRowStyle"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;RowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="RowStyle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;HeaderStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="HeaderStyle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;SelectedRowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="SelectedRowStyle"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Columns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewCommandColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ShowSelectButton&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="true"/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewRadioButtonColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;GroupName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Active"/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewCheckBoxColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Active"/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewButtonColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CommandName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ShowInfo"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Company"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataTextField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Company"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Contact"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ContactName"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Title"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ContactTitle"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewHyperLinkColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="City"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataTextField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="City"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataNavigateUrlFields&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="City"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;Target&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="_blank"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataNavigateUrlFormatString&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Related.aspx?City={0}"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Columns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; pageLoad(sender, e)
{
    DataService.GetAllSupplier(onLoadSuccess);
}

&lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onLoadSuccess(result)
{
    &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; gridView = $find(&lt;span style="color: rgb(163,21,21)"&gt;'&amp;lt;%= GridView1.ClientID %&amp;gt;'&lt;/span&gt;);

    gridView.set_dataSource(result);
    gridView.dataBind();
}

&lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onSelectedIndexChanged(sender, e)
{
    writeMessage(String.format(&lt;span style="color: rgb(163,21,21)"&gt;'Selected value {0}&amp;lt;br/&amp;gt;'&lt;/span&gt;, sender.get_selectedValue()));
}

&lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onRowCommand(sender, e)
{
    &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (e.get_commandName() == &lt;span style="color: rgb(163,21,21)"&gt;'ShowInfo'&lt;/span&gt;)
    {
        writeMessage(String.format(&lt;span style="color: rgb(163,21,21)"&gt;'Command Arument {0}&amp;lt;br/&amp;gt;'&lt;/span&gt;, e.get_commandArgument()));
    }
}

&lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; writeMessage(message)
{
    $get(&lt;span style="color: rgb(163,21,21)"&gt;'divEvents'&lt;/span&gt;).innerHTML += message;
}&lt;/pre&gt;
&lt;p&gt;As you can see you can also use the &lt;font face="Courier New"&gt;selectedIndexChange&lt;/font&gt; and &lt;font face="Courier New"&gt;rowCommandEvent&lt;/font&gt; as the original GridView.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data Sorting&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The GridView also has the support to indicate by which column the Grid is Currently Sorted. The GridView does not sort the data in the Client Side like any other JS Widgets, instead it depends upon the server side to sort this data. The following shows the client side code:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ID&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="GridView1"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;runat&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="server"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="DataWebControlStyle"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataKeyName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="ID"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortColumn&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Name"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortOrderAscendingImageUrl&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="~/Images/up.gif"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortOrderDescendingImageUrl&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="~/Images/dn.gif"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortCommandEvent&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="onSortCommand"&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AlternatingRowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="AlternatingRowStyle"&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;RowStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="RowStyle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;HeaderStyle&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;CssClass&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="HeaderStyle"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Columns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Product"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Name"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Name"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-Wrap&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="false"/&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Category"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="CategoryName"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="CategoryName"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-Wrap&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="false"/&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Supplier"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="SupplierName"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="SupplierName"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-Wrap&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="false"/&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Quantity/Unit"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="QuantityPerUnit"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="QuantityPerUnit"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="left"/&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Unit Price"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="UnitPrice"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="UnitPrice"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataFormatString&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="c"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Right"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-Wrap&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="false"/&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Units In Stock"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="UnitsInStock"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="UnitsInStock"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Right"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-Wrap&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="false"/&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewBoundColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Units On Order"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="UnitsOnOrder"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="UnitsOnOrder"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Right"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-Wrap&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="false"/&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridViewCheckBoxColumn&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderText&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Discontinued"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;DataField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Discontinued"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;SortField&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Discontinued"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Left"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;ItemStyle-HorizontalAlign&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="Center"&lt;/span&gt; &lt;span style="color: rgb(255,0,0)"&gt;HeaderStyle-Wrap&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;="false"/&amp;gt;
&lt;/span&gt;   &lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Columns&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;AjaxData&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;GridView&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; _gridView;

&lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; pageLoad(sender, e)
{
    _gridView = $find(&lt;span style="color: rgb(163,21,21)"&gt;'&amp;lt;%= GridView1.ClientID %&amp;gt;'&lt;/span&gt;);
    loadProducts();
}

&lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; loadProducts()
{
    &lt;span style="color: rgb(0,128,0)"&gt;//Need to convert the sortoder so our WS understand
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; sortColumn = _gridView.get_sortColumn();
    &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; sortOrder = (_gridView.get_sortOrder() == AjaxDataControls.GridViewSortOrder.Descending) ? &lt;span style="color: rgb(163,21,21)"&gt;'DESC'&lt;/span&gt; : &lt;span style="color: rgb(163,21,21)"&gt;'ASC'&lt;/span&gt;;

    DataService.GetProductList(0, 1000, sortColumn, sortOrder, onLoadSuccess);
}

&lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onLoadSuccess(result)
{
    _gridView.set_dataSource(result.Rows);
    _gridView.dataBind();
}

&lt;span style="color: rgb(0,0,255)"&gt;function&lt;/span&gt; onSortCommand(sender, e)
{
    _gridView.set_sortColumn(e.get_sortColumn())
    _gridView.set_sortOrder(e.get_sortOrder());
    loadProducts();
}&lt;/pre&gt;
&lt;p&gt;As you can see now each column has an associated property &lt;font face="Courier New"&gt;SortField,&lt;/font&gt; you can mention the name of the field in this property which you want the Grid to be sorted and it can differ from the D&lt;font face="Courier New"&gt;ataField&lt;/font&gt; property. If the &lt;font face="Courier New"&gt;SortField&lt;/font&gt; is set then column header becomes Hyperlinked otherwise it appears in simple text. We are also mentioning the initial sort field and Up/Down images in the GridView. Then in the code we are getting the currently sorted column name and its order and calling the web service with these sort criteria and in the &lt;font face="Courier New"&gt;SortCommand&lt;/font&gt; event we are simply setting the grid &lt;font face="Courier New"&gt;SortColumn&lt;/font&gt; and the &lt;font face="Courier New"&gt;SortOrder&lt;/font&gt;. The Web Service method is slightly different in this case, now it accepts &lt;font face="Courier New"&gt;startIndex&lt;/font&gt; where we are passing 0, &lt;font face="Courier New"&gt;maxRow&lt;/font&gt; where we are passing 1000 just to ensure that all the Product of the Northwind table is returned, the name of the sort column and the order.&amp;nbsp; The result is following:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://weblogs.asp.net/blogs/rashid/ADC/GridView-Sort.png"&gt;&lt;/p&gt;
&lt;p&gt;That is it for the day. In the next post we will see the Drag and Drop of the Columns as well as Data Paging. You can check the live examples of the above in the following links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dotnetslackers.com/projects/AjaxDataControls/GridView/Basic.aspx" target="_blank" rel="nofollow"&gt;Basic Data Binding&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://dotnetslackers.com/projects/AjaxDataControls/GridView/PredefinedColumns.aspx" target="_blank" rel="nofollow"&gt;Predefined Columns&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://dotnetslackers.com/projects/AjaxDataControls/GridView/DifferentColumns.aspx" target="_blank" rel="nofollow"&gt;Different Columns&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://dotnetslackers.com/projects/AjaxDataControls/GridView/Sorting.aspx" target="_blank" rel="nofollow"&gt;Data Sorting&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;You can also download the source of this project and the samples from the Source Code tab of &lt;a href="http://www.codeplex.com/AjaxDataControls/SourceControl/ListDownloadableCommits.aspx" target="_blank" rel="nofollow"&gt;CodePlex&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2007%2f12%2f03%2fajaxdatacontrols-gridview-part-one.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fweblogs.asp.net%2frashid%2farchive%2f2007%2f12%2f03%2fajaxdatacontrols-gridview-part-one.aspx" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5395628" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/194229000" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://weblogs.asp.net/rashid/archive/tags/AjaxDataControls/default.aspx">AjaxDataControls</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2007%2F12%2F03%2Fajaxdatacontrols-gridview-part-one.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2007/12/03/ajaxdatacontrols-gridview-part-one.aspx</feedburner:origLink></item><item><title>AjaxDataControls API Changes</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/192562038/ajaxdatacontrols-api-changes.aspx</link><pubDate>Thu, 29 Nov 2007 20:19:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5375582</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5375582</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5375582</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2007/11/30/ajaxdatacontrols-api-changes.aspx#comments</comments><description>&lt;P&gt;We are very close in launching our v1.0 of &lt;A href="http://www.codeplex.com/AjaxDataControls" target=_blank mce_href="http://www.codeplex.com/AjaxDataControls"&gt;AjaxDataControls&lt;/A&gt; and there are a lot enhancement and change has been made &lt;A href="http://weblogs.asp.net/rashid/archive/2007/10/26/ajaxdatacontrols-beta-released.aspx" target=_blank mce_href="http://weblogs.asp.net/rashid/archive/2007/10/26/ajaxdatacontrols-beta-released.aspx"&gt;since the beta&lt;/A&gt;. Here are some of the important: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Overall:&lt;BR&gt;&lt;/STRONG&gt;1. Namespace changed from Ajax.Data.Controls to AjaxDataControls (Otherwise it was conflicting with other popular JS library like&amp;nbsp;script.aculo.us)&lt;BR&gt;2. Fadein Animation added when data is binded to datasource (Requires PreviewScript.js &amp;amp; PreviewGlitz.js).&lt;BR&gt;3. Drag and Drop now uses the Ajax Framework DragDropManager (Requires PreviewScript.js &amp;amp; PreviewDragDrop.js).&lt;BR&gt;3. Code is now Xml Commented. 
&lt;P&gt;&lt;STRONG&gt;DataList:&lt;/STRONG&gt;&lt;BR&gt;1. Drag and Drop is implemented between the items (except the Edit item). 
&lt;P&gt;&lt;STRONG&gt;GridView:&lt;/STRONG&gt;&lt;BR&gt;1. Drag and Drop Column Orders can be stored in Asp.net Profile by calling loadColumnsFromProfile and saveColumnsToProfile. It requires the Ajax ProfileService is configured prior calling these methods.&lt;BR&gt;2. ColumnID prperty added to column to uniquely identify it when loading and saving in profile.&lt;BR&gt;3. Now each column type has separate JS file to reduce the file size of the gridview. Now it only loads the required column files.&lt;BR&gt;4. Designer Added.&lt;BR&gt;5. No need to call the dataBind after resetting the editIndex. 
&lt;P&gt;&lt;STRONG&gt;Pager:&lt;/STRONG&gt;&lt;BR&gt;1. RowPerPage - &amp;gt;PageSize&lt;BR&gt;2. CurrentPage -&amp;gt;PageIndex&lt;BR&gt;3. PageChange -&amp;gt;PageChanged&lt;BR&gt;4. FirstPageText -&amp;gt; FirstText&lt;BR&gt;5. PreviousPageText -&amp;gt; PreviousText&lt;BR&gt;5. NextPageText -&amp;gt; NextText&lt;BR&gt;6. LastPageText -&amp;gt; LastText&lt;BR&gt;7. ShowNumeric -&amp;gt; ShowNumber&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5375582" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/192562038" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://weblogs.asp.net/rashid/archive/tags/AjaxDataControls/default.aspx">AjaxDataControls</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2007%2F11%2F30%2Fajaxdatacontrols-api-changes.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2007/11/30/ajaxdatacontrols-api-changes.aspx</feedburner:origLink></item><item><title>Custom Linq Provider</title><link>http://feeds.feedburner.com/~r/manzurrashid/~3/182846092/custom-linq-provider.aspx</link><pubDate>Sat, 10 Nov 2007 22:05:47 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5015779</guid><dc:creator>kazimanzurrashid</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/rashid/rsscomments.aspx?PostID=5015779</wfw:commentRss><wfw:comment>http://weblogs.asp.net/rashid/commentapi.aspx?PostID=5015779</wfw:comment><comments>http://weblogs.asp.net/rashid/archive/2007/11/11/custom-linq-provider.aspx#comments</comments><description>&lt;p&gt;My ex-partner of crime &lt;a href="http://weblogs.asp.net/mehfuzh" target="_blank" rel="nofollow"&gt;Mehfuz&lt;/a&gt; recently wrote an excellent article on how to develop a custom Linq Provider. In this article he shows how to interact with the popular photo sharing site &lt;a href="http://www.flickr.com/" target="_blank" rel="nofollow"&gt;Flickr&lt;/a&gt; with a custom Linq provider. &lt;a href="http://dotnetslackers.com/articles/csharp/LINQProviderBasics.aspx" target="_blank"&gt;Check it out&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5015779" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/manzurrashid/~4/182846092" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/rashid/archive/tags/C_2300_/default.aspx">C#</category><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=manzurrashid&amp;itemurl=http%3A%2F%2Fweblogs.asp.net%2Frashid%2Farchive%2F2007%2F11%2F11%2Fcustom-linq-provider.aspx</feedburner:awareness><feedburner:origLink>http://weblogs.asp.net/rashid/archive/2007/11/11/custom-linq-provider.aspx</feedburner:origLink></item><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetFeedData?uri=manzurrashid</feedburner:awareness></channel></rss>
