<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results for 'app:weblogs' matching tag '.NET Framework 2.0'</title><link>http://msmvps.com/search/SearchResults.aspx?q=app:weblogs&amp;tag=.NET+Framework+2.0&amp;orTags=0&amp;o=DateDescending</link><description>Search results for 'app:weblogs' matching tag '.NET Framework 2.0'</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Configurando acceso an&amp;#243;nimo y restringido a una Extranet de SharePoint 2007 en 30 minutos</title><link>http://msmvps.com/blogs/haarongonzalez/archive/2011/05/18/configurando-acceso-an-243-nimo-y-restringido-a-una-extranet-de-sharepoint-2007-en-30-minutos.aspx</link><pubDate>Wed, 18 May 2011 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1793479</guid><dc:creator>haaron</dc:creator><description>&lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:5px 0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top:0px;border-right:0px;padding-top:0px;" title="ahorrar_en_proveedores_articulo_portrait" alt="ahorrar_en_proveedores_articulo_portrait" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/haarongonzalez.metablogapi/3716.ahorrar_5F00_en_5F00_proveedores_5F00_articulo_5F00_portrait_5F00_5A5E372A.jpg" align="right" border="0" height="240" width="226" /&gt;Continuando con el tema de la &lt;a href="http://msmvps.com/blogs/haarongonzalez/archive/2011/05/13/intranet-extranet-de-sharepoint-en-40-minutos.aspx"&gt;Intranet-Extranet configurada aqu&amp;iacute;&lt;/a&gt;, me di a la tarea de ac&amp;eacute;rcame al siguiente reto una vez que enfrentamos un escenario de extranet. Este reto consiste en ofrecer a los usuarios externos alg&amp;uacute;n mecanismo de registro y de gesti&amp;oacute;n de perfiles. En este video vemos como configurar el acceso an&amp;oacute;nimo en la zona de Extranet, vemos como utilizando SharePoint Designer 2007 podemos personalizar p&amp;aacute;ginas que hagan uso de controles de servidor de ASP.NET 2.0 y de WebParts de SharePoint. &lt;/p&gt;
&lt;p&gt;Adicional vemos como romper con la herencia de permisos para poder contar con porciones de contenido privadas y p&amp;uacute;blicas. Las p&amp;uacute;blicas, son p&amp;aacute;ginas de registro y de inicio de sesi&amp;oacute;n, las privadas son p&amp;aacute;ginas restringidas que muestran mediante WebParts listas personalizadas configuradas especialmente. &lt;/p&gt;
&lt;p&gt;Dicho lo anterior, esto permite ofrecer un mecanismo para restringir el acceso a ciertas listas y solo hasta que el usuario se registre, alguien con permisos elevados desde la Intranet otorgue el rol &amp;ldquo;Extranet&amp;rdquo; al usuario en cuesti&amp;oacute;n (esto permite contar con un proceso de validaci&amp;oacute;n del usuario antes de darle acceso a cualquier contenido restringido) este podr&amp;iacute;a acceder a subir la informaci&amp;oacute;n requerida. &lt;/p&gt;
&lt;p&gt;Adicional, vemos como configurar una lista personalizada de SharePoint para que la informaci&amp;oacute;n que el usuario externo aporte sea visible solo para &amp;eacute;l y para cualquier usuario de la Intranet, permitiendo con esto aplicar algunas otras funcionalidades de SharePoint para colaboraci&amp;oacute;n o seguimiento interno por parte de empleados de la organizaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;El ejemplo se basa en un escenario de extranet para proveedores donde estos pueden subir documentaci&amp;oacute;n e informaci&amp;oacute;n de negocio que permita a la empresa iniciar con los tr&amp;aacute;mites necesarios para darlo de alta como proveedor. Adicional, este ejemplo podr&amp;iacute;a utilizarse como un mecanismo para concurso de RFPs o para recopilaci&amp;oacute;n de informaci&amp;oacute;n provista por actores externos a la empresa pero que participan en la cadena de valor.&lt;/p&gt;
&lt;p&gt;Espero sea de utilidad, est&amp;aacute; por dem&amp;aacute;s decir que este es un ejemplo de tan solo 30 minutos que ilustra conceptos y aspectos tecnol&amp;oacute;gicos que pudiesen acercarse a una soluci&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;iframe src="http://www.youtube.com/embed/oRR5qXr6mhQ" frameborder="0" height="349" width="425"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Utilizar estos consejos es bajo tu propio riesgo, explora, aprende y comparte!.&lt;/p&gt;
&lt;p&gt;HG &lt;/p&gt;</description></item><item><title>Configurando controles ASPXGridView de DevExpress en SharePoint</title><link>http://msmvps.com/blogs/haarongonzalez/archive/2010/05/13/1765488.aspx</link><pubDate>Thu, 13 May 2010 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1765488</guid><dc:creator>haaron</dc:creator><description>&lt;p&gt;Sabemos que SharePoint está construido sobre ASP.NET 2.0 y esto nos da una gran cantidad de ventajas disponibles para utilizar componentes de terceros ricos en funcionalidad. Tal es el caso de los componentes de &lt;a href="http://devexpress.com/"&gt;DevExpress&lt;/a&gt; empresa de &lt;a href="http://community.devexpress.com/blogs/markmiller/"&gt;Mark Miller&lt;/a&gt; un pionero en la construcción de herramientas de productividad para el desarrollador Delphi y .NET. &lt;/p&gt;  &lt;p&gt;En el último proyecto donde participe como programador tuve la oportunidad de implementar la &lt;a href="http://devexpress.com/Products/NET/Controls/ASP/Grid/"&gt;Suite de controles ASPXGridView&lt;/a&gt; de &lt;a href="http://devexpress.com/"&gt;DevExpress&lt;/a&gt; para soportar un escenario el despliegue de datos de manera jerárquica y la flexibilidad de agrupación dinámica sobre SharePoint.&lt;/p&gt;  &lt;p&gt;Utilice el &lt;a href="http://devexpress.com/Products/NET/Controls/ASP/Tree_List/"&gt;ASPXTreeList&lt;/a&gt; y el &lt;a href="http://demos.devexpress.com/ASPxGridViewDemos/Default.aspx"&gt;ASPXGridView&lt;/a&gt;, a continuación los pasos para configurar y usar estos objetos. La misma suite tiene archivos WSP para implementar sobre SharePoint los controles, estos WSP automáticamente configuran todo lo necesario para poder usarlos. Sin embargo, aquí dejo los pasos manuales.&lt;/p&gt;  &lt;p&gt;Registrar en el Global Assembly Cache los componentes de DevExpress.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;DevExpress.Data.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a &lt;/li&gt;    &lt;li&gt;DevExpress.Data.v9.3.Linq, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a &lt;/li&gt;    &lt;li&gt;DevExpress.Utils.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a &lt;/li&gt;    &lt;li&gt;DevExpress.Web.ASPxEditors.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a &lt;/li&gt;    &lt;li&gt;DevExpress.Web.ASPxGridView.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a &lt;/li&gt;    &lt;li&gt;DevExpress.Web.ASPxHtmlEditor.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a &lt;/li&gt;    &lt;li&gt;DevExpress.Web.ASPxSpellChecker.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a &lt;/li&gt;    &lt;li&gt;DevExpress.Web.ASPxThemes.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a &lt;/li&gt;    &lt;li&gt;DevExpress.Web.ASPxTreeList.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a &lt;/li&gt;    &lt;li&gt;DevExpress.Web.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Manipular archivos web.config de nuestra aplicación web donde estaremos usando estos componentes y dentro de &lt;strong&gt;&amp;lt;SafeControls&amp;gt;&lt;/strong&gt; agregar lo siguiente:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;lt;SafeControl Assembly=&amp;quot;DevExpress.Data.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a&amp;quot; Namespace=&amp;quot;DevExpress.Data&amp;quot; TypeName=&amp;quot;*&amp;quot; Safe=&amp;quot;True&amp;quot; /&amp;gt; &lt;/li&gt;    &lt;li&gt;&amp;lt;SafeControl Assembly=&amp;quot;DevExpress.Web.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a&amp;quot; Namespace=&amp;quot;DevExpress.Web&amp;quot; TypeName=&amp;quot;*&amp;quot; Safe=&amp;quot;True&amp;quot; /&amp;gt; &lt;/li&gt;    &lt;li&gt;&amp;lt;SafeControl Assembly=&amp;quot;DevExpress.Web.ASPxEditors.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a&amp;quot; Namespace=&amp;quot;DevExpress.Web.ASPxEditors&amp;quot; TypeName=&amp;quot;*&amp;quot; Safe=&amp;quot;True&amp;quot; /&amp;gt; &lt;/li&gt;    &lt;li&gt;&amp;lt;SafeControl Assembly=&amp;quot;DevExpress.Web.ASPxSpellChecker.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a&amp;quot; Namespace=&amp;quot;DevExpress.Web.ASPxSpellChecker&amp;quot; TypeName=&amp;quot;*&amp;quot; Safe=&amp;quot;True&amp;quot; /&amp;gt; &lt;/li&gt;    &lt;li&gt;&amp;lt;SafeControl Assembly=&amp;quot;DevExpress.Web.ASPxHtmlEditor.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a&amp;quot; Namespace=&amp;quot;DevExpress.Web.ASPxHtmlEditor&amp;quot; TypeName=&amp;quot;*&amp;quot; Safe=&amp;quot;True&amp;quot; /&amp;gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Dentro de &lt;strong&gt;&amp;lt;httpHandlers&amp;gt;&lt;/strong&gt; agregar:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;lt;add type=&amp;quot;DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a&amp;quot; verb=&amp;quot;GET&amp;quot; path=&amp;quot;DX.ashx&amp;quot; validate=&amp;quot;false&amp;quot; /&amp;gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Dentro de &lt;strong&gt;&amp;lt;httpModules&amp;gt;&lt;/strong&gt; agregar:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;lt;add type=&amp;quot;DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a&amp;quot; name=&amp;quot;ASPxHttpHandlerModule&amp;quot; /&amp;gt; &lt;/li&gt; &lt;/ul&gt;</description></item><item><title>Serie de WebCast sobre VSTS</title><link>http://msmvps.com/blogs/haarongonzalez/archive/2006/11/02/240040.aspx</link><pubDate>Thu, 02 Nov 2006 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:240040</guid><dc:creator>haaron</dc:creator><description>&lt;p&gt;Serie de WebCast sobre Visual Studio 2005 Team System. Para las personas que estuvieron en mi platica sobre VSTS el dia de ayer, estoy seguro estos webcast les seran de utilidad asi que aqui les dejo el link del blog donde encontre esta informacion: &lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/genewebb/archive/2006/11/02/essential-visual-studio-team-system-webcast-series.aspx" id="ctl00_ctl00_bcr_AggPosts___Posts___Posts_ctl20_TitleLink"&gt;Essential Visual Studio Team System Webcast Series&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Ejemplo Practico UpdatePanel y UpdateProgress</title><link>http://msmvps.com/blogs/haarongonzalez/archive/2006/10/09/164609.aspx</link><pubDate>Mon, 09 Oct 2006 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:164609</guid><dc:creator>haaron</dc:creator><description>&lt;p&gt;Tratando de encontrar un ejemplo pr&amp;aacute;ctico que pueda ilustrar mejor lo que escrib&amp;iacute; hace unos d&amp;iacute;as sobre lo b&amp;aacute;sico de los controles &lt;a href="http://msmvps.com/blogs/haarongonzalez/archive/2006/10/08/162957.aspx"&gt;UpdatePanel&lt;/a&gt; y &lt;a href="http://msmvps.com/blogs/haarongonzalez/archive/2006/10/08/162961.aspx"&gt;UpdateProgress&lt;/a&gt; dejo a continuaci&amp;oacute;n un proyecto ASP.NET 2.0 que implementa la funcionalidad antes mencionada en el siguiente escenario. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;De que se trata &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;En la base de datos AdventureWorks contamos con la tabla Product la cual contiene informaci&amp;oacute;n sobre productos y datos adicionales relacionados con el control de inventarios. En este escenario lo que haremos es permitir al usuario actualizar la informaci&amp;oacute;n de control de inventario para cada producto. En un control GridView mostramos los productos filtrados por una sub categor&amp;iacute;a y adem&amp;aacute;s habilitamos en la vista principal la capacidad de que se capture la informaci&amp;oacute;n de dos columnas (Nivel Optimo y Punto de Reorden). Una vez que el usuario termine de capturar la informaci&amp;oacute;n da clic sobre el bot&amp;oacute;n actualizar el cual se encarga de recorrer el listado y hacer la actualizaciones correspondientes. &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="http://msmvps.com/photos/haarongonzalez/images/164595/original.aspx"&gt;&lt;img alt="ejemplopractico01.jpg" border="0" height="288" id="_ctl0____ctl0____ctl0__ctl0_bcr_PictureDetails1___detailsImage_SmallThumb164595" src="http://msmvps.com/photos/haarongonzalez/images/164595/425x288.aspx" width="425" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Mediante el uso de Atlas UpdatePanel y UpdateProgress creamos una interface de usuario verdaderamente responsiva para este sencillo proceso logrando que el usuario tenga una mejor experiencia. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Como funciona &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Nosotros podemos especificar que eventos de los controles de nuestro formulario web disparan una llamada asincr&amp;oacute;nica realizada por el control UpdatePanel a trav&amp;eacute;s de la secci&amp;oacute;n &lt;span style="font-family:Courier New;"&gt;&lt;strong&gt;&amp;ldquo;&amp;lt;Triggers&amp;gt;&amp;rdquo;.&lt;/strong&gt;&lt;/span&gt; Como vemos en la siguiente declaraci&amp;oacute;n dentro de la secci&amp;oacute;n &amp;ldquo;&amp;lt;&lt;span style="font-family:Courier New;"&gt;&lt;strong&gt;Triggers&amp;gt;&amp;rdquo;&lt;/strong&gt;&lt;/span&gt; estamos diciendo que cuando el &amp;ldquo;&lt;strong&gt;Button1&lt;/strong&gt;&amp;rdquo; dispare el evento &amp;ldquo;&lt;strong&gt;Click&lt;/strong&gt;&amp;rdquo; entonces nuestro control UpgradePanel realizara su trabajo. Lo mismo sucede con el evento &amp;ldquo;&lt;strong&gt;SelectIndexChanged&lt;/strong&gt;&amp;rdquo; de nuestro control &amp;ldquo;&lt;strong&gt;DropDownList1&lt;/strong&gt;&amp;rdquo; causando que nuestro &lt;strong&gt;GridView&lt;/strong&gt; simplemente se refresque sin realizar un PostBack al servidor.&lt;strong&gt; [Ver ejemplo 1]&lt;/strong&gt;. Ahora nuestro control &lt;strong&gt;GridView&lt;/strong&gt; tiene un comportamiento muy sencillo ya que para rengl&amp;oacute;n mostrado en las columnas donde requerimos captura de datos simplemente mostramos un control de tipo &lt;strong&gt;TextBox&lt;/strong&gt;. Eso lo logramos utilizando la funcionalidad de &amp;ldquo;&lt;span style="font-family:Courier New;"&gt;&lt;strong&gt;&amp;lt;ItemTemplate&amp;gt;&amp;rdquo;&lt;/strong&gt;&lt;/span&gt; de una columna de tipo &lt;span style="font-family:Courier New;"&gt;&lt;strong&gt;&amp;ldquo;&amp;lt;TemplateField&amp;gt;&amp;rdquo;.&lt;/strong&gt;&lt;/span&gt; Una columna de tipo &lt;span style="font-family:Courier New;"&gt;&lt;strong&gt;&amp;ldquo;&amp;lt;TemplateField&amp;gt;&amp;rdquo;&lt;/strong&gt;&lt;/span&gt; en cualquier contexto de los controles &lt;strong&gt;GridView&lt;/strong&gt;, &lt;strong&gt;DetailsView&lt;/strong&gt;, etc. Nos permite contener y mostrar cualquier c&amp;oacute;digo XHTML. &lt;strong&gt;[Ver ejemplo 2]&lt;/strong&gt;. &lt;/p&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdatePanel&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;UpdatePanel1&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;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4d5d2c;"&gt;&amp;lt;!&amp;mdash;ejemplo 1 --&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;background-color:yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;background-color:yellow;"&gt;Triggers&lt;/span&gt;&lt;span style="color:blue;background-color:yellow;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ControlEventTrigger&lt;/span&gt; &lt;span style="color:red;"&gt;ControlID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;DropDownList1&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;EventName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;SelectedIndexChanged&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ControlEventTrigger&lt;/span&gt; &lt;span style="color:red;"&gt;ControlID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;EventName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Click&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;Triggers&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;GridView&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;GridView1&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;DataKeyNames&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ProductID&amp;quot; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;DataSourceID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;productsDataSource&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;601px&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;GridLines&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;None&amp;quot; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;BorderStyle&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;None&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;CaptionAlign&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Right&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;BorderWidth&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;3px&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;CellPadding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;Columns&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;BoundField&lt;/span&gt; &lt;span style="color:red;"&gt;DataField&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ProductID&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ProductID&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;InsertVisible&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;ReadOnly&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ProductID&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Visible&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;BoundField&lt;/span&gt; &lt;span style="color:red;"&gt;DataField&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Name&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Nombre del Articulo&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Name&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;BoundField&lt;/span&gt; &lt;span style="color:red;"&gt;DataField&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ProductNumber&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Codigo&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ProductNumber&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;span style="color:#4d5d2c;"&gt;&amp;lt;!&amp;mdash;ejemplo 2 --&amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="color:blue;background-color:yellow;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;background-color:yellow;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;background-color:yellow;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;background-color:yellow;"&gt;TemplateField&lt;/span&gt;&lt;span style="background-color:yellow;"&gt; &lt;span style="color:red;"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Nivel Optimo&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;SafetyStockLevel&amp;quot;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TextBox&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;safetelyStockLevel&amp;quot;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;#39;&lt;/span&gt;&amp;lt;%# Bind(&amp;quot;SafetyStockLevel&amp;quot;, &amp;quot;{0}&amp;quot;) %&amp;gt;&lt;span style="color:blue;"&gt;&amp;#39; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;40px&amp;quot;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:red;"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;control-textbox&amp;quot;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TextBox&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TemplateField&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TemplateField&lt;/span&gt; &lt;span style="color:red;"&gt;HeaderText&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Punto de Reorden&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;SortExpression&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ReorderPoint&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TextBox&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;reorderLevel&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;#39;&lt;/span&gt;&lt;span style="background-color:yellow;"&gt;&amp;lt;%&lt;/span&gt;# Bind(&amp;quot;ReorderPoint&amp;quot;, &amp;quot;{0}&amp;quot;) &lt;span style="background-color:yellow;"&gt;%&amp;gt;&lt;/span&gt;&amp;#39;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;40px&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;control-textbox&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TextBox&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TemplateField&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;Columns&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;HeaderStyle&lt;/span&gt; &lt;span style="color:red;"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;control-gridview-header&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;RowStyle&lt;/span&gt; &lt;span style="color:red;"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;control-gridview-item&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;AlternatingRowStyle&lt;/span&gt; &lt;span style="color:red;"&gt;CssClass&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;control-gridview-alternate&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;GridView&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;Cuando el usuario da clic sobre el bot&amp;oacute;n &amp;ldquo;Actualizar&amp;rdquo; se ejecuta un c&amp;oacute;digo que recorre cada elemento del control &lt;strong&gt;GridView&lt;/strong&gt; y manda ejecutar el comportamiento de actualizaci&amp;oacute;n de nuestro control no visual &amp;ldquo;&lt;strong&gt;SqlDataSource&lt;/strong&gt;&amp;rdquo; el cual tiene declarado tres par&amp;aacute;metros necesarios para ejecutar la actualizaci&amp;oacute;n del registro. Si recordamos nuestras declaraciones &lt;span style="font-family:Courier New;"&gt;&lt;strong&gt;&amp;ldquo;&amp;lt;Trigger&amp;gt;&amp;rdquo;&lt;/strong&gt;&lt;/span&gt; del control UpdatePanel especificamos que precisamente el evento &amp;ldquo;&lt;strong&gt;Click&lt;/strong&gt;&amp;rdquo; del control &amp;ldquo;Button1&amp;rdquo; disparara la llamada causando que el siguiente c&amp;oacute;digo se ejecute asincr&amp;oacute;nicamente v&amp;iacute;a &lt;strong&gt;XmlHttp&lt;/strong&gt;. &lt;/p&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="color:blue;background-color:yellow;"&gt;protected&lt;/span&gt;&lt;span style="background-color:yellow;"&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Button1_Click(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:teal;"&gt;EventArgs&lt;/span&gt; e) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;{ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; GridView1.Rows.Count; i++) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;{ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;&lt;span style="color:teal;"&gt;GridViewRow&lt;/span&gt; row = GridView1.Rows&lt;img src="http://msmvps.com/emoticons/emotion-55.gif" alt="Idea" /&gt;; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;productsDataSource.UpdateParameters[0].DefaultValue = ((&lt;span style="color:teal;"&gt;TextBox&lt;/span&gt;)row.Cells[0].FindControl(&lt;span style="color:maroon;"&gt;&amp;quot;safetelyStockLevel&amp;quot;&lt;/span&gt;)).Text; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;productsDataSource.UpdateParameters[1].DefaultValue = ((&lt;span style="color:teal;"&gt;TextBox&lt;/span&gt;)row.Cells[0].FindControl(&lt;span style="color:maroon;"&gt;&amp;quot;reorderLevel&amp;quot;&lt;/span&gt;)).Text; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;productsDataSource.UpdateParameters[2].DefaultValue = GridView1.DataKeys&lt;img src="http://msmvps.com/emoticons/emotion-55.gif" alt="Idea" /&gt;.Value.ToString(); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;productsDataSource.Update(); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;} &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="background-color:yellow;"&gt;}&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;SqlDataSource&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;productsDataSource&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;ConnectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="background-color:yellow;"&gt;&amp;lt;%&lt;/span&gt;$ ConnectionStrings:AdventureWorksCnn &lt;span style="background-color:yellow;"&gt;%&amp;gt;&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;SelectCommand&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;SELECT ProductID, Name, ProductNumber, SafetyStockLevel, ReorderPoint FROM Production.Product WHERE (ProductSubcategoryID = @subcategory)&amp;quot; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;UpdateCommand&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;UPDATE Production.Product SET SafetyStockLevel = @safety, ReorderPoint = @reorder WHERE (ProductID = @productID)&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdateParameters&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Parameter&lt;/span&gt; &lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;safety&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Parameter&lt;/span&gt; &lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;reorder&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Parameter&lt;/span&gt; &lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;productID&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdateParameters&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ControlParameter&lt;/span&gt; &lt;span style="color:red;"&gt;ControlID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;DropDownList1&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;subcategory&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;PropertyName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;SelectedValue&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;SqlDataSource&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span&gt;&lt;a href="http://msmvps.com/photos/haarongonzalez/images/164596/original.aspx"&gt;&lt;img alt="ejemplopractico02.jpg" border="0" height="280" id="_ctl0____ctl0____ctl0__ctl0_bcr_PictureDetails1___detailsImage_SmallThumb164596" src="http://msmvps.com/photos/haarongonzalez/images/164596/425x280.aspx" width="425" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Esperando te sea &amp;uacute;til este peque&amp;ntilde;o ejemplo te dejo proyecto y el c&amp;oacute;digo fuente para que lo descargues. Aseg&amp;uacute;rate de contar con una instancia local de SQL Server 2005 o Express Edition que contenga la base de datos AdventureWorks. &lt;/p&gt;&lt;p&gt;Descargas &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;AdventureWorks Database: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E719ECF7-9F46-4312-AF89-6AD8702E4E6E&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=E719ECF7-9F46-4312-AF89-6AD8702E4E6E&amp;amp;displaylang=en&lt;/a&gt; &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Ejemplo Practico UpdatePanel y UpdateProgress. &lt;a href="http://msmvps.com/files/folders/164607/download.aspx"&gt;http://msmvps.com/files/folders/164607/download.aspx&lt;/a&gt; &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Suerte!!&lt;/p&gt;</description></item><item><title>Web Part en ASP.NET 2.0</title><link>http://msmvps.com/blogs/haarongonzalez/archive/2006/10/06/157939.aspx</link><pubDate>Fri, 06 Oct 2006 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:157939</guid><dc:creator>haaron</dc:creator><description>&lt;p&gt;Veamos c&amp;oacute;mo podemos configure una aplicaci&amp;oacute;n web ASP.NET &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.0 para que soporte el uso de Web Parts. Los Web Parts proveen de un mecanismo muy sencillo para construir sitios web de manera modular y que se puedan personalizar din&amp;aacute;micamente, incluso al gusto del usuario final ofreci&amp;eacute;ndole una mejor experiencia. Imagina la idea de que el usuario final decida como desea que se le presente la informaci&amp;oacute;n de una p&amp;aacute;gina, en qu&amp;eacute; orden y en qu&amp;eacute; posici&amp;oacute;n los elementos de la misma ser&amp;aacute;n acomodados y presentados. Este concepto es muy com&amp;uacute;n en portales como Windows SharePoint Services y cada vez mas es adoptado en las aplicaciones de hoy en d&amp;iacute;a como por ejemplo los Espacios de MSN o Windows Live que soportan este tipo de comportamiento. &lt;/p&gt;&lt;p&gt;En este peque&amp;ntilde;o post veremos como con la tecnolog&amp;iacute;a para el desarrollo web ASP.NET 2.0 podemos configurar r&amp;aacute;pidamente algunos componentes del .NET Framework 2.0 que nos permiten habilitar y programar Web Parts en nuestros formularios web. &lt;/p&gt;&lt;p&gt;Los sitios que soportan este concepto de personalizaci&amp;oacute;n y de modularidad deben de permitir al usuario final la posibilidad de mostrar la pagina en distintos modos: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;En el modo normal (Normal Mode) el Web Part Framework muestra la p&amp;aacute;gina en un estado normal sin la posibilidad alguna de edici&amp;oacute;n o manipulaci&amp;oacute;n. &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;En el modo de edici&amp;oacute;n (Edit Mode) el Web Part Framework permite al usuario seleccionar una secci&amp;oacute;n en particular de la pagina para su completa edici&amp;oacute;n como los t&amp;iacute;tulos o colores del Web Part. &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;En el modo de diseno (Design Mode) el Web Part Framework permite a los usuario finales re ajustar el orden de los componentes modulares de la pagina. &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;En el modo catalogo (Catalog Mode) el Web Part Framework despliega una lista de secciones disponibles (Web PAts) que se pueden integrar a la p&amp;aacute;gina. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;El primer concepto que debemos conocer para habilitar esta funcionalidad es el de zonas. Las zonas son las divisiones de una p&amp;aacute;gina susceptibles a mostrar o trabajar con web parts. Estas zonas las podemos declarar dentro de cualquier elemento HTML, normalmente utilizamos tablas para crear el esqueleto donde colocaremos nuestros web parts. Para que las zonas y web parts funcionen correctamente contamos con un control no visual llamado WebPartManager el cual administra los estados de las zonas y su contenido basado en un contexto de usuario. Este control tiene la capacidad de agregar o eliminar los elementos contenidos en cualquiera de las zonas y adem&amp;aacute;s la facultad de comunicar o pasar datos entre webparts con otros web parts de otra zona. Podemos declararlo en nuestro pagina aspx o podemos arrastrarlo del cuadro de herramientas de Visual Studio 2005. &lt;/p&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;WebPartManager&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;WebPartManager1&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;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;WebPartManager&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;Un consejo valioso es que si estas utilizando Master Pages te recomiendo que mejor hagas esta declaraci&amp;oacute;n sobre la pagina maestra para replicar esta declaraci&amp;oacute;n en todos los formularios de la aplicaci&amp;oacute;n y en cualquier momento usar el comportamiento modular. &lt;/p&gt;&lt;p&gt;Antes de continuar con la declaraci&amp;oacute;n de las zonas, vamos a crear una tabla como la que se muestra a continuaci&amp;oacute;n: &lt;/p&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text-align: center&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt; &lt;span style="color:red;"&gt;border&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;cellpadding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;cellspacing&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;width: 800px; height: 400px&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;width: 100px&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;width: 11px&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;width: 100px&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;El siguiente paso es declarar nuestras zonas dentro de cada celda de la tabla creada. Utilizando el control WebPartZone de la caja de herramientas de Visual Studio 2005 podemos arr&amp;aacute;stralo a cada una de las celdas de nuestra tabla. Cabe mencionar que dentro de la zona es donde por fin podremos especificar aquellos controles que estamos acostumbrados a utilizar para programar nuestra aplicaci&amp;oacute;n. Tenemos que especificar dentro de nuestra control WebPartZone una secci&amp;oacute;n llamada &amp;lt;ZoneTemplate&amp;gt; que ser&amp;aacute; nuestra plantilla HTML donde podremos colocar los controles de nuestra p&amp;aacute;gina. En mi caso utilizare unos controles de usuario creados por m&amp;iacute;. Est&amp;aacute;n sencillo solamente muestra informaci&amp;oacute;n en un control GridView. &lt;/p&gt;&lt;p&gt;Primero agregamos nuestras dos zonas quedando de la siguiente manera: &lt;/p&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt; &lt;span style="color:red;"&gt;border&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;cellpadding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;cellspacing&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;5&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;width: 800px; height: 400px&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;width: 100px; text-align: left;&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;WebPartZone&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;WebPartZone1&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;&lt;/span&gt; &lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;400px&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;390px&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ZoneTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;uc1&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;EmployeeList&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;EmployeeList1&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;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ZoneTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;WebPartZone&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;width: 11px&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;width: 100px; text-align: left;&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;WebPartZone&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;WebPartZone2&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;&lt;/span&gt; &lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;400px&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;390px&amp;quot;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ZoneTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Calendar&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Calendar1&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;&lt;/span&gt; &lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;275px&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;380px&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Calendar&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ZoneTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;WebPartZone&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;Y para finalizar, tenemos que especificar alg&amp;uacute;n mecanismo que nos permita a nuestra pagina cambiar de estado y podamos mover nuestros web parts de zona a zona. Para lograrlo simplemente vamos a agregar un control DropDownList fuera de las zonas y escribimos el siguiente c&amp;oacute;digo, no olvidemos seleccionar la propiedad AutoPostBack = True: &lt;/p&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:teal;"&gt;EventArgs&lt;/span&gt; e) &lt;/p&gt;&lt;p&gt;{ &lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (!Page.IsPostBack) &lt;/p&gt;&lt;p&gt;{ &lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:teal;"&gt;WebPartDisplayMode&lt;/span&gt; mode &lt;span style="color:blue;"&gt;in&lt;/span&gt; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.WebPartManager1.SupportedDisplayModes) &lt;/p&gt;&lt;p&gt;{ &lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; modeName = mode.Name; &lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.DropDownList1.Items.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;ListItem&lt;/span&gt;(modeName, modeName)); &lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;&lt;p&gt;} &lt;/p&gt;&lt;p&gt;} &lt;/p&gt;&lt;p&gt;} &lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; DropDownList1_SelectedIndexChanged(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:teal;"&gt;EventArgs&lt;/span&gt; e) &lt;/p&gt;&lt;p&gt;{ &lt;/p&gt;&lt;p&gt;&lt;span style="color:teal;"&gt;WebPartDisplayMode&lt;/span&gt; displayMode = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.WebPartManager1.SupportedDisplayModes[&lt;span style="color:blue;"&gt;this&lt;/span&gt;.DropDownList1.SelectedValue.ToString()]; &lt;/p&gt;&lt;p&gt;WebPartManager1.DisplayMode = displayMode; &lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:12px;font-family:Courier New;"&gt;}&lt;/span&gt; &lt;/p&gt;&lt;p&gt;Con este c&amp;oacute;digo simplemente se muestran los modos disponibles para nuestra p&amp;aacute;gina en una lista desplegable. Al seleccionar el modelo de dise&amp;ntilde;o &amp;ldquo;Desing&amp;rdquo; nuestra p&amp;aacute;gina mostrar&amp;aacute; las zonas disponibles y permitir&amp;aacute; mover de lugar cada uno de nuestros web parts. &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="http://msmvps.com/photos/haarongonzalez/images/157941/original.aspx"&gt;&lt;img alt="WebParts05.jpg" border="0" height="303" id="_ctl0____ctl0____ctl0__ctl0_bcr_PictureDetails1___detailsImage_SmallThumb157941" src="http://msmvps.com/photos/haarongonzalez/images/157941/425x303.aspx" width="425" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Web Client Software Factory something you may have to look!</title><link>http://msmvps.com/blogs/haarongonzalez/archive/2006/09/30/148434.aspx</link><pubDate>Sat, 30 Sep 2006 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:148434</guid><dc:creator>haaron</dc:creator><description>&lt;p&gt;For me &lt;a href="http://msdn.microsoft.com/practices"&gt;Pattern &amp;amp; Practices&lt;/a&gt; always have been a great resource. Since the release of this site, I have been following closely all the guides and they have do so much for me and also for my career. Since the release of the application blocks, all over to software factory&amp;rsquo;s I think that Patter &amp;amp; Practices Team have done a significant job influencing the use and adoption of best practices in several areas of software development. &lt;/p&gt;&lt;p&gt;Kudos to &lt;a href="http://blogs.msdn.com/rjacobs/"&gt;Ron Jacobs&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/edjez"&gt;Edward Jezierski&lt;/a&gt; and the rest of the team. &lt;/p&gt;&lt;p&gt;Right know I fell very excited for the new &lt;a href="http://www.codeplex.com/Default.aspx"&gt;Web Client Software Factory&lt;/a&gt; announcement, yes I was waiting for it and know we have it in the &lt;a href="http://www.codeplex.com/Default.aspx"&gt;CodePlex Community Site&lt;/a&gt; just for this project. &lt;strong&gt;&lt;em&gt;The &lt;a href="http://www.codeplex.com/Default.aspx"&gt;Web Client Software Factory&lt;/a&gt; is a guidance offering (under development) that will provide comprehensive architecture guidance to help us build web solutions using Microsoft Platform (ASP.NET, ASP.NET AJAX and Workflow Foundation)&lt;/em&gt;&lt;/strong&gt;. Just like the &lt;a href="http://msdn.microsoft.com/smartclientfactory"&gt;Smart Client Software Factory&lt;/a&gt; but for the web. &lt;/p&gt;&lt;p&gt;So enjoy and have fun!&lt;/p&gt;</description></item><item><title>Creando usuarios programaticamente con Membership y Profiles de ASP.NET 2.0</title><link>http://msmvps.com/blogs/haarongonzalez/archive/2006/09/02/112407.aspx</link><pubDate>Sat, 02 Sep 2006 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:112407</guid><dc:creator>haaron</dc:creator><description>&lt;p&gt;Desde hace tiempo he querido escribir sobre una técnica ASP.NET 2.0 que me parece interesante compartir. Se trata de utilizar de manera combinada la funcionalidad de las clases Membership y Profiles para establecer toda la maquinaria de administración y almacenamiento de usuarios. Sabemos que ASP.NET 2.0 nos ofrece estas piezas de infraestructura para la construcción de soluciones web con la finalidad de agilizar la creación y manejo eficiente de usuarios, roles y perfiles, claro entre otras posibilidades. &lt;/p&gt;
&lt;p&gt;Lo que veremos en este post es una técnica que nos permite manipular usuarios con la clase Membership haciendo uso de los controles Login y que además podamos relacionar y extender los datos que requerimos asociar a un usuario a través del uso de la funcionalidad de Profiles para que de manera conjunta extendamos esta funcionalidad a nuestro beneficio. &lt;/p&gt;
&lt;p&gt;En muchas ocasiones cuando habilitamos Membership para el control y manejo de usuarios es común que nos quedemos cortos con los datos de usuario que queremos almacenar y que son relevantes e incluso requeridos para la aplicación que estamos construyendo. La clase Membership es una clase que cuenta con métodos estáticos para crear nuevos, eliminar existentes, cambiar contraseñas y validar la existencia de usuarios. Esta clase funciona con un modelo basado en proveedor el cual nos permite hacer que trabaje independientemente del origen de datos donde se encuentra la información. &lt;/p&gt;
&lt;p&gt;En la mayoría de los escenarios de una aplicación multi usuario normalmente requerimos proporcionar mucho más información que puede ser de utilidad para la aplicación que estamos escribiendo. Por ejemplo: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El nombre completo del usuario&lt;/li&gt;
&lt;li&gt;A que departamento pertenece&lt;/li&gt;
&lt;li&gt;Que teléfono y extensión tiene&lt;/li&gt;
&lt;li&gt;Incluso información de configuración visual o personalización&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Seguro encontraras mucha mas información que ocupes asociar al contexto de un usuario. &lt;br /&gt;Sin embargo Membership por su naturaleza se queda corto por decirlo así con la cantidad de datos que almacena y en definitiva necesitamos asociar más información. Aquí es donde entra el uso de Profiles o en otras palabras perfiles de usuario. Profiles en ASP.NET 2.0 es un mecanismo que permite almacenar de manera persistente información adicional para cada usuario registrados en nuestro sitio. Tambien funiona bajo un modelo de tipo proveedor. Si deseas conocer mas sobre Profiles entra a este link. Por un lado tenemos Membership para la administración de usuarios y Profiles para la extensión de la información de un usuario en específico. &lt;/p&gt;
&lt;p&gt;Los pasos para habilitar esta funcionalidades son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Configurar una base de datos para el almacenamiento persistente de usuarios, roles y perfiles&lt;/li&gt;
&lt;li&gt;Configurar en el archivo web.config nuestra aplicación web para utilizar dicha base de datos de almacenamiento y crear algunos usuarios&lt;/li&gt;
&lt;li&gt;Configurar en el archivo web.config el uso de perfiles y su estructura de información&lt;/li&gt;
&lt;li&gt;Escribir código para obtener de nuestro almacenamiento persistente la información de un usuario y su perfil&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Obtener los usuarios de un sitio programáticamente&lt;br /&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href="http://msmvps.com/photos/haarongonzalez/images/112402/original.aspx"&gt;&lt;img id="_ctl0____ctl0____ctl0__ctl0_bcr_PictureDetails1___detailsImage_SmallThumb112402" height="69" alt="MEM01.jpg" src="http://msmvps.com/photos/haarongonzalez/images/112402/425x69.aspx" width="425" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Como vemos, tenemos un control GridView que muestra cierta información de los usuarios registrados en este sitio. Gracias al uso de la clase Membership es que de manera programática podemos obtener esta información. El código es el siguiente:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;font face="Courier New" color="#006400" size="2"&gt;&lt;strong&gt;private void LoadData()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.GridView1.DataSource = Membership.GetAllUsers();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.GridView1.DataBind();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;Insertar usuarios en un sitio programaticamente&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;a href="http://msmvps.com/photos/haarongonzalez/images/112403/original.aspx"&gt;&lt;img id="_ctl0____ctl0____ctl0__ctl0_bcr_PictureDetails1___detailsImage_SmallThumb112403" height="206" alt="MEM02.jpg" src="http://msmvps.com/photos/haarongonzalez/images/112403/original.aspx" width="263" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;Para realizar el proceso de creación de usuarios utilizamos el control CrateUserWizard el cual se comporta conforme se especifique en el archivo de configuración web.config, por ejemplo, utiliza una expresión regular especificada en dicho archivo para validar el contenido del texto capturado en el campo contraseña. A su vez, este control utiliza la clase MemberShip y el método CreateUsers para insertar nuevos usuarios. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;Una vez que proporcionamos la información y damos clic sobre “Crear Usuario” el control muestra una pantalla de confirmación de la operación.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;span&gt;&lt;a href="http://msmvps.com/photos/haarongonzalez/images/112404/original.aspx"&gt;&lt;img id="_ctl0____ctl0____ctl0__ctl0_bcr_PictureDetails1___detailsImage_SmallThumb112404" height="133" alt="MEM03.jpg" src="http://msmvps.com/photos/haarongonzalez/images/112404/original.aspx" width="210" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;Hasta el momento esto es solamente funcionalidad “Out of The Box” de ASP.NET 2.0. Sin embargo como pudimos ver, requerimos mas información para describir a un usuario. Podemos realizar este proceso de manera programática simplemente &lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-ansi-language:ES-MX;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;diseñando &lt;/span&gt;nuestro formulario web de captura y ejecutando el siguiente código:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Courier New" color="#006400" size="2"&gt;&lt;strong&gt;Membership.CreateUser(this.usernameTextBox.Text, this.passwordTextBox.Text, this.emailTextBox.Text);&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;strong&gt;Editando perfiles de usuario programáticamente&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;a href="http://msmvps.com/photos/haarongonzalez/images/112406/original.aspx"&gt;&lt;img id="_ctl0____ctl0____ctl0__ctl0_bcr_PictureDetails1___detailsImage_SmallThumb112406" height="241" alt="MEM05.jpg" src="http://msmvps.com/photos/haarongonzalez/images/112406/425x241.aspx" width="425" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Como vemos una vez que tenemos a nuestro usuario creado, es el momento de asociarle información adicional y almacenarla a través de perfiles de ASP.NET 2.0. En este caso, al usuario “hgonzalez” le asignamos información adicional como su nombre completo, una descripción e información relevante a esta aplicación. Adicionalmente podemos asociarle los roles que este usuario tiene asignados. Esta funcionalidad está ligada a Roles de ASP.NET 2.0. Veamos el código de cómo actualizamos el perfil de un usuario previamente creado. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Courier New" color="#006400" size="2"&gt;&lt;strong&gt;MembershipUser user = Membership.GetUser(“hgonzalez”);&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Courier New" color="#006400" size="2"&gt;&lt;strong&gt;ProfileCommon prof = Profile.GetProfile(user.UserName);&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Courier New" color="#006400" size="2"&gt;&lt;strong&gt;user.Email = emailTextBox.Text;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#006400"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;rof.UsersData.FirstName = this.firstNameTextBox.Text;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400" size="2"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;prof.UsersData.LastName = this.lastNameTextBox.Text;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400" size="2"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;prof.UsersData.Comments = commentTextBox.Text;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400" size="2"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;prof.UsersData.IsAuthor = chkAuthor.Checked;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400" size="2"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;prof.UsersData.WithNotifications = chkNotifications.Checked;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400" size="2"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;prof.UsersData.CountryID = Convert.ToInt32(countryDropDown.SelectedValue);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400" size="2"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;prof.UsersData.CountryName = countryDropDown.SelectedItem.Text;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Courier New" color="#006400" size="2"&gt;&lt;strong&gt;prof.Save();&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Courier New" color="#006400" size="2"&gt;&lt;strong&gt;Membership.UpdateUser(user);&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Courier New" color="#006400" size="2"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Actualiza los roles asignados&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (ListItem item in cblRoles.Items)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (item.Selected)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!Roles.IsUserInRole(GetStringID(), item.Text))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Roles.AddUserToRole(GetStringID(), item.Text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(Roles.IsUserInRole(GetStringID(), item.Text))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Roles.RemoveUserFromRole(GetStringID(), item.Text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Si vez el codigo encontraras que tenemos un concepto un poco distinto al que utilizamos en Profiles. El motivo es porque en vez de declarar las propiedades de mi profile en el archivo web.config, simplemente especifico que quiero utilizar una clase como mi estructura de informacion para el manejo de perfiles. Esta tecnica nos da interesantes capacidades. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;font face="Courier New" color="#a52a2a" size="2"&gt;&lt;strong&gt;&amp;lt;profile&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;strong&gt;&lt;font color="#a52a2a"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;properties&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;strong&gt;&lt;font color="#a52a2a"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;add name=&amp;quot;UsersData&amp;quot; type=&amp;quot;MyAssembly.BLL.UserTable&amp;quot; serializeAs=&amp;quot;Binary&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;strong&gt;&lt;font color="#a52a2a"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/properties&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;strong&gt;&lt;font color="#a52a2a"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;/profile&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;De esta manera me aseguro de tener Profiles con la informacion de usuario que me interesa manejar dentro de mi aplicacion. Lo interesante es que si por alguna razon existe algun otro cambio en la estructura simplemente modifico la definicion de mi clase y con eso es suficiente para ver disponible y reflejado en todo mi sitio ese nuevo valor.&lt;/p&gt;
&lt;p&gt;En el caso de Membership aqui dejo la configuracion, muy basica por cierto.&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;strong&gt;&lt;font face="Courier New" color="#a52a2a" size="2"&gt;&amp;lt;membership&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#a52a2a"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;providers&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#a52a2a"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;remove name=&amp;quot;AspNetSqlMembershipProvider&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#a52a2a"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;add name=&amp;quot;AspNetSqlMembershipProvider&amp;quot; type=&amp;quot;System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;quot; connectionStringName=&amp;quot;LocalSqlServer&amp;quot; enablePasswordRetrieval=&amp;quot;false&amp;quot; enablePasswordReset=&amp;quot;true&amp;quot; requiresQuestionAndAnswer=&amp;quot;false&amp;quot; applicationName=&amp;quot;/&amp;quot; requiresUniqueEmail=&amp;quot;true&amp;quot; minRequiredPasswordLength=&amp;quot;1&amp;quot; minRequiredNonalphanumericCharacters=&amp;quot;0&amp;quot; passwordFormat=&amp;quot;Hashed&amp;quot; maxInvalidPasswordAttempts=&amp;quot;5&amp;quot; passwordAttemptWindow=&amp;quot;10&amp;quot; passwordStrengthRegularExpression=&amp;quot;&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#a52a2a"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/providers&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;span&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#a52a2a"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/membership&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Y claro hay que habilitar el uso de roles y estos se configuran de la siguiente manera:&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:12pt;FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-ansi-language:ES-MX;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;&lt;font face="Courier New" color="#a52a2a" size="2"&gt;&lt;strong&gt;&amp;lt;roleManager enabled=&amp;quot;true&amp;quot; /&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Migracion en .NET</title><link>http://msmvps.com/blogs/haarongonzalez/archive/2006/06/22/102533.aspx</link><pubDate>Thu, 22 Jun 2006 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:102533</guid><dc:creator>haaron</dc:creator><description>&lt;p&gt;Acabo de recibir el correo electronico del MSDN Flash Latinoamerica y encuentro algo muy interesante y de utilidad para algunas empresas y corporativos que ya decidieron e incluso han invertido en la adopcion de .NET como su nueva plataforma de desarrollo. Para todos los usuarios de latinoamerica Microsoft a creado un programa para auxiliarnos en el proceso de migracion de aplicaciones a la plataforma .NET.&amp;nbsp;&lt;a title="http://go.microsoft.com/?linkid=5087156" href="http://go.microsoft.com/?linkid=5087156"&gt;Centro de Excelencia en Migración de MSDN&lt;/a&gt;&amp;nbsp;esta dedicado a dar soporte, conocimiento e informacion necesaria para apoyar en esta area. Incluso por ahi hay unos webcast publicados referentes a migracion.&lt;/p&gt;
&lt;p&gt;Saludos&lt;/p&gt;</description></item><item><title>trabajar, trabajar, trabajar lo bueno es que me gusta</title><link>http://msmvps.com/blogs/haarongonzalez/archive/2006/06/20/102433.aspx</link><pubDate>Tue, 20 Jun 2006 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:102433</guid><dc:creator>haaron</dc:creator><description>&lt;p&gt;&lt;span&gt;Regresando de nuevo a la ciudad de México después de haber pasado todo un mes y&amp;nbsp;algunos&amp;nbsp;días extremadamente atareado haciendo una consultaría&amp;nbsp;especializada&amp;nbsp;así como impartiendo y recibiendo entrenamientos. Todo el mes de mayo impartí a un equipo de desarrolladores el entrenamiento mas actualizado de la Plataforma .NET bajo la versión 2.0 del .NET Framework. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Los talleres que impartí fueron:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li class="MsoNormal"&gt;&lt;span&gt;&lt;a href="http://www.microsoft.com/learning/syllabi/en-us/2546afinal.mspx"&gt;Workshop 2546&lt;/a&gt;: Core Windows Forms Technologies with Microsoft Visual Studio 2005&lt;/span&gt; 
&lt;li class="MsoNormal"&gt;&lt;span&gt;&lt;a href="http://www.microsoft.com/learning/syllabi/en-us/2547afinal.mspx"&gt;Workshop 2547&lt;/a&gt;: Advanced Windows Forms Technologies with Microsoft Visual Studio 2005&lt;/span&gt; 
&lt;li class="MsoNormal"&gt;&lt;span&gt;&lt;a href="http://www.microsoft.com/learning/syllabi/en-us/2541afinal.mspx"&gt;Workshop 2541&lt;/a&gt;: Core Data Access with Microsoft Visual Studio 2005&lt;/span&gt; 
&lt;li class="MsoNormal"&gt;&lt;span&gt;&lt;a href="http://www.microsoft.com/learning/syllabi/en-us/2542afinal.mspx"&gt;Workshop 2542&lt;/a&gt;: Advanced Data Access with Microsoft Visual Studio 2005&lt;/span&gt; 
&lt;li class="MsoNormal"&gt;&lt;span&gt;&lt;a href="http://www.microsoft.com/learning/syllabi/en-us/2548afinal.mspx"&gt;Workshop 2548&lt;/a&gt;: Core Distributed Application Development with Microsoft Visual Studio 2005&lt;/span&gt; 
&lt;li class="MsoNormal"&gt;&lt;span&gt;&lt;a href="http://www.microsoft.com/learning/syllabi/en-us/2549afinal.mspx"&gt;Workshop 2549&lt;/a&gt;: Advanced Distributed Application Development with Microsoft Visual Studio 2005&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;Después me fui a Texas al &lt;a href="http://msmvps.com/blogs/haarongonzalez/archive/2006/05/17/95643.aspx"&gt;2007 Office Touchdown Training Airlift&lt;/a&gt; en donde &amp;nbsp;entrenadores de todo el continente tuvimos la oportunidad de experimentar MOSS&amp;nbsp;(la nueva version de SharePoint Portal Server) y WSS 3.0&amp;nbsp;a su máxima expresión. &lt;a href="http://msmvps.com/blogs/haarongonzalez/archive/2006/05/17/95643.aspx"&gt;Aquí una breve reseña&lt;/a&gt;. Regresando pase unos días impartiendo un excelente taller llamado &lt;a href="http://www.microsoft.com/learning/syllabi/en-us/2631afinal.mspx"&gt;Optimizing the Software Development Lifecycle with Microsoft Visual Studio Team System&lt;/a&gt;&amp;nbsp;en donde es importante mencionar que me toco hacer el Lab Setup y fue todo una experiencia desgastante pero gratificante a la vez. Es por eso que las personas de soporte que las empresas que son CPLS tienen una estrategica labor. En este taller, se requieren configurar un sin numero de maquinas virtuales, dos servidores con mínimo 2 GB de RAM cada uno, todo sobre la misma&amp;nbsp; intranet&amp;nbsp;y las estaciones de trabajo de cada participante configuradas por igual, pero en si muy interesante el haber compartido con toda una planta de desarrolladores de una de las empresas mas exitosas internacionalmente hablando en el desarrollo de soluciones de información para gobiernos. En fin. Me regreso para seguir atendiendo unos proyectos importantes para &lt;a href="http://www.plexit.com.mx"&gt;PlexIT&lt;/a&gt; así como un compromiso muy fuerte que tenemos con &lt;a href="http://www.microsoft.com/mexico"&gt;Microsoft Mexico&lt;/a&gt;. Este mes tendré la oportunidad de dar unas pláticas en varios eventos donde estoy invitado a participar como expositor en la ciudad de México. Pronto publicare las fechas/lugares y de que se tratan cada uno. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Por el momento, espero mi vuelo acompañado de mi blog tomando un respiro para seguir adelante con mucho mas empuje. Ya para terminar quiero decirte mi e&lt;/span&gt;&lt;span&gt;stimado lector, gracias por leer mis lineas y compartir conmigo.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Saludos!&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Las aventuras de Source Force</title><link>http://msmvps.com/blogs/haarongonzalez/archive/2006/05/21/96410.aspx</link><pubDate>Sun, 21 May 2006 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:96410</guid><dc:creator>haaron</dc:creator><description>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/events/hero/videos/"&gt;&lt;img src="http://msmvps.com/photos/restoredpictures/images/97940/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A mi bebe de tan solo &lt;span&gt;2 años&amp;nbsp;&lt;/span&gt;&amp;nbsp;le encantaron las &lt;a href="http://msdn.microsoft.com/events/hero/videos/"&gt;aventuras &lt;/a&gt;de Source Force y eso que aun no sabe programar. :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>