<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ponte : howto</title><link>http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx</link><description>Tags: howto</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>No abre http://localhost Visual Studio</title><link>http://msmvps.com/blogs/gflores/archive/2009/06/08/no-abre-http-localhost-visual-studio.aspx</link><pubDate>Tue, 09 Jun 2009 03:57:20 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1694642</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=1694642</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2009/06/08/no-abre-http-localhost-visual-studio.aspx#comments</comments><description>&lt;p&gt;Hace unos días unos compañeros de la universidad me advirtieron de un problema que les ocurría en común a máquinas donde tuvieran Visual Studio 2008 y particularmente en sistema operativo Windows Vista. Se trata de que al intentar correr alguna aplicación ASP.NET desde el entorno de desarrollo les salía Internet Explorer con la infame “Internet Explorer cannot display the webpage” y pues, estaban sin poder continuar con sus trabajos.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores.metablogapi/5314.iecannot_5F00_2C07D9A6.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="iecannot" border="0" alt="iecannot" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores.metablogapi/4152.iecannot_5F00_thumb_5F00_537EA610.png" width="244" height="153" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Al principio me imaginaba que era algo que tenía que ver con el archivo de hosts y después de &lt;a href="http://stackoverflow.com/questions/657383/localhost-does-not-browser-looks-for-www-localhost-com"&gt;investigar un poco más&lt;/a&gt;, me dieron la razón.&lt;/p&gt;  &lt;p&gt;Lo que debes hacer es usar un editor de texto (como Notepad o Notepad++) y abrir desde el directorio C:\Windows\System32\Drivers\Etc\ un archivo que se llama hosts (sin extensión) y remover la línea que dice algo de localhost. Te puede aparecer así:&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;::1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; localhost&lt;/strong&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;o así   &lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;127.0.0.1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://www.localhost.com"&gt;www.localhost.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ahora nada más graba este archivo otra vez, cuidando que no se anexe la extensión txt (y si se anexa, se la quitas). Parece medio absurdo, pero puede ser que si te ocurre este problema, quizás sea por esto.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1694642" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category></item><item><title>ADO.NET Entity Framework y llaves foráneas</title><link>http://msmvps.com/blogs/gflores/archive/2009/04/30/ado-net-entity-framework-y-llaves-for-225-neas.aspx</link><pubDate>Thu, 30 Apr 2009 16:37:12 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1691629</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=1691629</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2009/04/30/ado-net-entity-framework-y-llaves-for-225-neas.aspx#comments</comments><description>&lt;p&gt;Es algo muy normal trabajar con tablas que están relacionadas con otras por medio de llaves foráneas. Si has usado ADO.NET Framework para hacer algunas operaciones con la BD y para mostrar datos en una página ASP.NET, quizás te hayas encontrado con el dilema de mostrar los campos relacionados de la tabla externa a la que estás mostrando.&lt;/p&gt;  &lt;p&gt;Por ejemplo, tomando como ejemplo la clásica base de datos de Northwind, y teniendo las tablas de Products y Categories, y si definimos nuestro modelo de Entidades de esta forma:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores/modelo_5F00_405B6A31.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="modelo" border="0" alt="modelo" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores/modelo_5F00_thumb_5F00_1270A82A.jpg" width="419" height="312" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Podemos mostrar en un GridView el contenido de Products haciendo la referencia correspondiente:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;pre&gt;        NorthwindModel.NorthwindEntities ne &lt;span style="background-color:white;font-family:courier new;color:red;font-size:11px;"&gt;=&lt;/span&gt; 
            &lt;span style="background-color:white;font-family:courier new;color:blue;font-size:11px;"&gt;new&lt;/span&gt; NorthwindModel.NorthwindEntities();

        var products &lt;span style="background-color:white;font-family:courier new;color:red;font-size:11px;"&gt;=&lt;/span&gt; from p &lt;span style="background-color:white;font-family:courier new;color:blue;font-size:11px;"&gt;in&lt;/span&gt; ne.Products
                       select p;

        grdProductos.DataSource &lt;span style="background-color:white;font-family:courier new;color:red;font-size:11px;"&gt;=&lt;/span&gt; products;
        grdProductos.DataBind();&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores/grid_5F00_68FC66E9.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="grid" border="0" alt="grid" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores/grid_5F00_thumb_5F00_184DDC74.jpg" width="405" height="321" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Pero ¿qué tal si quiero mostrar en el mismo GridView la descripción de la categoría? Basta incluir en la declaración del campo la propiedad Include para que se pueda cargar ese dato.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;pre&gt;        NorthwindModel.NorthwindEntities ne &lt;span style="background-color:white;font-family:courier new;color:red;font-size:11px;"&gt;=&lt;/span&gt; 
            &lt;span style="background-color:white;font-family:courier new;color:blue;font-size:11px;"&gt;new&lt;/span&gt; NorthwindModel.NorthwindEntities();

        var products &lt;span style="background-color:white;font-family:courier new;color:red;font-size:11px;"&gt;=&lt;/span&gt; from p &lt;span style="background-color:white;font-family:courier new;color:blue;font-size:11px;"&gt;in&lt;/span&gt; ne.Products
                       &lt;strong&gt;.Include(&lt;span style="background-color:#ededed;font-family:courier new;color:#666666;font-size:11px;"&gt;&amp;quot;Categories&amp;quot;&lt;/span&gt;)&lt;/strong&gt;
                       select p;

        grdProductos.DataSource &lt;span style="background-color:white;font-family:courier new;color:red;font-size:11px;"&gt;=&lt;/span&gt; products;
        grdProductos.DataBind();&lt;/pre&gt;

&lt;p&gt;Y con esto tenemos acceso a los campos de la segunda tabla para de esa manera mostrar como fuente de datos de alguna columna del grid algún campo. En este caso, con un Template Field hacemos un Bind usando simplemente &lt;em&gt;Categories.Description&lt;/em&gt; que sería la manera de ligar desde Products a ese campo:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;pre&gt;    &amp;lt;asp:TemplateField HeaderText=&lt;span style="background-color:#ededed;font-family:courier new;color:#666666;font-size:11px;"&gt;&amp;quot;Category&amp;quot;&lt;/span&gt;&amp;gt;
        &amp;lt;EditItemTemplate&amp;gt;
            &amp;lt;asp:TextBox ID=&lt;span style="background-color:#ededed;font-family:courier new;color:#666666;font-size:11px;"&gt;&amp;quot;TextBox1&amp;quot;&lt;/span&gt; runat=&lt;span style="background-color:#ededed;font-family:courier new;color:#666666;font-size:11px;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; 
                Text=&amp;#39;&amp;lt;%# Bind(&lt;span style="background-color:#ededed;font-family:courier new;color:#666666;font-size:11px;"&gt;&amp;quot;Categories.Description&amp;quot;&lt;/span&gt;) &lt;span style="background-color:white;font-family:courier new;color:red;font-size:11px;"&gt;%&lt;/span&gt;&amp;gt;&amp;#39;&amp;gt;
                &amp;lt;/asp:TextBox&amp;gt;
        &amp;lt;/EditItemTemplate&amp;gt;
        &amp;lt;ItemTemplate&amp;gt;
            &amp;lt;asp:Label ID=&lt;span style="background-color:#ededed;font-family:courier new;color:#666666;font-size:11px;"&gt;&amp;quot;Label1&amp;quot;&lt;/span&gt; runat=&lt;span style="background-color:#ededed;font-family:courier new;color:#666666;font-size:11px;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; 
                Text=&amp;#39;&amp;lt;%# Bind(&lt;span style="background-color:#ededed;font-family:courier new;color:#666666;font-size:11px;"&gt;&amp;quot;Categories.Description&amp;quot;&lt;/span&gt;) &lt;span style="background-color:white;font-family:courier new;color:red;font-size:11px;"&gt;%&lt;/span&gt;&amp;gt;&amp;#39;&amp;gt;
            &amp;lt;/asp:Label&amp;gt;
        &amp;lt;/ItemTemplate&amp;gt;
    &amp;lt;/asp:TemplateField&amp;gt;&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores/gridconcategoria_5F00_557197F9.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="gridconcategoria" border="0" alt="gridconcategoria" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores/gridconcategoria_5F00_thumb_5F00_549BC2C0.jpg" width="544" height="257" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Por supuesto que en lugar de esto pudiéramos usar Vistas desde el servidor SQL Server con todos los campos que ocupemos, pero esta sería una de las formas de resolver como mostrar los campos en tablas mediante llaves foráneas usando código de ADO.NET Entity Framework.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1691629" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/asp.net/default.aspx">asp.net</category></item><item><title>Algunas funciones Javascript útiles para ASP.NET (en C#)</title><link>http://msmvps.com/blogs/gflores/archive/2009/03/05/algunas-funciones-javascript-250-tiles-para-asp-net-en-c.aspx</link><pubDate>Fri, 06 Mar 2009 00:28:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1675873</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=1675873</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2009/03/05/algunas-funciones-javascript-250-tiles-para-asp-net-en-c.aspx#comments</comments><description>&lt;p&gt;Nunca est&amp;aacute; de m&amp;aacute;s conocer algunas funciones &amp;uacute;tiles para hacer m&amp;aacute;s efectiva la programaci&amp;oacute;n web en ASP.NET, entre los que uso bastante son:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ventana de Confirmaci&amp;oacute;n (Messagebox del lado del cliente)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Muy &amp;uacute;til para pedirle confirmaci&amp;oacute;n al usuario cuando se va a hacer alg&amp;uacute;n proceso del cual se puede arrepentir, por ejemplo, pedirle confirmaci&amp;oacute;n para borrar alg&amp;uacute;n registro. En el bot&amp;oacute;n donde se va a agregar la l&amp;oacute;gica para hacerlo, se le agrega el detalle para abrir una ventana y pedir confirmaci&amp;oacute;n. En el evento Load de la p&amp;aacute;gina es un buen lugar para hacerlo:&lt;/p&gt;
&lt;pre&gt;    &lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:blue;"&gt;protected&lt;/span&gt; &lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:blue;"&gt;void&lt;/span&gt; Page_Load(object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;         btnEliminar.Attributes.Add(&lt;span style="font-size:11px;background-color:#ededed;font-family:Courier New;color:#666666;"&gt;&amp;quot;onclick&amp;quot;&lt;/span&gt;, &lt;span style="font-size:11px;background-color:#ededed;font-family:Courier New;color:#666666;"&gt;&lt;br /&gt;         &amp;quot;return confirm(&amp;#39;&amp;iquest;Eliminar registro?&amp;#39;);&amp;quot;&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Si el usuario presiona Ok, se ejecutar&amp;aacute; el c&amp;oacute;digo para borrar el registro, si no, es como si nunca hubiera tocado el bot&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Mostrar una ventana con tama&amp;ntilde;o determinado&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A veces necesitamos mostrar una ventana extra independiente del &amp;aacute;rea de trabajo del usuario para informaci&amp;oacute;n, alg&amp;uacute;n proceso peque&amp;ntilde;o o algo que para demostrar atenci&amp;oacute;n no puedes abrir en un nuevo tab o en otra ventana del navegador. De esta forma incluso podemos dimensionar la ventana emergente con el tama&amp;ntilde;o adecuado para nuestros fines.&lt;/p&gt;
&lt;pre&gt;    &lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:blue;"&gt;protected&lt;/span&gt; &lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:blue;"&gt;void&lt;/span&gt; Page_Load(object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        btnNueva.Attributes.Add(&lt;span style="font-size:11px;background-color:#ededed;font-family:Courier New;color:#666666;"&gt;&amp;quot;OnClick&amp;quot;&lt;/span&gt;, &lt;span style="font-size:11px;background-color:#ededed;font-family:Courier New;color:#666666;"&gt;&lt;br /&gt;         &amp;quot;window.open(&amp;#39;Nueva.aspx&amp;#39;,null,&amp;#39;height=220,width=480&amp;#39;);&amp;quot;&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;A tomar en cuenta es que el usuario puede tener bloqueadas las ventanas emergentes, as&amp;iacute; que una buena idea es mostrar en alg&amp;uacute;n lado de la aplicaci&amp;oacute;n que desactive para tu sitio este bloqueo.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Cerrar una ventana&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Para casos como el anterior donde despu&amp;eacute;s de abrir una ventana donde se espera generar trabajo pero no se puede confiar o resultar&amp;iacute;a muy engorroso para el usuario cerrar manualmente la ventana, conviene usar este m&amp;eacute;todo. En el ejemplo est&amp;aacute; en el evento Click de un bot&amp;oacute;n pero bien puede figurar despu&amp;eacute;s de terminado alguna funci&amp;oacute;n.&lt;/p&gt;
&lt;pre&gt;    &lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:blue;"&gt;protected&lt;/span&gt; &lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:blue;"&gt;void&lt;/span&gt; btnCerrar_Click(object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        Response.Write(&lt;span style="font-size:11px;background-color:#ededed;font-family:Courier New;color:#666666;"&gt;&amp;quot;&amp;lt;script&amp;gt;window.close();&amp;lt;/script&amp;gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Estas son algunas funciones donde es necesario hacer trabajo del lado del cliente para determinado comportamiento, por lo mismo no es para todas las situaciones y eventos posibles. Lo &amp;uacute;nico es preguntarse si son cosas que no se pueden hacer del lado del servidor o que ser&amp;iacute;an m&amp;aacute;s r&amp;aacute;pidas y sencillas que se hicieran del lado del cliente.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1675873" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/asp.net/default.aspx">asp.net</category></item><item><title>Verifica tus nulos</title><link>http://msmvps.com/blogs/gflores/archive/2008/09/24/verifica-tus-nulos.aspx</link><pubDate>Wed, 24 Sep 2008 14:29:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1648777</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=1648777</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2008/09/24/verifica-tus-nulos.aspx#comments</comments><description>&lt;p&gt;Es muy sencillo verificar si una variable tiene referencia a null:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:blue;"&gt;if&lt;/span&gt; (dFecha == &lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:blue;"&gt;null&lt;/span&gt;) &lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Pero &amp;iquest;y si los datos que quieres evaluar vienen de una base de datos? Cuando se trata de un campo de tipo fecha no es suficiente evaluarlo contra null, y asignarlo a una variable DateTime te requiere hacer un cast para que te permita usarla, pero si est&amp;aacute; en null, no te permite hacer esta asignaci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:green;"&gt;//Si es null el campo, no permite hacer este cast
&lt;/span&gt;dFecha &lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:red;"&gt;=&lt;/span&gt; (DateTime)miDataReader[&lt;span style="font-size:11px;background-color:#ededed;font-family:Courier New;color:#666666;"&gt;&amp;quot;Fecha&amp;quot;&lt;/span&gt;];&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;La soluci&amp;oacute;n est&amp;aacute; en evaluarla contra DBNull, que contiene precisamente el valor null a nivel de base de datos:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-size:11px;background-color:white;font-family:Courier New;color:blue;"&gt;if&lt;/span&gt; ( miDataReader[&lt;span style="font-size:11px;background-color:#ededed;font-family:Courier New;color:#666666;"&gt;&amp;quot;Fecha&amp;quot;&lt;/span&gt;] == DBNull.Value )&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Evaluando de esta forma nuestros campos de la base de datos, podremos tener mejor c&amp;oacute;digo y m&amp;aacute;s probado.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1648777" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category></item><item><title>Parámetros en aplicaciones</title><link>http://msmvps.com/blogs/gflores/archive/2008/07/17/par-225-metros-en-aplicaciones.aspx</link><pubDate>Thu, 17 Jul 2008 20:49:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1641254</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=1641254</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2008/07/17/par-225-metros-en-aplicaciones.aspx#comments</comments><description>&lt;p&gt;Muchas veces necesitas llamar o recuperar los par&amp;aacute;metros en la aplicaci&amp;oacute;n en C# que est&amp;eacute;s desarrollando. Lo m&amp;aacute;s sencillo es usar el Environment.GetCommandLineArgs() que nos regresa un arreglo con los par&amp;aacute;metros que est&amp;aacute;n mand&amp;aacute;ndonos.&lt;/p&gt;
&lt;p&gt;Lo que es importante tomar en cuenta es que si se est&amp;aacute; enviando una cadena que contiene espacios, por ello mismo nos coloca cada par&amp;aacute;metro en distinta posici&amp;oacute;n del arreglo y s&amp;oacute;lo es suficiente armando de nuevo ese argumento:&lt;/p&gt;
&lt;p&gt;static void Main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; string[] args =&amp;nbsp; Environment.GetCommandLineArgs();&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (args.GetUpperBound()&amp;nbsp; &amp;gt; 1)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string sArg = args[1] + &amp;quot; &amp;quot; + args[2] + &amp;quot; &amp;quot; + args[3] + &amp;quot; &amp;quot; + args[4]; &lt;br /&gt;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1641254" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category></item><item><title>Gráficas fáciles para web</title><link>http://msmvps.com/blogs/gflores/archive/2007/08/28/gr-225-ficas-f-225-ciles-para-web.aspx</link><pubDate>Tue, 28 Aug 2007 17:20:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1143956</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=1143956</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2007/08/28/gr-225-ficas-f-225-ciles-para-web.aspx#comments</comments><description>
&lt;p&gt;Una necesidad recurrente en cualquier tipo de proyecto es darle presentación a datos de una manera que rápidamente sea aprovechable y útil para quien toma decisiones. La presentación en gráficas comparativas es algo a lo que ya está acostumbrada la mayoría de las personas aunque para generarlas no siempre se cuenta con la herramienta adecuada.&lt;/p&gt;
 
&lt;p&gt;Carlos Aguilar creó hace unos años un control gratuito para ello, el WebChart. Y usarlo es tan sencillo como ponerlo en tu Toolbox de Visual Studio y arrastrárlo a la página que estás creando. En tu código de la página aparecerá así:&lt;/p&gt;
 
&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;%@&lt;/span&gt;&lt;span&gt; &lt;span style="color:maroon;"&gt;Page&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Language&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;C#&amp;quot;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:blue;"&gt;&amp;lt;%@&lt;/span&gt;&lt;span&gt; &lt;span style="color:maroon;"&gt;Register&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;tagPrefix&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Web&amp;quot;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;WebChart&amp;quot;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Assembly&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;WebChart&amp;quot;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:blue;"&gt;&amp;lt;%@&lt;/span&gt;&lt;span&gt; &lt;span style="color:maroon;"&gt;Import&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;System.Drawing&amp;quot;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;html&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;head&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;WebChart Sample&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;head&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;Web&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ChartControl&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;500&amp;quot;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Height&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;350&amp;quot;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ChartControl1&amp;quot;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;
&lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Server&amp;quot;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;html&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
 
&lt;p&gt;Para darle funcionalidad es tan simple como cargar un dataset:&lt;/p&gt;
 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="darkgreen"&gt;//en&amp;nbsp;CrearDataSet&amp;nbsp;está&amp;nbsp;la&amp;nbsp;funcionalidad&amp;nbsp;de&amp;nbsp;conexión&amp;nbsp;a&amp;nbsp;BD&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;DataSet&amp;nbsp;dsPrioridades&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;CrearDataSet()&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;PieChart&amp;nbsp;priorityChart&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;new&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;PieChart()&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;priorityChart.DataSource&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dsPrioridades.Tables[&lt;/font&gt;&lt;font color="maroon"&gt;0&lt;/font&gt;&lt;font color="black"&gt;].DefaultView&lt;/font&gt;&lt;font color="blue"&gt;;&lt;/font&gt;
&lt;/p&gt;
 
&lt;p&gt;Y asignarle cuales campos comprenderán tu eje Y y tu eje X, además de cargarlo en el control:&lt;/p&gt;
 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="black"&gt;priorityChart.DataXValueField&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Prioridad&amp;quot;&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;priorityChart.DataYValueField&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;=&amp;nbsp;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Proyectos&amp;quot;&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;priorityChart.DataBind()&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;ChartControl1.Charts.Add(priorityChart)&lt;/font&gt;&lt;font color="blue"&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;ChartControl1.RedrawChart()&lt;/font&gt;&lt;font color="blue"&gt;;&lt;/font&gt;

&lt;/p&gt;
 
&lt;p&gt;El resultado es una buena gráfica:&lt;/p&gt;
 
&lt;p&gt;&amp;nbsp;&lt;img src="http://i5.photobucket.com/albums/y152/gabofr/webchartCa.png" title="Gráfica" alt="Gráfica" height="289" width="350" /&gt;&lt;/p&gt;
 
&lt;p&gt;En la misma página de WebChart puedes descargar el archivo de ayuda que te permitirá saber como manipular todas las propiedades y métodos que tiene para lograr resultados más acordes a lo que necesitas. También hay bastantes ejemplos y código de mejoras a las gráficas que puedes generar.&lt;/p&gt;
 &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:1965ac3f-b476-4b59-894a-c7fd604cde30" style="margin:0px;padding:0px;display:inline;"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/webchart" rel="tag"&gt;webchart&lt;/a&gt;, &lt;a href="http://technorati.com/tags/asp.net" rel="tag"&gt;asp.net&lt;/a&gt;, &lt;a href="http://technorati.com/tags/c#" rel="tag"&gt;c#&lt;/a&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1143956" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/asp.net/default.aspx">asp.net</category></item><item><title>Referencias para .NET 3.0</title><link>http://msmvps.com/blogs/gflores/archive/2007/03/22/referencias-para-net-3-0.aspx</link><pubDate>Thu, 22 Mar 2007 20:53:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:702177</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=702177</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2007/03/22/referencias-para-net-3-0.aspx#comments</comments><description>&lt;p&gt;Algunas ligas útiles para desarrollo de aplicaciones con .NET 3.0:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/windowsvista/default.aspx"&gt;Windows Vista Developer Center&lt;/a&gt; &lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=10cc340b-f857-4a14-83f5-25634c3bf043&amp;amp;DisplayLang=en" title=".NET 3.0 download"&gt;.NET 3.0&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa663300.aspx"&gt;Windows Presentation Foundation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa663299.aspx"&gt;Windows Communication Foundation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa663308.aspx"&gt;Windows Workflow Foundation&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Para empezar a desarrollar:&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7614FE22-8A64-4DFB-AA0C-DB53035F40A0"&gt;Windows SDK&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en"&gt;Visual Studio 2005 Extensions for WWF&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=F54F5537-CC86-4BF5-AE44-F5A1E805680D&amp;amp;displaylang=en"&gt;Visual Studio 2005 Extensions for WCF &amp;amp; WPF&lt;/a&gt; &lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Ejemplos, demos y código:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms741723.aspx"&gt;Windows Workflow Foundation Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fmsdn2.microsoft.com%2Fen-us%2Flibrary%2Fms771449.aspx&amp;amp;ei=zu4CRprgGKL8ggOliKHxDA&amp;amp;usg=__cUydTuyf5YcUHwbqpV1omk9QHMA=&amp;amp;sig2=MMbIvDyt3nLjxDYnUUEujw"&gt;Getting started with WPF Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms751514.aspx"&gt;Windows Communication Foundation Samples&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Webcast: Building a Sudoku Game Using Windows Presentation Foundation &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032294938&amp;amp;Culture=en-US"&gt;Part 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032294955&amp;amp;Culture=en-US"&gt;Part 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032294957&amp;amp;Culture=en-US"&gt;Part 3&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032294959&amp;amp;Culture=en-US"&gt;Part 4&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032294962%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e"&gt;Part 5&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=702177" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx">.net</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/wpf/default.aspx">wpf</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/wwf/default.aspx">wwf</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/wcf/default.aspx">wcf</category></item><item><title>ASP.NET AJAX Versión 1.0 disponible ya</title><link>http://msmvps.com/blogs/gflores/archive/2007/01/26/asp-net-ajax-versi-n-1-0-disponible-ya.aspx</link><pubDate>Fri, 26 Jan 2007 23:35:28 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:522171</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=522171</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2007/01/26/asp-net-ajax-versi-n-1-0-disponible-ya.aspx#comments</comments><description>&lt;p&gt;Ya está disponible la versión no beta de &lt;a title="ASP.NET Ajax" href="http://ajax.asp.net"&gt;ASP.NET Ajax&lt;/a&gt; que en su versión 1 nos da componentes Ajax reusables, soporte en los navegadores más populares y sobre todo, que puedes extender sitios web actuales con funcionalidades modernas de manera muy sencilla directamente desde Visual Studio 2005 . El Ajax Control Toolkit tiene nuevos controles como calendario, textbox con máscara, pestañas, autocompletado y otros ya populares como el del acordeón, menú flotante, calificación y dropdown en cascada que puedes ver en vivo en el sitio web de &lt;a title="ASP.NET Ajax Control Toolkit" href="http://ajax.asp.net/ajaxtoolkit/"&gt;ASP.NET Ajax Control Toolkit&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;En español, ya puedes acceder a webcasts pregrabados para que empieces a generar tus aplicaciones web de manera muy rápida y sencilla. Sólo tienes que registrarte en el enlace del webcast que más te interese:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032294789&amp;amp;EventCategory=5&amp;amp;culture=es-MX&amp;amp;CountryCode=MX"&gt;Desarrollo de Aplicaciones WEB con AJAX y ASP.NET 2.0&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032294929&amp;amp;EventCategory=5&amp;amp;culture=es-MX&amp;amp;CountryCode=MX"&gt;Desarrollo de aplicaciones con Microsoft Atlas&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032315719&amp;amp;EventCategory=3&amp;amp;culture=es-MX&amp;amp;CountryCode=MX"&gt;MSDN Radio Episodio 17 (Segmento 3: Ajax y clientes ricos)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032294320&amp;amp;EventCategory=3&amp;amp;culture=es-MX&amp;amp;CountryCode=MX"&gt;MSDN Radio: Como Hacer Técnico: Uso de Ajax en la Plataforma ASP .NET&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032326942&amp;amp;EventCategory=4&amp;amp;culture=es-AR&amp;amp;CountryCode=AR"&gt;MDCD: AJAX y su integración con las plataformas de desarrollo&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Y para empezar ya, &lt;a title="ASP.NET Ajax download" href="http://ajax.asp.net/downloads/default.aspx?tabid=47"&gt;descárgalo&lt;/a&gt; ahora mismo y puedes irte familiarizando con los controles y ejecutar las aplicaciones de muestra que ASP.NET AJAX te ofrece.&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=522171" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/asp.net/default.aspx">asp.net</category></item><item><title>Parámetros opcionales en C#</title><link>http://msmvps.com/blogs/gflores/archive/2006/12/24/par-metros-opcionales-en-c.aspx</link><pubDate>Sun, 24 Dec 2006 16:22:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:447991</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=447991</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2006/12/24/par-metros-opcionales-en-c.aspx#comments</comments><description> &lt;p&gt;Un manejo bastante fácil de parámetros opcionales en C# es usando la palabra reservada params, así: &lt;br&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;    &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;public&lt;/span&gt; &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; concatena(params &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt;[] cadenas)&lt;br&gt;    {&lt;br&gt;        &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; sResult &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;=&lt;/span&gt; &lt;span style="font-size:11px;font-family:courier new;"&gt;""&lt;/span&gt;;&lt;br&gt;        &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;foreach&lt;/span&gt; (&lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; str &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;in&lt;/span&gt; cadenas)&lt;br&gt;        {&lt;br&gt;            sResult &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;=&lt;/span&gt; sResult &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;+&lt;/span&gt; str &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;+&lt;/span&gt; &lt;span style="font-size:11px;font-family:courier new;"&gt;" "&lt;/span&gt;;&lt;br&gt;        }&lt;br&gt;        &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;return&lt;/span&gt; sResult;&lt;br&gt;    }&lt;/pre&gt;
&lt;p&gt;Y se usaría tan sencillo como esto:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;Label1.Text &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;=&lt;/span&gt; concatena(&lt;span style="font-size:11px;font-family:courier new;"&gt;"uno"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;Label1.Text &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;=&lt;/span&gt; concatena(&lt;span style="font-size:11px;font-family:courier new;"&gt;"primero"&lt;/span&gt;, &lt;span style="font-size:11px;font-family:courier new;"&gt;"segundo"&lt;/span&gt;, &lt;span style="font-size:11px;font-family:courier new;"&gt;"tercero"&lt;/span&gt;);&lt;/pre&gt;
&lt;p&gt;Sin embargo, se debe tomar en cuenta que esto limita el Intellisense en el proyecto, ya que no se tiene idea de los parámetros que se están pasando a la función. La recomendación políticamente correcta (en términos de POO al menos), es usar funciones con parámetros sobrecargados según se necesiten. Por ejemplo:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;    &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;static&lt;/span&gt; &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; concatena(&lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; str)&lt;br&gt;    {&lt;br&gt;        &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;return&lt;/span&gt; str;&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;static&lt;/span&gt; &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; concatena(&lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; str1, &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; str2)&lt;br&gt;    {&lt;br&gt;        &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;return&lt;/span&gt; str1 &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;+&lt;/span&gt; &lt;span style="font-size:11px;font-family:courier new;"&gt;" "&lt;/span&gt; &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;+&lt;/span&gt; str2;&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;static&lt;/span&gt; &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; concatena(&lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; str1, &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; str2, &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;string&lt;/span&gt; str3)&lt;br&gt;    {&lt;br&gt;        &lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:white;"&gt;return&lt;/span&gt; str1 &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;+&lt;/span&gt; &lt;span style="font-size:11px;font-family:courier new;"&gt;" "&lt;/span&gt; &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;+&lt;/span&gt; str2 &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;+&lt;/span&gt; &lt;span style="font-size:11px;font-family:courier new;"&gt;" "&lt;/span&gt; &lt;span style="font-size:11px;color:red;font-family:courier new;background-color:white;"&gt;+&lt;/span&gt; str3;&lt;br&gt;    }&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;Aunque, claro está, en ejemplos tan sencillos como este nos veremos tentados a usar params, es bueno tomar en cuenta alternativas propias del lenguaje. Cuando escalemos implementaciones, nos agradeceremos a nosotros mismos seguir las reglas del juego apropiadamente.&lt;/p&gt;
&lt;p&gt;Más info:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.csharphelp.com/archives/archive18.html" title="C# Help"&gt;Using Params Keyword&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://discuss.joelonsoftware.com/default.asp?dotnet.12.301457.9" title="Optional Parameters on Joel On Software Discussion Forums"&gt;Optional Parameters&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.c-sharpcorner.com/Code/2002/May/OptionalParametersInNEt.asp" title="C# Corner"&gt;How to read optional parameters&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:56bed55f-06f6-4f66-a3fc-92b17db2cd93" style="margin:0px;padding:0px;display:inline;float:none;"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/C#" rel="tag"&gt;C#&lt;/a&gt;, &lt;a href="http://technorati.com/tags/par%c3%a1metros" rel="tag"&gt;parámetros&lt;/a&gt;, &lt;a href="http://technorati.com/tags/code" rel="tag"&gt;code&lt;/a&gt;, &lt;a href="http://technorati.com/tags/programaci%c3%b3n" rel="tag"&gt;programación&lt;/a&gt;, &lt;a href="http://technorati.com/tags/c%c3%b3digo" rel="tag"&gt;código&lt;/a&gt;, &lt;a href="http://technorati.com/tags/programming" rel="tag"&gt;programming&lt;/a&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=447991" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category></item><item><title>Usando el CascadingDropDown con una base de datos</title><link>http://msmvps.com/blogs/gflores/archive/2006/06/06/99612.aspx</link><pubDate>Tue, 06 Jun 2006 14:05:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:99612</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=99612</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2006/06/06/99612.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;En el sitio de &lt;A href="http://www.elguille.info/"&gt;El Guille&lt;/A&gt; me hicieron el favor de publicarme un &lt;A href="http://www.elguille.info/colabora/NET2006/gflores_atlasCDDbd.htm"&gt;artículo&lt;/A&gt; acerca de cómo usar el control de AtlasToolkit CascadingDropDown usando una base de datos como su fuente de datos. Es un ejemplo de lo sencillo que es usar estos controles y el alcance que estos controles tienen. Aquí lo tienes:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;A href="http://www.elguille.info/colabora/NET2006/gflores_atlasCDDbd.htm"&gt;Usando el CascadingDropDown con una base de datos&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=99612" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_200/default.aspx">nivel:200</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/asp.net/default.aspx">asp.net</category></item><item><title>Webcasts que no te puedes perder</title><link>http://msmvps.com/blogs/gflores/archive/2006/05/13/94731.aspx</link><pubDate>Sat, 13 May 2006 18:37:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:94731</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=94731</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2006/05/13/94731.aspx#comments</comments><description>&lt;font face="Verdana" size="2"&gt;Una característica poco conocida de &lt;a href="http://www.microsoft.com/spanish/msdn/latam"&gt;MSDN&lt;/a&gt; es que tienen un historial de webcasts transmitidos anteriormente. Por lo que si te perdiste de alguno que te interesara por estar en tu hora de comida o estabas sin conexión a internet puedes simplemente entrar de nuevo y buscarlo para ver la retransmisión.&lt;br&gt;&lt;br&gt;No te deja hacer preguntas (obvio, el evento ya ocurrió) pero tienes toda la presentación tal cual si la hubieras grabado en tu VCR. Y es muy sencillo, sólo ve a la página de &lt;a href="http://www.microsoft.com/spanish/msdn/latam/mediacenter/webcast/default.asp"&gt;Webcasts&lt;/a&gt; de &lt;a href="http://www.microsoft.com/spanish/msdn/latam/mediacenter/"&gt;MSDN Media&lt;/a&gt; y comienza a buscar los temas que te interesaron y podrás ver los webcasts próximos a suceder y los que te perdiste. Con la ventaja adicional de que en algunos de ellos ya puedes descargar el archivo de powerpoint correspondiente.&lt;br&gt;&lt;br&gt;Un tip, si te registraste para un webcast y no lo pudiste atender entra a &lt;a href="http://msevents.microsoft.com"&gt;MSEvents&lt;/a&gt; y busca el ID del webcast que te perdiste (este ID lo encontrarás en el email de confirmación de registro como &lt;i&gt;código de evento&lt;/i&gt;). Al ver el evento podrás ver la retransmisión del mismo y ahora sí, estar al corriente en tus webcasts.&lt;/font&gt;&lt;br&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=94731" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/tecnolog_26002300_237_3B00_a/default.aspx">tecnolog&amp;#237;a</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category></item></channel></rss>