<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://aspxwizard.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Mina Labib</title><link>http://aspxwizard.net/blogs/minalabib/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>ASP.NET MVC handle exceptions</title><link>http://aspxwizard.net/blogs/minalabib/archive/2010/02/23/asp_2D00_net_2D00_mvc_2D00_handle_2D00_exceptions.aspx</link><pubDate>Wed, 24 Feb 2010 13:09:18 GMT</pubDate><guid isPermaLink="false">318922e2-3002-4869-8654-4cebdb510d6f:38561</guid><dc:creator>minalabib</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://aspxwizard.net/blogs/minalabib/rsscomments.aspx?PostID=38561</wfw:commentRss><comments>http://aspxwizard.net/blogs/minalabib/archive/2010/02/23/asp_2D00_net_2D00_mvc_2D00_handle_2D00_exceptions.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;&lt;font color="#008000"&gt;/* You can also find more posts on my &lt;/font&gt;&lt;/em&gt;&lt;a title="Mina Labib technical blog" href="http://minalabib.wordpress.com/" target="_blank"&gt;&lt;em&gt;&lt;font color="#008000"&gt;technical blog&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font color="#008000"&gt;, and follow me at twitter &lt;/font&gt;&lt;/em&gt;&lt;a title="mina labib @ twitter" href="http://twitter.com/minalabib" target="_blank"&gt;&lt;em&gt;&lt;font color="#008000"&gt;@minalabib&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;font color="#008000"&gt; */&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;ASP.NET MVC has a cool and neat way to catch and handle exceptions, I will show here a quick review for handling exceptions in MVC framework and I will present small addition I added too.&lt;/p&gt;  &lt;p&gt;The main idea here is all processes and work flow should go through a &lt;a title="MSDN - ASP.NET MVC Controller" href="http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.aspx" target="_blank"&gt;Controller&lt;/a&gt; and an Action method inside that controller, so if any exception or error happened in any step of the work flow (DAl, BL, action, model, server side validation, etc … ) it should end up at the Controller/Action level, ASP.NET MVC provide a nice technique with &lt;a title="MSDN - APS.NET MVC OnException" href="http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onexception.aspx" target="_blank"&gt;OnException&lt;/a&gt; even handler which can be overridden in your controller, and thus all exception that is bubbled up to the action will be caught and handled in this method.&lt;/p&gt;  &lt;p&gt;Ok, enough talk let’s code, I have a base controller that all my controllers inherit from and I believe it good practice:&lt;/p&gt; &lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ApplicationControllerBase &lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;Controller&lt;/span&gt;   &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;and inside that base controller I override the OnException event handler&lt;/p&gt;  &lt;p&gt;&lt;span style="color:blue;"&gt;protected override void &lt;/span&gt;OnException(&lt;span style="color:#2b91af;"&gt;ExceptionContext &lt;/span&gt;filterContext)     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;base&lt;/span&gt;.OnException(filterContext);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// TODO: Handle exception      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Log in file or database for example       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ArrayList &lt;/span&gt;TempArrayList = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ArrayList&lt;/span&gt;();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TempArrayList.AddRange(&lt;span style="color:#2b91af;"&gt;ConfigurationSettings&lt;/span&gt;.AppSettings[&lt;span style="color:#a31515;"&gt;&amp;quot;ToBeViewed&amp;quot;&lt;/span&gt;].Split(&lt;span style="color:#a31515;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// to pass a toggle that tells      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // the view to show the exception message or not.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;if &lt;/span&gt;(TempArrayList.Contains(filterContext.Exception.GetType().Name))     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; filterContext.Exception.Data.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;IsViewable&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;true&lt;/span&gt;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;filterContext.Exception.Data.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;IsViewable&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;false&lt;/span&gt;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// to tell .NET framework the exception is      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:green;"&gt;// handled and does not show yellow exception page.      &lt;br /&gt;&lt;/span&gt;&amp;#160;&amp;#160; filterContext.ExceptionHandled = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// to direct to the error view,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // passing the exception as a model.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.View(&lt;span style="color:#a31515;"&gt;&amp;quot;Error&amp;quot;&lt;/span&gt;, filterContext.Exception).ExecuteResult(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.ControllerContext);     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;In the method we should handle exception according to our needs (log the exception for example), and then tells the framework that the exception is handled and not to show the ugly yellow exception page of .NET by using (filterContext.ExceptionHandled = &lt;span style="color:blue;"&gt;true&lt;/span&gt;; ).&lt;/p&gt;  &lt;p&gt;Also I built a comma separated list of exception names in the web.config file, and if the caught exception is one of these specified exceptions, system will send a flag to the error page to show the exception message or not.&lt;/p&gt;  &lt;p&gt;And then the context will redirect to the error view (by default in MVC this page is generated Views/Shared/Error.aspx), I edited this view to accept System.Exception as model and view the error message according to toggle preset in the exception object:&lt;/p&gt;  &lt;p&gt;&lt;span style="background:#ffee62;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;@&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Page&lt;/span&gt;&lt;span style="color:red;"&gt;Language&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;C#&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;MasterPageFile&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;~/Views/Shared/Site.Master&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;Inherits&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;System.Web.Mvc.ViewPage&lt;strong&gt;&lt;u&gt;&amp;lt;System.Exception&amp;gt;&lt;/u&gt;&lt;/strong&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:#ffee62;"&gt;%&amp;gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Content&lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;errorTitle&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt;ContentPlaceHolderID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;TitleContent&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="background:#ffee62;"&gt;Error Page&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Content&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;      &lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Content&lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;errorContent&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt;ContentPlaceHolderID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;MainContent&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;h2&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; Sorry, an error occurred while processing your request.&lt;/span&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;h2&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="background:#ffee62;"&gt;&amp;lt;%&lt;/span&gt; if ((bool)Model.Data[&amp;quot;IsViewable&amp;quot;]){ &lt;span style="background:#ffee62;"&gt;%&amp;gt;      &lt;br /&gt;&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="background:#ffee62;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;Model.Message &lt;span style="background:#ffee62;"&gt;%&amp;gt;      &lt;br /&gt;&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="background:#ffee62;"&gt;&amp;lt;%&lt;/span&gt; } &lt;span style="background:#ffee62;"&gt;%&amp;gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Content&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; Thanks for this &lt;a title="ASP.NET MVC HandleError Attribute, Custom Error Pages and Logging Exceptions" href="http://blog.dantup.com/2009/04/aspnet-mvc-handleerror-attribute-custom.html" target="_blank"&gt;post&lt;/a&gt; for help in that.   &lt;img src="http://aspxwizard.net/aggbug.aspx?PostID=38561" width="1" height="1"&gt;</description><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/.net/default.aspx">.net</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/onexception/default.aspx">onexception</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/Exception/default.aspx">Exception</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/exception+hadling/default.aspx">exception hadling</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/aspnetmvc/default.aspx">aspnetmvc</category></item><item><title>Adding double quote in NAnt task</title><link>http://aspxwizard.net/blogs/minalabib/archive/2009/12/18/adding_2D00_double_2D00_quote_2D00_in_2D00_nant_2D00_task.aspx</link><pubDate>Fri, 18 Dec 2009 19:49:06 GMT</pubDate><guid isPermaLink="false">318922e2-3002-4869-8654-4cebdb510d6f:35241</guid><dc:creator>minalabib</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://aspxwizard.net/blogs/minalabib/rsscomments.aspx?PostID=35241</wfw:commentRss><comments>http://aspxwizard.net/blogs/minalabib/archive/2009/12/18/adding_2D00_double_2D00_quote_2D00_in_2D00_nant_2D00_task.aspx#comments</comments><description>&lt;p&gt;I was struggling this morning with issue in simple NAnt script, I was trying to uses &amp;lt;exec&amp;gt; task to call msbuild tool. &lt;/p&gt;  &lt;p&gt;Ok quick brief on the issue, &lt;a title="NAnt 0.86 Beta 1" href="http://nant.sourceforge.net/release/0.86-beta1/help/" target="_blank"&gt;NAnt 0.86 Beta 1&lt;/a&gt; does not able to run its &lt;a title="NAnt - &amp;lt;solution&amp;gt;" href="http://nant.sourceforge.net/release/0.86-beta1/help/tasks/solution.html" target="_blank"&gt;&amp;quot; href=&amp;quot;http://nant.sourceforge.net/release/0.86-beta1/help/tasks/solution.html&amp;quot; target=_blank&amp;gt;&amp;quot; href=&amp;quot;http://nant.sourceforge.net/release/0.86-beta1/help/tasks/solution.html&amp;quot; target=_blank&amp;gt;&amp;lt;solution&amp;gt;&lt;/a&gt; task to build Microsoft Visual Studio solutions against Visual Studio 2008 solution files, however it can build solution for .NET 3.5 Framework. so I found two solutions –till now-, both of them are using &lt;a title="MSBuild - MSDN" href="http://msdn.microsoft.com/en-us/library/wea2sca5.aspx" target="_blank"&gt;MSBuild&lt;/a&gt; tool to build my solution with two different ways; first one is to use &lt;a title="NAntConrib website" href="http://nantcontrib.sourceforge.net/" target="_blank"&gt;NAntContrib&lt;/a&gt; as extension for NAnt and use its &lt;a title="NAntContrib - &amp;lt;msbuild&amp;gt;" href="http://nantcontrib.sourceforge.net/release/0.85-rc4/help/tasks/msbuild.html" target="_blank"&gt;&amp;quot; href=&amp;quot;http://nantcontrib.sourceforge.net/release/0.85-rc4/help/tasks/msbuild.html&amp;quot; target=_blank&amp;gt;&amp;quot; href=&amp;quot;http://nantcontrib.sourceforge.net/release/0.85-rc4/help/tasks/msbuild.html&amp;quot; target=_blank&amp;gt;&amp;lt;msbuild&amp;gt;&lt;/a&gt; task to fire msbuild tool – I did not try that yet –, and the other one is to use NAnt &lt;a title="NAnt - &amp;lt;exec&amp;gt;" href="http://nant.sourceforge.net/release/latest/help/tasks/exec.html" target="_blank"&gt;&amp;quot; href=&amp;quot;http://nant.sourceforge.net/release/latest/help/tasks/exec.html&amp;quot; target=_blank&amp;gt;&amp;quot; href=&amp;quot;http://nant.sourceforge.net/release/latest/help/tasks/exec.html&amp;quot; target=_blank&amp;gt;&amp;lt;exec&amp;gt;&lt;/a&gt; task to call msbuild tool and throw to it my solution file as parameter; and while I am try that I found issue, I need to add /p:Platform=”Any CPU” as msbuild command switch but how to add double quote to task attributes, it fails if I wrote:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;exec &lt;/span&gt;&lt;span style="color:red;"&gt;program&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;${framework::get-framework-directory(framework::get-target-framework())}\msbuild.exe&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;commandline&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;mysolution.sln /p:Platform=”Any CPU”&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Fortunately, I found nice simple &lt;a title="Passing double/single quote in Nant task" href="http://jingyeluo.blogspot.com/2005/10/passing-doublesingle-quote-in-nant.html" target="_blank"&gt;post&lt;/a&gt; to solve this issue by adding property to NAnt script with double quote as value and use it in my command as following:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;property &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;dbl_quote&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;#39;&lt;span style="color:blue;"&gt;&amp;quot;&lt;/span&gt;&amp;#39;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;exec &lt;/span&gt;&lt;span style="color:red;"&gt;program&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;${framework::get-framework-directory(framework::get-target-framework())}\msbuild.exe&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;commandline&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;mysolution.sln /p:Platform=”${dbl_quote}Any CPU${dbl_quote}&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
It is nice and quick solution.

&lt;img src="http://aspxwizard.net/aggbug.aspx?PostID=35241" width="1" height="1"&gt;</description><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/vs2008/default.aspx">vs2008</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/NAnt/default.aspx">NAnt</category></item><item><title>ASP.NET MVC 2 RC</title><link>http://aspxwizard.net/blogs/minalabib/archive/2009/12/17/asp_2D00_net_2D00_mvc_2D00_2_2D00_rc.aspx</link><pubDate>Thu, 17 Dec 2009 16:23:22 GMT</pubDate><guid isPermaLink="false">318922e2-3002-4869-8654-4cebdb510d6f:35179</guid><dc:creator>minalabib</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://aspxwizard.net/blogs/minalabib/rsscomments.aspx?PostID=35179</wfw:commentRss><comments>http://aspxwizard.net/blogs/minalabib/archive/2009/12/17/asp_2D00_net_2D00_mvc_2D00_2_2D00_rc.aspx#comments</comments><description>&lt;p&gt;About month ago the Beta version was released, and now ASP.NET MVC team is announcing to day that ASP.NET MVC 2 RC is out there and that release candidate is ready to be &lt;a title="ASP.NET MVC  2 RC" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3b537c55-0948-4e6a-bf8c-aa1a78878da0&amp;amp;displaylang=en" target="_blank"&gt;downloaded&lt;/a&gt; and play around with.&lt;/p&gt;  &lt;p&gt;Mainly it is focused in bug fixing, improving current features, and performance tuning and you can as usual read the &lt;a title="ASP.NET MVC 2 RC release notes" href="http://go.microsoft.com/fwlink/?LinkID=157072" target="_blank"&gt;release notes&lt;/a&gt; for more details. Mainly the focus in Beta and RC releases are in the validation, validation localization, HTML.RenderAction and HTML.Action, you will find more details in this &lt;a title="Haacked blog" href="http://haacked.com/archive/2009/11/17/asp.net-mvc-2-beta-released.aspx" target="_blank"&gt;post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This version is for Visual Studio 2008 and should come in the RTM of Visual studio 2010 which should come out sometime in next March.&lt;/p&gt;&lt;img src="http://aspxwizard.net/aggbug.aspx?PostID=35179" width="1" height="1"&gt;</description><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/.net/default.aspx">.net</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Steps to enable NAnt intellisense in Visual Studio</title><link>http://aspxwizard.net/blogs/minalabib/archive/2009/12/16/steps_2D00_to_2D00_enable_2D00_nant_2D00_intellisense_2D00_in_2D00_visual_2D00_studio.aspx</link><pubDate>Wed, 16 Dec 2009 17:26:48 GMT</pubDate><guid isPermaLink="false">318922e2-3002-4869-8654-4cebdb510d6f:35140</guid><dc:creator>minalabib</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://aspxwizard.net/blogs/minalabib/rsscomments.aspx?PostID=35140</wfw:commentRss><comments>http://aspxwizard.net/blogs/minalabib/archive/2009/12/16/steps_2D00_to_2D00_enable_2D00_nant_2D00_intellisense_2D00_in_2D00_visual_2D00_studio.aspx#comments</comments><description>&lt;p&gt;NAnt is helpful, open source, and free tool for automated .NET-build process, same as Ant but it is targeting .NET frameworks rather than Java, and according to &lt;a title="Wikipedia - NAnt" href="http://en.wikipedia.org/wiki/NAnt" target="_blank"&gt;Wikipedia&lt;/a&gt; the name NAnt is coming from Not Ant :)&lt;/p&gt;  &lt;p&gt;NAnt allows you to build a script (XML Script) configuring tasks and dependencies with reach NAnt functions, expressions, data types etc…&lt;/p&gt;  &lt;p&gt;Alright, going back to this post purpose; here you are the steps to allow NAnt intellisense in VS 2008 (I believe for other VS versions too) in Windows operating systems.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Download Nant binaries or source code from &lt;a title="NAnt website" href="http://nant.sourceforge.net/" target="_blank"&gt;here&lt;/a&gt;, I will go with latest one NAnt 0.86 Beta 1. &lt;/li&gt;    &lt;li&gt;Extract the compressed folder and follow NAnt installation steps as explained &lt;a title="NAnt installtion steps" href="http://nant.sourceforge.net/release/0.86-beta1/help/introduction/installation.html" target="_blank"&gt;here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Copy nant.xsd file from extracted folder (&amp;lt;Base installation directory&amp;gt;\schema\nant.xsd) &lt;/li&gt;    &lt;li&gt;Paste this file into XML schema folder in Visual Studio installation directory; it should be as following in x32 bit operating systems (C:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas) or (C:\Program Files (x86)\Microsoft Visual Studio 9.0\Xml\Schemas) in x64 bit operating systems. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;You should be done now with those steps, do start new NAnt XML script and get use of Intellisense, create new XML file in VS 2008, and in the root node &amp;lt;project&amp;gt; add the attribute xmlns=” now you should see NAnt schema in the drop down list as bellow:&lt;/ul&gt;  &lt;ul&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="NAnt01" border="0" alt="NAnt01" src="http://aspxwizard.net/blogs/minalabib/NAnt01_68EB43A6.png" width="640" height="241" /&gt;&lt;/ul&gt;  &lt;ul&gt;And now you have NAnt XML intellisense enabled in VS 2008 as bellow:&lt;/ul&gt;  &lt;ul&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="NAnt02" border="0" alt="NAnt02" src="http://aspxwizard.net/blogs/minalabib/NAnt02_601B3B5A.png" width="640" height="288" /&gt;&amp;#160; &lt;/ul&gt;&lt;img src="http://aspxwizard.net/aggbug.aspx?PostID=35140" width="1" height="1"&gt;</description><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/vs2008/default.aspx">vs2008</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/VS/default.aspx">VS</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/NAnt/default.aspx">NAnt</category></item><item><title>Extending Cache to Get Or Insert data</title><link>http://aspxwizard.net/blogs/minalabib/archive/2009/12/15/extending_2D00_cache_2D00_to_2D00_get_2D00_or_2D00_insert_2D00_data.aspx</link><pubDate>Tue, 15 Dec 2009 20:00:29 GMT</pubDate><guid isPermaLink="false">318922e2-3002-4869-8654-4cebdb510d6f:35106</guid><dc:creator>minalabib</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://aspxwizard.net/blogs/minalabib/rsscomments.aspx?PostID=35106</wfw:commentRss><comments>http://aspxwizard.net/blogs/minalabib/archive/2009/12/15/extending_2D00_cache_2D00_to_2D00_get_2D00_or_2D00_insert_2D00_data.aspx#comments</comments><description>&lt;p&gt;In current project I was planning to build caching functionality to keep some shared and not frequently changed data, I figured out that I will be using a lot of Cache[string Key], Cache.Get(), and/or Cache.Insert() methods. and that means I have to check if the data is in the cache already and if not I have to insert the data to the cache object.&lt;/p&gt;  &lt;p&gt;I was thinking about having a method to check and update the cache without rewriting that over and over again, but that means I have to know what is the data type of the data needed to be stored, that brings us to &lt;a title="MSDN - Generics" href="http://msdn.microsoft.com/en-us/library/512aeb7t.aspx" target="_blank"&gt;Generics&lt;/a&gt; and &lt;a title="MSDN - Extensions" href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank"&gt;Extensions&lt;/a&gt; to build extension methods to check the &lt;a title="MSDN - Cache" href="http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx" target="_blank"&gt;Cache&lt;/a&gt; object and get or insert data.&lt;/p&gt;  &lt;p&gt;I am using ASP.NET MVC 1.0 in this project, below is the extension method to get or insert into Cache object:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System;
&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Web.Caching;

&lt;span style="color:blue;"&gt;namespace &lt;/span&gt;CacheExtensions
{
    &lt;span style="color:blue;"&gt;public static class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;CasheExtension
    &lt;/span&gt;{
        &lt;span style="color:blue;"&gt;public static &lt;/span&gt;T GetOrInsert&amp;lt;T&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Cache &lt;/span&gt;Cache, &lt;span style="color:blue;"&gt;string &lt;/span&gt;key, &lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T&amp;gt; generator)
        {
            &lt;span style="color:blue;"&gt;var &lt;/span&gt;result = Cache[key];
            &lt;span style="color:blue;"&gt;if &lt;/span&gt;(result != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)
                &lt;span style="color:blue;"&gt;return &lt;/span&gt;(T)result;
            result = (generator != &lt;span style="color:blue;"&gt;null&lt;/span&gt;) ? generator() : &lt;span style="color:blue;"&gt;default&lt;/span&gt;(T);
            Cache.Insert(key, result);
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;(T)result;
        }
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;now you can consume it easily by calling the extended method as following: &lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;object &lt;/span&gt;o = &lt;span style="color:#2b91af;"&gt;HttpRuntime&lt;/span&gt;.Cache.GetOrInsert&amp;lt;&lt;span style="color:blue;"&gt;object&lt;/span&gt;&amp;gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;key1&amp;quot;&lt;/span&gt;,GenObj);&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;supposing GenObj is a pointer&amp;#160; to a method to generate an instance of type object. &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Actually I used the same technique to get or add data to the &lt;a title="MSDN - HttpSessionStateBase" href="http://msdn.microsoft.com/en-us/library/system.web.httpsessionstatebase.aspx" target="_blank"&gt;session&lt;/a&gt; object too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;References&lt;/u&gt;&lt;/strong&gt;: &lt;a href="http://stackoverflow.com/questions/445050/how-can-i-cache-objects-in-asp-net-mvc" target="_blank"&gt;http://stackoverflow.com/questions/445050/how-can-i-cache-objects-in-asp-net-mvc&lt;/a&gt;&lt;/p&gt;&lt;img src="http://aspxwizard.net/aggbug.aspx?PostID=35106" width="1" height="1"&gt;</description><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/.net/default.aspx">.net</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/Extensions/default.aspx">Extensions</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/caching/default.aspx">caching</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/Generics/default.aspx">Generics</category></item><item><title>Enable JQuery Intellisense in Visual Studio 2008</title><link>http://aspxwizard.net/blogs/minalabib/archive/2009/11/23/enable_2D00_jquery_2D00_intellisense_2D00_in_2D00_visual_2D00_studio_2D00_2008.aspx</link><pubDate>Mon, 23 Nov 2009 16:39:31 GMT</pubDate><guid isPermaLink="false">318922e2-3002-4869-8654-4cebdb510d6f:34175</guid><dc:creator>minalabib</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://aspxwizard.net/blogs/minalabib/rsscomments.aspx?PostID=34175</wfw:commentRss><comments>http://aspxwizard.net/blogs/minalabib/archive/2009/11/23/enable_2D00_jquery_2D00_intellisense_2D00_in_2D00_visual_2D00_studio_2D00_2008.aspx#comments</comments><description>&lt;p&gt;I was expecting that Visual studio will do the magic for me and enable Intellisense for JQuery javascript library automatically once I add the library and referenced it in my page – naive, right?- anyways it did not happen of course, so with a quick look to the internet and beloved Scott Guthrie blog I found that I need couple of steps to enable it; It is easy and quick steps so I liked to share it with other naive developers :).&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Install Visual Studio 2008 SP1.      &lt;br /&gt;This service pack adds richer javascript intellisense support for Visual Studio 2008, you will find it &lt;a title="VS2008 SP1" href="http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx" target="_blank"&gt;here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Install Visual Studio 2008 Patch KB958502 to support “-vsdoc.js” Intellisense files      &lt;br /&gt;This patch apply for VS2008 SP1 and VWD Express SP1, enables Visual Studio to detect “-vsdoc.js” files when javascript library is referenced and use it to enable Javascript Intellisense. This patch can be found &lt;a title="Patch KB958502" href="http://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736" target="_blank"&gt;here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Download the JQeury Visual Studio doc file.      &lt;br /&gt;You can find this file with &lt;a title="ASP.NET MVC Official website" href="http://www.asp.net/mvc/download/" target="_blank"&gt;ASP.NET MVC&lt;/a&gt; package as it is included by default or you can find it in &lt;a title="Official JQuery website." href="http://www.jquery.com" target="_blank"&gt;JQuery&lt;/a&gt; official web site as Visual Studio documentation.&lt;img title="VS08 JQuery" style="display:inline;margin-left:0px;margin-right:0px;" height="105" alt="VS08 JQuery" src="http://aspxwizard.net/blogs/minalabib/VS08JQuery_42E9492B.png" width="240" /&gt; &lt;/li&gt;    &lt;li&gt;Save “vsdoc.js” file in the same directory      &lt;br /&gt;Save the Visual Studio documentation file in the same directory of the JQuery library, and then you can reference the library in your page as below:       &lt;br /&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script &lt;/span&gt;&lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;../../Scripts/jquery-1.3.2.js&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;        &lt;br /&gt;&lt;/span&gt;start now to use the Javascript Intellisense feature. &lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol&gt;&lt;strong&gt;&lt;u&gt;Important Trick:        &lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;Sometimes we use partial views or user controls in our project and we do not to refer to Javascript library within it, we usually refer to it in Master page or the parent page; Visual Studio has no way to know this script is available in for the user control or the partial view, thus Javascript Intellisense will NOT be enabled in these files, to enable Javascript Intellisense in the partial/user control there is a useful trick by reference the library surrounded with If(false) statement which will never be rendered in the run time, but still provide Javascript intellisense in the design time.     &lt;br /&gt;&lt;span style="background:#ffee62;"&gt;&amp;lt;%&lt;/span&gt; &lt;span style="color:blue;"&gt;if &lt;/span&gt;(&lt;span style="color:blue;"&gt;false&lt;/span&gt;)     &lt;br /&gt;&amp;#160;&amp;#160; { &lt;span style="background:#ffee62;"&gt;%&amp;gt;      &lt;br /&gt;&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script &lt;/span&gt;&lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;../../Scripts/jquery-1.3.2.js&amp;quot; t&lt;/span&gt;&lt;span style="color:red;"&gt;ype&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:#ffee62;"&gt;&amp;lt;%&lt;/span&gt; } &lt;span style="background:#ffee62;"&gt;%&amp;gt;&lt;/span&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;     &lt;br /&gt;&lt;/ol&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;&lt;u&gt;References:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2008/11/21/jquery-intellisense-in-vs-2008.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2008/11/21/jquery-intellisense-in-vs-2008.aspx&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;

&lt;/div&gt;&lt;img src="http://aspxwizard.net/aggbug.aspx?PostID=34175" width="1" height="1"&gt;</description><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/JQuery/default.aspx">JQuery</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/Development/default.aspx">Development</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/Intellisense/default.aspx">Intellisense</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/vs2008/default.aspx">vs2008</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/VS/default.aspx">VS</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/Javascript/default.aspx">Javascript</category></item><item><title>Adding web reference in class library – ASP.NET MVC</title><link>http://aspxwizard.net/blogs/minalabib/archive/2009/11/06/adding-web-reference-in-class-library-asp-net-mvc.aspx</link><pubDate>Fri, 06 Nov 2009 21:40:40 GMT</pubDate><guid isPermaLink="false">318922e2-3002-4869-8654-4cebdb510d6f:33673</guid><dc:creator>minalabib</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://aspxwizard.net/blogs/minalabib/rsscomments.aspx?PostID=33673</wfw:commentRss><comments>http://aspxwizard.net/blogs/minalabib/archive/2009/11/06/adding-web-reference-in-class-library-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;It is change in .NET 3.5 using ASP.NET MVC you can’t find ‘Add Web Reference’ option in right click context menu inside a class library (if you do not have web references in your class library).&lt;/p&gt;  &lt;p&gt;But I found how to add .NET 2.0 based web reference through adding Service Reference, I quoted the following sentence from a forum thread.&lt;/p&gt;  &lt;blockquote&gt;   &lt;table cellspacing="0" cellpadding="2"&gt;       &lt;tr&gt;         &lt;td&gt;As for the &amp;quot;Add Service Reference&amp;quot;, it is used for creating client proxy of WCF service(it will generate a client proxy class). Also, since WCF include webservice communication ability, you can use it to create&amp;#160; client proxy for webservice too. &lt;/td&gt;       &lt;/tr&gt;     &lt;/table&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Below are steps I used to add web reference to a web service in class library in my ASP.NET MVC solution.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Right click ‘References’ folder under class library project (there is no Add Web Reference option) instead select ‘Add Service Refrence’      &lt;br /&gt;&lt;img title="1" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin-left:0px;margin-right:0px;border-right-width:0px;" height="85" alt="1" src="http://aspxwizard.net/blogs/minalabib/1_3706022C.png" width="229" border="0" /&gt; &lt;/li&gt;    &lt;li&gt;In Add Service Reference window click Ad&lt;u&gt;v&lt;/u&gt;anced… button       &lt;br /&gt;&lt;img title="2" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin-left:0px;margin-right:0px;border-right-width:0px;" height="220" alt="2" src="http://aspxwizard.net/blogs/minalabib/2_725967EA.png" width="260" border="0" /&gt; &lt;/li&gt;    &lt;li&gt;in Service Reference Setting Window click Add &lt;u&gt;W&lt;/u&gt;eb Reference button       &lt;br /&gt;&lt;img title="3" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="244" alt="3" src="http://aspxwizard.net/blogs/minalabib/3_31B71B7B.png" width="260" border="0" /&gt; &lt;/li&gt;    &lt;li&gt;Now you are landing on regular .NET 2.0 Add Web Reference window and you can provide a web service URL to be added to your class library. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;by adding web reference and from now on you can see ‘Add Web Reference’ option in the right click context menu of Reference folder &lt;/p&gt;  &lt;p&gt;&lt;a href="http://aspxwizard.net/blogs/minalabib/4_28CA19ED.png"&gt;&lt;img title="4" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin-left:0px;margin-right:0px;border-right-width:0px;" height="108" alt="4" src="http://aspxwizard.net/blogs/minalabib/4_thumb_6F4709F5.png" width="225" align="left" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;and also Visual studio will create a Web References folder underneath your class library.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;

&lt;/div&gt;&lt;img src="http://aspxwizard.net/aggbug.aspx?PostID=33673" width="1" height="1"&gt;</description><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/.net/default.aspx">.net</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/MS+VS/default.aspx">MS VS</category></item><item><title>Generic editable GridView - ASP.NET MVC</title><link>http://aspxwizard.net/blogs/minalabib/archive/2009/11/06/generic-editable-gridview-asp-net-mvc.aspx</link><pubDate>Fri, 06 Nov 2009 17:44:07 GMT</pubDate><guid isPermaLink="false">318922e2-3002-4869-8654-4cebdb510d6f:33666</guid><dc:creator>minalabib</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://aspxwizard.net/blogs/minalabib/rsscomments.aspx?PostID=33666</wfw:commentRss><comments>http://aspxwizard.net/blogs/minalabib/archive/2009/11/06/generic-editable-gridview-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;The goal is to build editable data grid in a project uses ASP.NET MVC 1.0, it is know that ASP.NET MVC does not use controls with ( runat=”server” ) attribute, which means I can’t use regular DataGrid or GridView in my code. and &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.htmlhelper.aspx" target="_blank"&gt;HTMLHelper&lt;/a&gt; class in ASP.NET MVC does provide such HTML component. &lt;/p&gt;  &lt;p&gt;So, there are two solutions:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Using extension to extend HTMLHelper functionality and build HTML using code      &lt;div id="codeSnippetWrapper" style="border-right:silver 1px solid;padding-right:4px;border-top:silver 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:silver 1px solid;width:97.5%;cursor:text;direction:ltr;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:silver 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;"&gt;       &lt;div id="codeSnippet" style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;         &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; GridViewExt&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;     {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GridView(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; HtmlHelper html, IEnumerable DataSource, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; HTMLAtrributes)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum4" style="color:#606060;"&gt;   4:&lt;/span&gt;         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum5" style="color:#606060;"&gt;   5:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; htmlAttributesString = ConvertToAtrributes.ConvertObjectToAttributeList(HTMLAtrributes).Trim();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum6" style="color:#606060;"&gt;   6:&lt;/span&gt;             StringBuilder resultBuilder = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum7" style="color:#606060;"&gt;   7:&lt;/span&gt;             resultBuilder.AppendFormat(&lt;span style="color:#006080;"&gt;&amp;quot;&amp;lt;table{0}{1}&amp;gt;&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.IsNullOrEmpty(htmlAttributesString) ? &lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt; : &lt;span style="color:#006080;"&gt;&amp;quot; &amp;quot;&lt;/span&gt;, htmlAttributesString).AppendLine();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum8" style="color:#606060;"&gt;   8:&lt;/span&gt;             IEnumerator sourceEnumerator = DataSource.GetEnumerator();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum9" style="color:#606060;"&gt;   9:&lt;/span&gt;             Type itemType;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum10" style="color:#606060;"&gt;  10:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (sourceEnumerator.MoveNext() == &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum11" style="color:#606060;"&gt;  11:&lt;/span&gt;             {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum12" style="color:#606060;"&gt;  12:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum13" style="color:#606060;"&gt;  13:&lt;/span&gt;             }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum14" style="color:#606060;"&gt;  14:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum15" style="color:#606060;"&gt;  15:&lt;/span&gt;             {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum16" style="color:#606060;"&gt;  16:&lt;/span&gt;                 itemType = sourceEnumerator.Current.GetType();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum17" style="color:#606060;"&gt;  17:&lt;/span&gt;             }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum18" style="color:#606060;"&gt;  18:&lt;/span&gt;             PropertyInfo[] properties = itemType.GetProperties();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum19" style="color:#606060;"&gt;  19:&lt;/span&gt;             resultBuilder.AppendLine(&lt;span style="color:#006080;"&gt;&amp;quot;\t&amp;lt;tr&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum20" style="color:#606060;"&gt;  20:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (PropertyInfo property &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; properties)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum21" style="color:#606060;"&gt;  21:&lt;/span&gt;             {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum22" style="color:#606060;"&gt;  22:&lt;/span&gt;                 resultBuilder.AppendFormat(&lt;span style="color:#006080;"&gt;&amp;quot;\t\t&amp;lt;th&amp;gt;{0}&amp;lt;/th&amp;gt;&amp;quot;&lt;/span&gt;, property.Name).AppendLine();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum23" style="color:#606060;"&gt;  23:&lt;/span&gt;             }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum24" style="color:#606060;"&gt;  24:&lt;/span&gt;             resultBuilder.AppendLine(&lt;span style="color:#006080;"&gt;&amp;quot;\t&amp;lt;/tr&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum25" style="color:#606060;"&gt;  25:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; DataSource)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum26" style="color:#606060;"&gt;  26:&lt;/span&gt;             {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum27" style="color:#606060;"&gt;  27:&lt;/span&gt;                 resultBuilder.AppendLine(&lt;span style="color:#006080;"&gt;&amp;quot;\t&amp;lt;tr&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum28" style="color:#606060;"&gt;  28:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (PropertyInfo property &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; properties)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum29" style="color:#606060;"&gt;  29:&lt;/span&gt;                 {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum30" style="color:#606060;"&gt;  30:&lt;/span&gt;                     resultBuilder.AppendFormat(&lt;span style="color:#006080;"&gt;&amp;quot;\t\t&amp;lt;td&amp;gt;{0}&amp;lt;/td&amp;gt;&amp;quot;&lt;/span&gt;, property.GetValue(item, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)).AppendLine();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum31" style="color:#606060;"&gt;  31:&lt;/span&gt;                 }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum32" style="color:#606060;"&gt;  32:&lt;/span&gt;                 resultBuilder.AppendLine(&lt;span style="color:#006080;"&gt;&amp;quot;\t&amp;lt;/tr&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum33" style="color:#606060;"&gt;  33:&lt;/span&gt;             }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum34" style="color:#606060;"&gt;  34:&lt;/span&gt;             resultBuilder.Append(&lt;span style="color:#006080;"&gt;&amp;quot;&amp;lt;/table&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum35" style="color:#606060;"&gt;  35:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; resultBuilder.ToString();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum36" style="color:#606060;"&gt;  36:&lt;/span&gt;         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum37" style="color:#606060;"&gt;  37:&lt;/span&gt;     }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum38" style="color:#606060;"&gt;  38:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ConvertToAtrributes&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum39" style="color:#606060;"&gt;  39:&lt;/span&gt;     {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum40" style="color:#606060;"&gt;  40:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ConvertObjectToAttributeList(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum41" style="color:#606060;"&gt;  41:&lt;/span&gt;         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum42" style="color:#606060;"&gt;  42:&lt;/span&gt;             StringBuilder builder = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum43" style="color:#606060;"&gt;  43:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum44" style="color:#606060;"&gt;  44:&lt;/span&gt;             {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum45" style="color:#606060;"&gt;  45:&lt;/span&gt;                 IDictionary&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&amp;gt; dictionary = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; IDictionary&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&amp;gt;;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum46" style="color:#606060;"&gt;  46:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (dictionary == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum47" style="color:#606060;"&gt;  47:&lt;/span&gt;                 {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum48" style="color:#606060;"&gt;  48:&lt;/span&gt;                     dictionary = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; RouteValueDictionary(&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum49" style="color:#606060;"&gt;  49:&lt;/span&gt;                 }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum50" style="color:#606060;"&gt;  50:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; format = &lt;span style="color:#006080;"&gt;&amp;quot;{0}=\&amp;quot;{1}\&amp;quot; &amp;quot;&lt;/span&gt;;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum51" style="color:#606060;"&gt;  51:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; str2 &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; dictionary.Keys)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum52" style="color:#606060;"&gt;  52:&lt;/span&gt;                 {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum53" style="color:#606060;"&gt;  53:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; obj2 = dictionary[str2];&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum54" style="color:#606060;"&gt;  54:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (dictionary[str2] &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum55" style="color:#606060;"&gt;  55:&lt;/span&gt;                     {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum56" style="color:#606060;"&gt;  56:&lt;/span&gt;                         obj2 = dictionary[str2].ToString().ToLowerInvariant();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum57" style="color:#606060;"&gt;  57:&lt;/span&gt;                     }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum58" style="color:#606060;"&gt;  58:&lt;/span&gt;                     builder.AppendFormat(format, str2.Replace(&lt;span style="color:#006080;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;).ToLowerInvariant(), obj2);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum59" style="color:#606060;"&gt;  59:&lt;/span&gt;                 }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum60" style="color:#606060;"&gt;  60:&lt;/span&gt;             }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum61" style="color:#606060;"&gt;  61:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; builder.ToString();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum62" style="color:#606060;"&gt;  62:&lt;/span&gt;         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum63" style="color:#606060;"&gt;  63:&lt;/span&gt;     }&lt;/pre&gt;
&lt;/div&gt;
    &lt;/div&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; now you should be able to call to call HTMLHelper extended method inside your View 

    &lt;pre style="border-right:#cecece 1px solid;padding-right:5px;border-top:#cecece 1px solid;padding-left:5px;min-height:40px;padding-bottom:5px;overflow:auto;border-left:#cecece 1px solid;width:980px;padding-top:5px;border-bottom:#cecece 1px solid;height:31px;background-color:#fbfbfb;"&gt;&lt;pre style="font-size:10px;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#e0e0e0;"&gt;  1: &lt;span style="color:black;background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;= this.Html.GridView(Model.Products)&lt;span style="color:black;background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;
but it is still not editable and to add editing functionality it will be so hard to write a lot of HTML code inside C# code and will not be easy to maintain or fix issues; so let’s consider the second option. &lt;/li&gt;

  &lt;li&gt;Building User control and get advantage of writing HTML inside the user control HTML (one thing to remember using ASP.NET MVC no use for page life cycle you can get rid of that). 
    &lt;br /&gt;Now let me build a user control ascx page using fantastic &lt;a href="http://www.jquery.com" target="_blank"&gt;JQuery&lt;/a&gt; fetures&amp;#160; &lt;div id="codeSnippetWrapper" style="border-right:silver 1px solid;padding-right:4px;border-top:silver 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:silver 1px solid;width:97.5%;cursor:text;direction:ltr;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:silver 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;"&gt;
      &lt;div id="codeSnippet" style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;
        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ Control Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeBehind=&amp;quot;GridView.ascx.cs&amp;quot; Inherits=&amp;quot;Shared.UserControls.GridView&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ Import Namespace=&amp;quot;System.Reflection&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- style code --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum4" style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;style&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum5" style="color:#606060;"&gt;   5:&lt;/span&gt;     .gridView&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum6" style="color:#606060;"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum7" style="color:#606060;"&gt;   7:&lt;/span&gt;         border-collapse: collapse;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum8" style="color:#606060;"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum9" style="color:#606060;"&gt;   9:&lt;/span&gt;     .gridView th, .gridView td&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum10" style="color:#606060;"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum11" style="color:#606060;"&gt;  11:&lt;/span&gt;         padding: 5px;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum12" style="color:#606060;"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum13" style="color:#606060;"&gt;  13:&lt;/span&gt;     .gridView th&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum14" style="color:#606060;"&gt;  14:&lt;/span&gt;     {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum15" style="color:#606060;"&gt;  15:&lt;/span&gt;         border-bottom: double 3px black;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum16" style="color:#606060;"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum17" style="color:#606060;"&gt;  17:&lt;/span&gt;     .gridView td&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum18" style="color:#606060;"&gt;  18:&lt;/span&gt;     {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum19" style="color:#606060;"&gt;  19:&lt;/span&gt;         border-bottom: solid 1px black;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum20" style="color:#606060;"&gt;  20:&lt;/span&gt;     }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum21" style="color:#606060;"&gt;  21:&lt;/span&gt;     .alternatingItem&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum22" style="color:#606060;"&gt;  22:&lt;/span&gt;     {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum23" style="color:#606060;"&gt;  23:&lt;/span&gt;         background-color: lightgrey;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum24" style="color:#606060;"&gt;  24:&lt;/span&gt;     }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum25" style="color:#606060;"&gt;  25:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum26" style="color:#606060;"&gt;  26:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- Javascripts code --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum27" style="color:#606060;"&gt;  27:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;src&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;../../Scripts/jquery-1.3.2.js&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt; &amp;lt;%--&amp;lt;script src=&lt;span style="color:#006080;"&gt;&amp;quot;../../Scripts/jquery-1.3.2-vsdoc.js&amp;quot;&lt;/span&gt; type=&lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; &amp;lt;/script&amp;gt;--%&amp;gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt; &amp;lt;script type=&lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; controller = &lt;span style="color:#006080;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum4" style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; SaveAction = &lt;span style="color:#006080;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum5" style="color:#606060;"&gt;   5:&lt;/span&gt;     &amp;lt;% GetController(); GetSaveAction(); %&amp;gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum6" style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; IsValidAction(ctrl, actn)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum7" style="color:#606060;"&gt;   7:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum8" style="color:#606060;"&gt;   8:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(($.trim(ctrl) == &lt;span style="color:#006080;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;) || ($.trim(actn) == &lt;span style="color:#006080;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;))&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum9" style="color:#606060;"&gt;   9:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum10" style="color:#606060;"&gt;  10:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum11" style="color:#606060;"&gt;  11:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum12" style="color:#606060;"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum13" style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; SaveAllClick() {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum14" style="color:#606060;"&gt;  14:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//debugger;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum15" style="color:#606060;"&gt;  15:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(!IsValidAction(controller,SaveAction))&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum16" style="color:#606060;"&gt;  16:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum17" style="color:#606060;"&gt;  17:&lt;/span&gt;             alert(&lt;span style="color:#006080;"&gt;&amp;quot;Error while saving data&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum18" style="color:#606060;"&gt;  18:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum19" style="color:#606060;"&gt;  19:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum20" style="color:#606060;"&gt;  20:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; i = 0;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum21" style="color:#606060;"&gt;  21:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; inputs = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Array();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum22" style="color:#606060;"&gt;  22:&lt;/span&gt;         $(&lt;span style="color:#006080;"&gt;&amp;quot;#BaseTable&amp;quot;&lt;/span&gt;).find(&lt;span style="color:#006080;"&gt;&amp;quot;input&amp;quot;&lt;/span&gt;).each(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;() {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum23" style="color:#606060;"&gt;  23:&lt;/span&gt;             inputs&lt;img src="http://aspxwizard.net/emoticons/emotion-55.gif" alt="Idea" /&gt; = [&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.id, &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.value];&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum24" style="color:#606060;"&gt;  24:&lt;/span&gt;             i++;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum25" style="color:#606060;"&gt;  25:&lt;/span&gt;         });&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum26" style="color:#606060;"&gt;  26:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum27" style="color:#606060;"&gt;  27:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; columnsCount = $(&lt;span style="color:#006080;"&gt;&amp;quot;#BaseTable&amp;quot;&lt;/span&gt;).find(&lt;span style="color:#006080;"&gt;&amp;quot;th&amp;quot;&lt;/span&gt;).length;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum28" style="color:#606060;"&gt;  28:&lt;/span&gt;         $.post(&lt;span style="color:#006080;"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;+controller+&lt;span style="color:#006080;"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;+SaveAction, { inputs: inputs, columnsCount: columnsCount });&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum29" style="color:#606060;"&gt;  29:&lt;/span&gt;         Border();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum30" style="color:#606060;"&gt;  30:&lt;/span&gt;         $(&lt;span style="color:#006080;"&gt;&amp;quot;#ChangeFlag&amp;quot;&lt;/span&gt;).text(&lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum31" style="color:#606060;"&gt;  31:&lt;/span&gt;         $(&lt;span style="color:#006080;"&gt;&amp;quot;#SaveAll&amp;quot;&lt;/span&gt;).attr(&lt;span style="color:#006080;"&gt;&amp;quot;disabled&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;disabled&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum32" style="color:#606060;"&gt;  32:&lt;/span&gt;         alert(&lt;span style="color:#006080;"&gt;&amp;quot;Saved&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum33" style="color:#606060;"&gt;  33:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum34" style="color:#606060;"&gt;  34:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; prevCell;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum35" style="color:#606060;"&gt;  35:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; Border(cell) {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum36" style="color:#606060;"&gt;  36:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (prevCell != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum37" style="color:#606060;"&gt;  37:&lt;/span&gt;             $(prevCell).attr(&lt;span style="color:#006080;"&gt;&amp;quot;style&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;border-style: none&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum38" style="color:#606060;"&gt;  38:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum39" style="color:#606060;"&gt;  39:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (cell != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum40" style="color:#606060;"&gt;  40:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; i = $(cell); &lt;span style="color:#008000;"&gt;//.find(&amp;quot;input&amp;quot;);&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum41" style="color:#606060;"&gt;  41:&lt;/span&gt;             i.attr(&lt;span style="color:#006080;"&gt;&amp;quot;style&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;border-style: inset&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum42" style="color:#606060;"&gt;  42:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum43" style="color:#606060;"&gt;  43:&lt;/span&gt;         prevCell = cell;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum44" style="color:#606060;"&gt;  44:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum45" style="color:#606060;"&gt;  45:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; Unborder(cell) {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum46" style="color:#606060;"&gt;  46:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (cell != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum47" style="color:#606060;"&gt;  47:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; i = $(cell); &lt;span style="color:#008000;"&gt;//.find(&amp;quot;input&amp;quot;);&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum48" style="color:#606060;"&gt;  48:&lt;/span&gt;             i.attr(&lt;span style="color:#006080;"&gt;&amp;quot;style&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;border-style: none&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum49" style="color:#606060;"&gt;  49:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum50" style="color:#606060;"&gt;  50:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum51" style="color:#606060;"&gt;  51:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; MarkChanges() {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum52" style="color:#606060;"&gt;  52:&lt;/span&gt;         $(&lt;span style="color:#006080;"&gt;&amp;quot;#ChangeFlag&amp;quot;&lt;/span&gt;).text(&lt;span style="color:#006080;"&gt;&amp;quot;Page should be saved&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum53" style="color:#606060;"&gt;  53:&lt;/span&gt;         $(&lt;span style="color:#006080;"&gt;&amp;quot;#SaveAll&amp;quot;&lt;/span&gt;).removeAttr(&lt;span style="color:#006080;"&gt;&amp;quot;disabled&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum54" style="color:#606060;"&gt;  54:&lt;/span&gt;     }&lt;/pre&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum28" style="color:#606060;"&gt;  28:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- Show the Headers --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum29" style="color:#606060;"&gt;  29:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;table&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;gridView&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;BaseTable&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum30" style="color:#606060;"&gt;  30:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;thead&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum31" style="color:#606060;"&gt;  31:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum32" style="color:#606060;"&gt;  32:&lt;/span&gt;             &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (PropertyInfo prop &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Columns)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum33" style="color:#606060;"&gt;  33:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;th&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum34" style="color:#606060;"&gt;  34:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; = prop.Name &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum35" style="color:#606060;"&gt;  35:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;th&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum36" style="color:#606060;"&gt;  36:&lt;/span&gt;             &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  } &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum37" style="color:#606060;"&gt;  37:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum38" style="color:#606060;"&gt;  38:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;thead&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum39" style="color:#606060;"&gt;  39:&lt;/span&gt;     &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- Show the Rows --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum40" style="color:#606060;"&gt;  40:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tbody&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum41" style="color:#606060;"&gt;  41:&lt;/span&gt;         &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; row &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Rows)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;            { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum42" style="color:#606060;"&gt;  42:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%= this.FlipCssClass( &amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;item&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;alternatingItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot;) %&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum43" style="color:#606060;"&gt;  43:&lt;/span&gt;             &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- Show Each Column --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum44" style="color:#606060;"&gt;  44:&lt;/span&gt;             &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (PropertyInfo prop &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Columns)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum45" style="color:#606060;"&gt;  45:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum46" style="color:#606060;"&gt;  46:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  var typeCode = Type.GetTypeCode(prop.PropertyType); &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum47" style="color:#606060;"&gt;  47:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; var str_disabled = &lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                   &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.GetAtt(prop.Name))&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt;                       str_disabled = &lt;span style="color:#006080;"&gt;&amp;quot;disabled=\&amp;quot;disabled\&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum4" style="color:#606060;"&gt;   4:&lt;/span&gt;                  &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum48" style="color:#606060;"&gt;  48:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- String Columns --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum49" style="color:#606060;"&gt;  49:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (typeCode == TypeCode.String)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                    { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum50" style="color:#606060;"&gt;  50:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%=prop.Name %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;border-style: none&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%= GetColumnValue(row, prop.Name)%&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum51" style="color:#606060;"&gt;  51:&lt;/span&gt;                     &lt;span style="color:#ff0000;"&gt;onmousedown&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Border(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onselect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Border(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onblur&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Unborder(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onchange&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MarkChanges()&amp;quot;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum52" style="color:#606060;"&gt;  52:&lt;/span&gt;                     &amp;amp;&lt;span style="color:#ff0000;"&gt;lt&lt;/span&gt;;%= &lt;span style="color:#ff0000;"&gt;str_disabled&lt;/span&gt; %&amp;amp;&lt;span style="color:#ff0000;"&gt;gt&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum53" style="color:#606060;"&gt;  53:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  } &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum54" style="color:#606060;"&gt;  54:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- DateTime Columns --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum55" style="color:#606060;"&gt;  55:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (typeCode == TypeCode.DateTime)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                    { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum56" style="color:#606060;"&gt;  56:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%=prop.Name %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;border-style: none&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%= GetColumnValue(row, prop.Name, &amp;quot;&lt;/span&gt;{&lt;span style="color:#ff0000;"&gt;0:D&lt;/span&gt;}&lt;span style="color:#0000ff;"&gt;&amp;quot;)%&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum57" style="color:#606060;"&gt;  57:&lt;/span&gt;                     &lt;span style="color:#ff0000;"&gt;onmousedown&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Border(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onselect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Border(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onblur&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Unborder(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onchange&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MarkChanges()&amp;quot;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum58" style="color:#606060;"&gt;  58:&lt;/span&gt;                     &amp;amp;&lt;span style="color:#ff0000;"&gt;lt&lt;/span&gt;;%= &lt;span style="color:#ff0000;"&gt;str_disabled&lt;/span&gt; %&amp;amp;&lt;span style="color:#ff0000;"&gt;gt&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum59" style="color:#606060;"&gt;  59:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  } &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum60" style="color:#606060;"&gt;  60:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- Decimal Columns --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum61" style="color:#606060;"&gt;  61:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (typeCode == TypeCode.Decimal)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                    { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum62" style="color:#606060;"&gt;  62:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%=prop.Name %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;border-style: none&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%= GetColumnValue(row, prop.Name, &amp;quot;&lt;/span&gt;{&lt;span style="color:#ff0000;"&gt;0:f&lt;/span&gt;}&lt;span style="color:#0000ff;"&gt;&amp;quot;) %&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum63" style="color:#606060;"&gt;  63:&lt;/span&gt;                     &lt;span style="color:#ff0000;"&gt;onmousedown&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Border(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onselect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Border(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onblur&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Unborder(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onchange&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MarkChanges()&amp;quot;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum64" style="color:#606060;"&gt;  64:&lt;/span&gt;                     &amp;amp;&lt;span style="color:#ff0000;"&gt;lt&lt;/span&gt;;%= &lt;span style="color:#ff0000;"&gt;str_disabled&lt;/span&gt; %&amp;amp;&lt;span style="color:#ff0000;"&gt;gt&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum65" style="color:#606060;"&gt;  65:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  } &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum66" style="color:#606060;"&gt;  66:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- Decimal Columns --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum67" style="color:#606060;"&gt;  67:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (typeCode == TypeCode.Double)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                    { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;$&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum68" style="color:#606060;"&gt;  68:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%=prop.Name %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;border-style: none&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%= GetColumnValue(row, prop.Name, &amp;quot;&lt;/span&gt;{&lt;span style="color:#ff0000;"&gt;0:f&lt;/span&gt;}&lt;span style="color:#0000ff;"&gt;&amp;quot;) %&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum69" style="color:#606060;"&gt;  69:&lt;/span&gt;                     &lt;span style="color:#ff0000;"&gt;onmousedown&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Border(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onselect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Border(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onblur&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Unborder(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onchange&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MarkChanges()&amp;quot;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum70" style="color:#606060;"&gt;  70:&lt;/span&gt;                     &amp;amp;&lt;span style="color:#ff0000;"&gt;lt&lt;/span&gt;;%= &lt;span style="color:#ff0000;"&gt;str_disabled&lt;/span&gt; %&amp;amp;&lt;span style="color:#ff0000;"&gt;gt&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum71" style="color:#606060;"&gt;  71:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  } &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum72" style="color:#606060;"&gt;  72:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- Boolean Columns --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum73" style="color:#606060;"&gt;  73:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (typeCode == TypeCode.Boolean)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                    { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum74" style="color:#606060;"&gt;  74:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;)(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.GetColumnValue(row, prop.Name)))&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                    { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum75" style="color:#606060;"&gt;  75:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;checkbox&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;disabled&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;disabled&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;checked&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;checked&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum76" style="color:#606060;"&gt;  76:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                    &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt;                    { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum77" style="color:#606060;"&gt;  77:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;checkbox&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;disabled&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;disabled&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum78" style="color:#606060;"&gt;  78:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  } &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum79" style="color:#606060;"&gt;  79:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  } &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum80" style="color:#606060;"&gt;  80:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; -- Integer Columns --&lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum81" style="color:#606060;"&gt;  81:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (typeCode == TypeCode.Int32)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt;                    { &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum82" style="color:#606060;"&gt;  82:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%=prop.Name %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;border-style: none&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;lt;%= GetColumnValue(row, prop.Name)%&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum83" style="color:#606060;"&gt;  83:&lt;/span&gt;                     &lt;span style="color:#ff0000;"&gt;onmousedown&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Border(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onselect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Border(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onblur&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Unborder(this)&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onchange&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MarkChanges()&amp;quot;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum84" style="color:#606060;"&gt;  84:&lt;/span&gt;                     &amp;amp;&lt;span style="color:#ff0000;"&gt;lt&lt;/span&gt;;%= &lt;span style="color:#ff0000;"&gt;str_disabled&lt;/span&gt; %&amp;amp;&lt;span style="color:#ff0000;"&gt;gt&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum85" style="color:#606060;"&gt;  85:&lt;/span&gt;                 &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  } &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum86" style="color:#606060;"&gt;  86:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;td&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum87" style="color:#606060;"&gt;  87:&lt;/span&gt;             &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  } &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum88" style="color:#606060;"&gt;  88:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tr&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum89" style="color:#606060;"&gt;  89:&lt;/span&gt;         &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt;  } &lt;/pre&gt;&lt;span style="background-color:#ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum90" style="color:#606060;"&gt;  90:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tbody&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum91" style="color:#606060;"&gt;  91:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;table&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum92" style="color:#606060;"&gt;  92:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum93" style="color:#606060;"&gt;  93:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;SaveAll&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;disabled&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;disabled&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Save&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onclick&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;SaveAllClick()&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum94" style="color:#606060;"&gt;  94:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;span&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ChangeFlag&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;span&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum95" style="color:#606060;"&gt;  95:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
    &lt;/div&gt;
and building code behind code for this user control using &lt;a href="http://aspxwizard.net/blogs/minalabib/archive/2009/11/06/run-time-dynamic-attributes-in-c.aspx" target="_blank"&gt;last post&lt;/a&gt; idea of TypeDescriptor class to make the user control more generic accepting any type of collection and render editable properties according to custom attributes associated with it. 

    &lt;div id="codeSnippetWrapper" style="border-right:silver 1px solid;padding-right:4px;border-top:silver 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:silver 1px solid;width:97.5%;cursor:text;direction:ltr;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:silver 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;text-align:left;"&gt;
      &lt;div id="codeSnippet" style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;
        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum4" style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum5" style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Web;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum6" style="color:#606060;"&gt;   6:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Web.UI;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum7" style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Web.Mvc;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum8" style="color:#606060;"&gt;   8:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Reflection;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum9" style="color:#606060;"&gt;   9:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.ComponentModel;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum10" style="color:#606060;"&gt;  10:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; CustomAtrributes;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum11" style="color:#606060;"&gt;  11:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum12" style="color:#606060;"&gt;  12:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; Shared.UserControls&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum13" style="color:#606060;"&gt;  13:&lt;/span&gt; {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum14" style="color:#606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; GridView : System.Web.Mvc.ViewUserControl&amp;lt;IEnumerable&amp;gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum15" style="color:#606060;"&gt;  15:&lt;/span&gt;     {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum16" style="color:#606060;"&gt;  16:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GetController()&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum17" style="color:#606060;"&gt;  17:&lt;/span&gt;         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum18" style="color:#606060;"&gt;  18:&lt;/span&gt;             &lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum19" style="color:#606060;"&gt;  19:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (ViewContext.RouteData.Values[&lt;span style="color:#006080;"&gt;&amp;quot;Controller&amp;quot;&lt;/span&gt;] != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum20" style="color:#606060;"&gt;  20:&lt;/span&gt;             {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum21" style="color:#606060;"&gt;  21:&lt;/span&gt;                 Response.Write(&lt;span style="color:#006080;"&gt;&amp;quot;controller = &amp;#39;&amp;quot;&lt;/span&gt; + ViewContext.RouteData.Values[&lt;span style="color:#006080;"&gt;&amp;quot;Controller&amp;quot;&lt;/span&gt;] &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; + &lt;span style="color:#006080;"&gt;&amp;quot;&amp;#39;;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum22" style="color:#606060;"&gt;  22:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; ViewContext.RouteData.Values[&lt;span style="color:#006080;"&gt;&amp;quot;Controller&amp;quot;&lt;/span&gt;] &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum23" style="color:#606060;"&gt;  23:&lt;/span&gt;             }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum24" style="color:#606060;"&gt;  24:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum25" style="color:#606060;"&gt;  25:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum26" style="color:#606060;"&gt;  26:&lt;/span&gt;         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum27" style="color:#606060;"&gt;  27:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GetSaveAction()&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum28" style="color:#606060;"&gt;  28:&lt;/span&gt;         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum29" style="color:#606060;"&gt;  29:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (ViewData.Model.GetType().GetProperty(&lt;span style="color:#006080;"&gt;&amp;quot;SaveAction&amp;quot;&lt;/span&gt;) != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum30" style="color:#606060;"&gt;  30:&lt;/span&gt;             {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum31" style="color:#606060;"&gt;  31:&lt;/span&gt;                 Response.Write(&lt;span style="color:#006080;"&gt;&amp;quot;SaveAction = &amp;#39;&amp;quot;&lt;/span&gt; + DataBinder.Eval(ViewData.Model, &lt;span style="color:#006080;"&gt;&amp;quot;SaveAction&amp;quot;&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; + &lt;span style="color:#006080;"&gt;&amp;quot;&amp;#39;;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum32" style="color:#606060;"&gt;  32:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; DataBinder.Eval(ViewData.Model, &lt;span style="color:#006080;"&gt;&amp;quot;SaveAction&amp;quot;&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum33" style="color:#606060;"&gt;  33:&lt;/span&gt;             }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum34" style="color:#606060;"&gt;  34:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum35" style="color:#606060;"&gt;  35:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum36" style="color:#606060;"&gt;  36:&lt;/span&gt;         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum37" style="color:#606060;"&gt;  37:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; PropertyInfo[] Columns&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum38" style="color:#606060;"&gt;  38:&lt;/span&gt;         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum39" style="color:#606060;"&gt;  39:&lt;/span&gt;             &lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum40" style="color:#606060;"&gt;  40:&lt;/span&gt;             get &lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum41" style="color:#606060;"&gt;  41:&lt;/span&gt;             {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum42" style="color:#606060;"&gt;  42:&lt;/span&gt;                 var e = ViewData.Model.GetEnumerator();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum43" style="color:#606060;"&gt;  43:&lt;/span&gt;                 e.MoveNext();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum44" style="color:#606060;"&gt;  44:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; firstRow = e.Current;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum45" style="color:#606060;"&gt;  45:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (firstRow == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum46" style="color:#606060;"&gt;  46:&lt;/span&gt;                 {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum47" style="color:#606060;"&gt;  47:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Exception(&lt;span style="color:#006080;"&gt;&amp;quot;No data passed to GridView User Control.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum48" style="color:#606060;"&gt;  48:&lt;/span&gt;                 }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum49" style="color:#606060;"&gt;  49:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; firstRow.GetType().GetProperties();&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum50" style="color:#606060;"&gt;  50:&lt;/span&gt;             }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum51" style="color:#606060;"&gt;  51:&lt;/span&gt;         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum52" style="color:#606060;"&gt;  52:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; IEnumerable Rows&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum53" style="color:#606060;"&gt;  53:&lt;/span&gt;         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum54" style="color:#606060;"&gt;  54:&lt;/span&gt;             get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; ViewData.Model; }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum55" style="color:#606060;"&gt;  55:&lt;/span&gt;         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum56" style="color:#606060;"&gt;  56:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; GetColumnValue(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; row, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; columnName)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum57" style="color:#606060;"&gt;  57:&lt;/span&gt;         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum58" style="color:#606060;"&gt;  58:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; DataBinder.Eval(row, columnName);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum59" style="color:#606060;"&gt;  59:&lt;/span&gt;         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum60" style="color:#606060;"&gt;  60:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; GetColumnValue(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; row, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; columnName, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; format)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum61" style="color:#606060;"&gt;  61:&lt;/span&gt;         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum62" style="color:#606060;"&gt;  62:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; DataBinder.Eval(row, columnName, format); &lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum63" style="color:#606060;"&gt;  63:&lt;/span&gt;         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum64" style="color:#606060;"&gt;  64:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; flip = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum65" style="color:#606060;"&gt;  65:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; FlipCssClass(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; className, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; alternativeClassName)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum66" style="color:#606060;"&gt;  66:&lt;/span&gt;         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum67" style="color:#606060;"&gt;  67:&lt;/span&gt;             flip = !flip;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum68" style="color:#606060;"&gt;  68:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; flip ? className : alternativeClassName;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum69" style="color:#606060;"&gt;  69:&lt;/span&gt;         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum70" style="color:#606060;"&gt;  70:&lt;/span&gt;         &lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum71" style="color:#606060;"&gt;  71:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; GetAtt(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Name)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum72" style="color:#606060;"&gt;  72:&lt;/span&gt;         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum73" style="color:#606060;"&gt;  73:&lt;/span&gt;             &lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum74" style="color:#606060;"&gt;  74:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; readonlyatt = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum75" style="color:#606060;"&gt;  75:&lt;/span&gt;             UIAttributes uiatt = TypeDescriptor.GetAttributes(Model).Cast&amp;lt;Attribute&amp;gt;().SingleOrDefault(a =&amp;gt; a.GetType().Name == &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(UIAttributes).Name) &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; UIAttributes;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum76" style="color:#606060;"&gt;  76:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((uiatt != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; uiatt.IsReadOnly)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum77" style="color:#606060;"&gt;  77:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; uiatt.IsReadOnly;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum78" style="color:#606060;"&gt;  78:&lt;/span&gt;             PropertyInfo propInfo = Model.GetType().GetProperty(Name);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum79" style="color:#606060;"&gt;  79:&lt;/span&gt;                 &lt;span style="color:#008000;"&gt;//(propInfo =&amp;gt;&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum80" style="color:#606060;"&gt;  80:&lt;/span&gt;                     {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum81" style="color:#606060;"&gt;  81:&lt;/span&gt;                         PropertyDescriptor propDescriptor = TypeDescriptor.GetProperties(Model).Cast&amp;lt;PropertyDescriptor&amp;gt;().SingleOrDefault(p =&amp;gt; propInfo.Name == p.Name);&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum82" style="color:#606060;"&gt;  82:&lt;/span&gt;                         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (propDescriptor != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum83" style="color:#606060;"&gt;  83:&lt;/span&gt;                         {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum84" style="color:#606060;"&gt;  84:&lt;/span&gt;                             UIAttributes attrib = propDescriptor.Attributes.Cast&amp;lt;Attribute&amp;gt;().SingleOrDefault(p =&amp;gt; p.GetType().Name == &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(UIAttributes).Name) &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; UIAttributes;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum85" style="color:#606060;"&gt;  85:&lt;/span&gt;                             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (attrib != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum86" style="color:#606060;"&gt;  86:&lt;/span&gt;                             {&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum87" style="color:#606060;"&gt;  87:&lt;/span&gt;                                 readonlyatt = attrib.IsReadOnly;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum88" style="color:#606060;"&gt;  88:&lt;/span&gt;                             }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum89" style="color:#606060;"&gt;  89:&lt;/span&gt;                         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum90" style="color:#606060;"&gt;  90:&lt;/span&gt;                     }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum91" style="color:#606060;"&gt;  91:&lt;/span&gt;                     &lt;span style="color:#008000;"&gt;//);&lt;/span&gt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum92" style="color:#606060;"&gt;  92:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; readonlyatt;&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum93" style="color:#606060;"&gt;  93:&lt;/span&gt;         }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum94" style="color:#606060;"&gt;  94:&lt;/span&gt;     }&lt;/pre&gt;


        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;direction:ltr;border-top-style:none;line-height:12pt;padding-top:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;text-align:left;border-bottom-style:none;"&gt;&lt;span id="lnum95" style="color:#606060;"&gt;  95:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
    &lt;/div&gt;
and by using couple of ASP.NET MVC helpful classes like ViewContext, now I can detect which controller called this user control automatically and by adding new property to the the ViewData specifaying the Save Action method name in the controller; that gives more generic to the user control as it is not tight to specific controller or&amp;#160; methods. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Still need more enhancements and features like validation and styles, but so far it is nice.&lt;/p&gt;

&lt;p&gt;It was very nice challenge to build such a control and I owe to references I mention below a lot.&lt;/p&gt;

&lt;p&gt;References:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://stephenwalther.com/blog/archive/2008/06/25/asp-net-mvc-tip-9-create-a-gridview-view-user-control.aspx" target="_blank"&gt;ASP.NET MVC Tip #9 – Create a GridView View User Control&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://phoenixsoft.com.ua/eng/Blogs/MvcAspNetGridEditableRows.aspx" target="_blank"&gt;EDITABLE ROWS. USING HTML TABLE, JQUERY AND AJAX&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.singingeels.com/Articles/Building_Custom_ASPNET_MVC_Controls.aspx" target="_blank"&gt;Building Custom ASP.NET MVC Controls&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;ASP.NET MVC forums and questions posted online. &lt;/li&gt;
&lt;/ul&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;

&lt;/div&gt;&lt;img src="http://aspxwizard.net/aggbug.aspx?PostID=33666" width="1" height="1"&gt;</description><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/.net/default.aspx">.net</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/User+Contorl/default.aspx">User Contorl</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/GridView/default.aspx">GridView</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/JQuery/default.aspx">JQuery</category></item><item><title>Run time (Dynamic) attributes in C#</title><link>http://aspxwizard.net/blogs/minalabib/archive/2009/11/06/run-time-dynamic-attributes-in-c.aspx</link><pubDate>Fri, 06 Nov 2009 15:12:00 GMT</pubDate><guid isPermaLink="false">318922e2-3002-4869-8654-4cebdb510d6f:33663</guid><dc:creator>minalabib</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://aspxwizard.net/blogs/minalabib/rsscomments.aspx?PostID=33663</wfw:commentRss><comments>http://aspxwizard.net/blogs/minalabib/archive/2009/11/06/run-time-dynamic-attributes-in-c.aspx#comments</comments><description>&lt;p&gt;In the current project I was concerned to build generic user control, accept generic collection and paint collection elements details in HTML table and allow editing functionality for specific columns. The challenge is to detect the editable properties in the collection elements in the run time without knowing the collection or columns types.&lt;/p&gt;
&lt;p&gt;My idea was to decorate desired properties with custom &lt;a href="http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx"&gt;Attributes &lt;/a&gt;to specify the layout behavior; Attributes can be accessed and obtained using Reflection in the run time, the idea seems working fine.&lt;/p&gt;
&lt;p&gt;So, what are attributes in c#?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Attributes provide a powerful method of associating declarative information with C# code (types, methods, properties, and so forth). Once associated with a program entity, the attribute can be queried at run time and used in any number of way&amp;quot; - MSDN.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Also attributes are classes that inherits System.Attribute as below&lt;/p&gt;
&lt;p&gt;[AttributeUsage(AttributeTargets.Property)]&lt;/p&gt;
&lt;p&gt;public class UIAttributes : Attribute&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;private bool isReadOnly = false;&lt;/p&gt;
&lt;p&gt;public bool IsReadOnly&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;get { return isReadOnly; }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public UIAttributes(bool isReadOnly)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;this.IsReadOnly = isReadOnly;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;Then decorate class property with the custom attribute:&lt;/p&gt;
&lt;p&gt;public class ProductViewData&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;public string Name { get; set; }&lt;/p&gt;
&lt;p&gt;[UIAttributes(true)] //ProdcutID property is decorated to be read only.&lt;/p&gt;
&lt;p&gt;public int ProductID { get; set; }&lt;/p&gt;
&lt;p&gt;public double Price { get; set; }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;Then by using reflection we can detect which property has the custom attribute and paint attribute according to that.&lt;/p&gt;
&lt;p&gt;public void DetectProperties(object o)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;PropertyInfo[] propInfo = o.GetType().GetProperties();&lt;/p&gt;
&lt;p&gt;foreach(PropertyInfo prop in propInfo)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;foreach(Attribute att in prop.GetCustomAttributes(true))&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;if((att is UIAttributes) &amp;amp;&amp;amp; (((UIAttributes)att).IsReadOnly) )&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;//Do somthing.&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;But let&amp;#39;s say the same property should be editable in a view and non-editable in other view, then property behavior should be changed at run time to toggle between the editable/read-only mode, and custom attributes does now allow to be changed at runtime.&lt;/p&gt;
&lt;p&gt;So, after some readings there was no easy way to do that, but there was a great class in System.ComponentModel namespace called &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.typedescriptor.aspx"&gt;TypeDescriptor &lt;/a&gt;which allow dynamically assigning and querying metadata on instance on runtime, it seems like it is our solution.&lt;/p&gt;
&lt;p&gt;The only drawback is the long way to implement it, so first I built Interface representing any type need to follow my custom attribute:&lt;/p&gt;
&lt;p&gt;Interface:&lt;/p&gt;
&lt;p&gt;public interface IUIAttributes&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;bool IsReadOnly(string PName);&lt;/p&gt;
&lt;p&gt;bool IsReadOnly();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;Custom Attribute:&lt;/p&gt;
&lt;p&gt;[AttributeUsage(AttributeTargets.Property)]&lt;/p&gt;
&lt;p&gt;public class UIAttributes : Attribute&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;private bool isReadOnly = false;&lt;/p&gt;
&lt;p&gt;public bool IsReadOnly&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;get { return isReadOnly; }&lt;/p&gt;
&lt;p&gt;set { isReadOnly = value; }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public UIAttributes()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public UIAttributes(bool isReadOnly)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;this.IsReadOnly = isReadOnly;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;Any Class implements the interface:&lt;/p&gt;
&lt;p&gt;public class ProductViewData : IUIAttributes&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;public string Name { get; set; }&lt;/p&gt;
&lt;p&gt;public int ProductID { get; set; }&lt;/p&gt;
&lt;p&gt;public double Price { get; set; }&lt;/p&gt;
&lt;p&gt;#region IUIAttributes Members&lt;/p&gt;
&lt;p&gt;bool IUIAttributes.IsReadOnly(string PName)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;if (PName.Equals(&amp;quot;ProductID&amp;quot;))&lt;/p&gt;
&lt;p&gt;return true;&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;return false;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;bool IUIAttributes.IsReadOnly()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;return false;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;#endregion&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;Now I have to write a CustomTypeDescriptor and Provider, this descriptor will create instances of my custom attribute UIAttribute and associate them to types that implement the Interface:&lt;/p&gt;
&lt;p&gt;public sealed class CustomTypeDescriptionProvider : TypeDescriptionProvider where T : IUIAttributes&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;///&lt;/p&gt;
&lt;p&gt;/// Constructor&lt;/p&gt;
&lt;p&gt;///&lt;/p&gt;
&lt;p&gt;public CustomTypeDescriptionProvider(TypeDescriptionProvider parent)&lt;/p&gt;
&lt;p&gt;: base(parent)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;///&lt;/p&gt;
&lt;p&gt;/// Create and return a custom type descriptor and chains it with the original&lt;/p&gt;
&lt;p&gt;/// custom type descriptor&lt;/p&gt;
&lt;p&gt;///&lt;/p&gt;
&lt;p&gt;public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;return new UIAttributeCustomTypeDescriptor(base.GetTypeDescriptor(objectType, instance));&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public sealed class UIAttributeCustomTypeDescriptor : CustomTypeDescriptor where T : IUIAttributes&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;///&lt;/p&gt;
&lt;p&gt;/// Constructor&lt;/p&gt;
&lt;p&gt;///&lt;/p&gt;
&lt;p&gt;public UIAttributeCustomTypeDescriptor(ICustomTypeDescriptor parent)&lt;/p&gt;
&lt;p&gt;: base(parent)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public override AttributeCollection GetAttributes()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;Type UIType = typeof(T).GetInterface(typeof(IUIAttributes).Name);&lt;/p&gt;
&lt;p&gt;if (UIType != null)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;IUIAttributes UIInstance = GetPropertyOwner(base.GetProperties().Cast&amp;lt;PropertyDescriptor&amp;gt;().First()) as IUIAttributes;&lt;/p&gt;
&lt;p&gt;bool instanceLevelRoles = UIInstance.IsReadOnly();&lt;/p&gt;
&lt;p&gt;List&amp;lt;Attribute&amp;gt; attributes = new List&amp;lt;Attribute&amp;gt;(base.GetAttributes().Cast&amp;lt;Attribute&amp;gt;());&lt;/p&gt;
&lt;p&gt;UIAttributes UIAttrib = new UIAttributes(instanceLevelRoles);&lt;/p&gt;
&lt;p&gt;TypeDescriptor.AddAttributes(UIInstance, UIAttrib);&lt;/p&gt;
&lt;p&gt;attributes.Add(UIAttrib);&lt;/p&gt;
&lt;p&gt;return new AttributeCollection(attributes.ToArray());&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;return base.GetAttributes();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;///&lt;/p&gt;
&lt;p&gt;/// This method add a new property to the original collection&lt;/p&gt;
&lt;p&gt;///&lt;/p&gt;
&lt;p&gt;public override PropertyDescriptorCollection GetProperties()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;// Enumerate the original set of properties and create our new set with it&lt;/p&gt;
&lt;p&gt;PropertyDescriptorCollection originalProperties = base.GetProperties();&lt;/p&gt;
&lt;p&gt;List&amp;lt;PropertyDescriptor&amp;gt; newProperties = new List&amp;lt;PropertyDescriptor&amp;gt;();&lt;/p&gt;
&lt;p&gt;Type UIType = typeof(T).GetInterface(&amp;quot;IUIAttributes&amp;quot;);&lt;/p&gt;
&lt;p&gt;if (UIType != null)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;foreach (PropertyDescriptor pd in originalProperties)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;IUIAttributes UIInstance = GetPropertyOwner(pd) as IUIAttributes;&lt;/p&gt;
&lt;p&gt;bool propertyIsReadOnly = UIInstance.IsReadOnly(pd.Name);&lt;/p&gt;
&lt;p&gt;UIAttributes UIAttrib = new UIAttributes(propertyIsReadOnly);&lt;/p&gt;
&lt;p&gt;// Create a new property and add it to the collection&lt;/p&gt;
&lt;p&gt;PropertyDescriptor newProperty = TypeDescriptor.CreateProperty(typeof(T), pd.Name, pd.PropertyType, UIAttrib);&lt;/p&gt;
&lt;p&gt;newProperties.Add(newProperty);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;// Finally return the list&lt;/p&gt;
&lt;p&gt;return new PropertyDescriptorCollection(newProperties.ToArray(), true);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;return base.GetProperties();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;I have overridden GetAttributes in which I query the underlying instance to get read-only mode of the instance. Similarly, I have also overridden GetProperties which will in turn query the instance to get read-only mode of the specified property name. &lt;/p&gt;
&lt;p&gt;We are now ready to associate the UIAttribute with our class instances.&lt;/p&gt;
&lt;p&gt;ProductViewData pvd = new ProductViewData();&lt;/p&gt;
&lt;p&gt;pvd.ProductID = 1;&lt;/p&gt;
&lt;p&gt;pvd.Name = &amp;quot;Product1&amp;quot;;&lt;/p&gt;
&lt;p&gt;pvd.Price = 99.99;&lt;/p&gt;
&lt;p&gt;TypeDescriptor.AddProvider(new CustomTypeDescriptionProvider&amp;lt;ProductViewData&amp;gt;(TypeDescriptor.GetProvider(typeof(ProductViewData))),pvd);&lt;/p&gt;
&lt;p&gt;And then by Reflection we can get properties attributes and check its layout behavior without knowing instance type, in next piece of code ‘Model’ is the instance name and ‘Name’ is the property name.&lt;/p&gt;
&lt;p&gt;public bool IsPropReadOnly(string Name)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;bool readonlyatt = false;&lt;/p&gt;
&lt;p&gt;UIAttributes uiatt = TypeDescriptor.GetAttributes(Model).Cast&amp;lt;Attribute&amp;gt;().SingleOrDefault(a =&amp;gt; a.GetType().Name == typeof(UIAttributes).Name) as UIAttributes;&lt;/p&gt;
&lt;p&gt;if ((uiatt != null) &amp;amp;&amp;amp; uiatt.IsReadOnly)&lt;/p&gt;
&lt;p&gt;return uiatt.IsReadOnly;&lt;/p&gt;
&lt;p&gt;PropertyInfo propInfo = Model.GetType().GetProperty(Name);&lt;/p&gt;
&lt;p&gt;//(propInfo =&amp;gt;&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;PropertyDescriptor propDescriptor = TypeDescriptor.GetProperties(Model).Cast&amp;lt;PropertyDescriptor&amp;gt;().SingleOrDefault(p =&amp;gt; propInfo.Name == p.Name);&lt;/p&gt;
&lt;p&gt;if (propDescriptor != null)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;UIAttributes attrib = propDescriptor.Attributes.Cast&amp;lt;Attribute&amp;gt;().SingleOrDefault(p =&amp;gt; p.GetType().Name == typeof(UIAttributes).Name) as UIAttributes;&lt;/p&gt;
&lt;p&gt;if (attrib != null)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;readonlyatt = attrib.IsReadOnly;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;//);&lt;/p&gt;
&lt;p&gt;return readonlyatt;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;Thanks for this &lt;a href="http://geekswithblogs.net/abhijeetp/archive/2009/01/10/dynamic-attributes-in-c.aspx"&gt;Post&lt;/a&gt; it helps a lot.&lt;/p&gt;&lt;img src="http://aspxwizard.net/aggbug.aspx?PostID=33663" width="1" height="1"&gt;</description><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/.net/default.aspx">.net</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/TypeDescriptor/default.aspx">TypeDescriptor</category><category domain="http://aspxwizard.net/blogs/minalabib/archive/tags/Attributes/default.aspx">Attributes</category></item></channel></rss>