<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Csharping</title>
	<atom:link href="http://csharping.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://csharping.net</link>
	<description>C# , Asp.net , WCF , Winforms</description>
	<lastBuildDate>Mon, 23 May 2011 21:49:46 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Action vs Func</title>
		<link>http://csharping.net/c/action-vs-func/</link>
		<comments>http://csharping.net/c/action-vs-func/#comments</comments>
		<pubDate>Mon, 23 May 2011 21:47:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[c#]]></category>

		<guid isPermaLink="false">http://csharping.net/?p=49</guid>
		<description><![CDATA[Action encapsula un método que tiene un parámetro como entrada y no devuelve ningún valor. Func encapsula un método que tiene un parámetro de entrada y devuelve un objeto del tipo especificado en TResult. Ambos pueden ser sustituidos por un delegado pero tienen la ventaja que al usarlos no tenemos que definir delegados como veremos [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Action </strong>encapsula un método que tiene un parámetro como entrada y no devuelve ningún valor.<br />
<strong>Func </strong>encapsula un método que tiene un parámetro de entrada y devuelve un objeto del tipo especificado en TResult.</p>
<p>Ambos pueden ser sustituidos por un delegado pero tienen la ventaja que al usarlos no tenemos que definir delegados como veremos en el siguiente par de <strong>ejemplos</strong>. En el primero usaremos <strong>action </strong>para mostrar un mensaje por pantalla y en el segundo usaremos func para contar el numero de letras de una cadena.<br />
<span id="more-49"></span></p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Windows.Forms;

public class ExampleAction
{
   public static void Main()
   {
      Action&lt;string&gt; messageTarget; 

      if (Environment.GetCommandLineArgs().Length &gt; 1)
         messageTarget = delegate(string s) { ShowWindowsMessage(s); };
      else
         messageTarget = delegate(string s) { Console.WriteLine(s); };

      messageTarget(&quot;Hello, World!&quot;);
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);
   }
}
</pre>
<pre class="brush: csharp; title: ; notranslate">
using System;

public class ExampleFunc
{
   public static void Main()
   {
      Func&lt;string, string&gt; countLetters= delegate(int s)
         { return s.Lenght();}; 

      string name = &quot;Dakota&quot;;
      Console.WriteLine(countLetters(name));
   }
}
</pre>
<p>Como ejercicio facilito ¿Que muestra por pantalla el siguiente ejemplo?</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

static class Func
{
   static void Main(string[] args)
   {
      // Declare a Func variable and assign a lambda expression to the
      // variable. The method takes a string and converts it to uppercase.
      Func&lt;string, string&gt; selector = str =&gt; str.ToUpper();

      // Create an array of strings.
      string[] words = { &quot;orange&quot;, &quot;apple&quot;, &quot;Article&quot;, &quot;elephant&quot; };
      // Query the array and select strings according to the selector method.
      IEnumerable&lt;String&gt; aWords = words.Select(selector);

      // Output the results to the console.
      foreach (String word in aWords)
         Console.WriteLine(word);
   }
}
</pre>
<p><a href='http://csharping.net/c/action-vs-func/#SID49_1_tgl' title='Visit blog to check out this spoiler'>[[Visit blog to check out this spoiler]]</a></p>
<p>Enlaces:<br />
<a href="http://msdn.microsoft.com/en-us/library/018hxwa8.aspx#Y600">Action Delegate MSDN</a><br />
<a href="http://msdn.microsoft.com/en-us/library/bb549151.aspx">Func Delegate MSDN</a></p>
]]></content:encoded>
			<wfw:commentRss>http://csharping.net/c/action-vs-func/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Volatile variable declaration</title>
		<link>http://csharping.net/c/volatile-variable-declaration/</link>
		<comments>http://csharping.net/c/volatile-variable-declaration/#comments</comments>
		<pubDate>Sun, 08 May 2011 19:16:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://csharping.net/?p=54</guid>
		<description><![CDATA[Cuando usamos volatile para un campo estamos indicando que ese campo sera usado por varios thread que se ejecutan concurrentemente. Basicamente es lo mismo que usar la sentencia &#8220;lock&#8221; antes de acceder a esa variable, un ejemplo de codigo declaración de un campo volatile es muy simple. Un campo declarado como volatile no se le [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando usamos <strong>volatile </strong>para un campo estamos indicando que ese campo sera usado por varios thread que se ejecutan concurrentemente. Basicamente es lo mismo que usar la sentencia &#8220;lock&#8221; antes de acceder a esa variable, un ejemplo de codigo declaración de un<strong> campo volatile</strong> es muy simple.</p>
<pre class="brush: csharp; title: ; notranslate">
    class VolatileExample
    {
        public volatile int i;

        public void Set(int _i)
        {
            i = _i;
        }
    }
</pre>
<p>Un campo declarado como volatile no se le realiza ninguna optimizacion al compilar, de esta forma se asegura que el valor que contiene el campo es el valor mas reciente.<br />
Para mas información podeis consultar lo que dice la <a href="http://msdn.microsoft.com/en-us/library/x13ttww7%28v=VS.100%29.aspx#Y228">msdn sobre volatile</a></p>
]]></content:encoded>
			<wfw:commentRss>http://csharping.net/c/volatile-variable-declaration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MVC 3 Ejemplo de Test</title>
		<link>http://csharping.net/c/mvc-3-ejemplo-de-test/</link>
		<comments>http://csharping.net/c/mvc-3-ejemplo-de-test/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 10:22:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://csharping.net/?p=100</guid>
		<description><![CDATA[Para desarrollar este ejemplo vamos a usar el proyecto de Ajax Tabs MVC ejemplo, no os preocupeis que en el zip adjunto los dos proyectos. Crear un test es facil y si nos acostumbramos a crear test para todos nuestros proyectos desarrollaremos productos de mejor calidad. Vamos a crear los test en 3 pasos. Paso [...]]]></description>
			<content:encoded><![CDATA[<p>Para desarrollar este ejemplo vamos a usar el proyecto de <a href="http://csharping.net/c/mvc-ajax-tabs/">Ajax Tabs MVC ejemplo</a>, no os preocupeis que en el zip adjunto los dos proyectos. Crear un <strong>test</strong> es facil y si nos acostumbramos a crear test para todos nuestros proyectos desarrollaremos productos de mejor calidad. Vamos a crear los test en 3 pasos.<br />
<span id="more-100"></span><br />
<span style="text-decoration: underline;">Paso 1</span>. Boton derecho sobre la clase HomeController y selecciona &#8220;Create Unit test&#8221; o &#8220;Crear test unitarios&#8221;</p>
<p><img class="alignnone size-full wp-image-101" title="step1" src="http://csharping.net/wp-content/uploads/2011/03/step1.jpg" alt="Creating test MVC" width="522" height="585" /></p>
<p><span style="text-decoration: underline;">Paso 2.</span> Selecciona Home() y Index() para crear un esqueleto basico de test. Luego pincha ok.</p>
<p><a href="http://csharping.net/wp-content/uploads/2011/03/step2.jpg"><img class="alignnone size-full wp-image-102" title="step2" src="http://csharping.net/wp-content/uploads/2011/03/step2.jpg" alt="Creating test mvc 2" width="507" height="400" /></a></p>
<p><span style="text-decoration: underline;">Paso 3</span>. Ya tenemos la clase HomeControllerTest tenemos que limpiarla de comentarios y a adir un par de condiciones de validacion. Justo debajo esta el codigo.</p>
<pre class="brush: csharp; title: ; notranslate">
using MvcAjaxTabsExample.Controllers;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting.Web;
using System.Web.Mvc;

namespace MvcAjaxTabsExample.test
{
    [TestClass()]
    public class HomeControllerTest
    {
        #region Additional test attributes
        //
        //You can use the following additional attributes as you write your tests:
        //
        //Use ClassInitialize to run code before running the first test in the class
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //Use ClassCleanup to run code after all tests in a class have run
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //Use TestInitialize to run code before running each test
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //Use TestCleanup to run code after each test has run
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion

        [TestMethod()]
        public void IndexTest()
        {
            HomeController target = new HomeController();
            var viewTarget = target.Index();
            Assert.AreEqual( target.ViewBag.Message, &quot;Welcome to ASP.NET MVC!&quot; );
            Assert.AreEqual( viewTarget.GetType(), typeof( ViewResult ) );
        }

        [TestMethod()]
        public void HomeTest()
        {
            HomeController target = new HomeController();
            var viewTarget = target.Home();
            Assert.AreEqual( target.ViewBag.Message, &quot;Welcome to ASP.NET MVC!&quot; );
            Assert.AreEqual( viewTarget.GetType(), typeof( PartialViewResult ) );
        }
    }
}
</pre>
<p>Solo me queda comentar que los metodos comentados del codigo sirven para inicializar o limpiar los resultados de los test. Unos se ejecutan antes de cada test, otros depues etc. En este caso no pero si trabajamos con bases de datos querremos dejar la base de datos en el mismo estado que cuando realizamos el test. El codigo del proyecto completo lo podeis encontrar aqui debajo.</p>
<p><a href="http://www.megaupload.com/?d=FFKON1KC">Descarga el Ejemplo de Unit Test usando MVC3</a></p>
]]></content:encoded>
			<wfw:commentRss>http://csharping.net/c/mvc-3-ejemplo-de-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MVC Ajax Grid with jqGrid</title>
		<link>http://csharping.net/c/mvc-ajax-grid-with-jqgrid/</link>
		<comments>http://csharping.net/c/mvc-ajax-grid-with-jqgrid/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 10:03:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[jqgrid]]></category>

		<guid isPermaLink="false">http://csharping.net/?p=95</guid>
		<description><![CDATA[Hoy tengo preparado un codigo para desarrollar un Grid usando jqGrid y MVC, los pasos que vamos a seguir van a ser los siguientes: - Primero vamos a hacer un grid que muestre los datos existentes en una tabla de una base de datos sql. El grid recibira los datos como una cadena Json. - [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Hoy tengo preparado un codigo para desarrollar un Grid usando<strong> jqGrid y MVC</strong>, los pasos que vamos a seguir van a ser los siguientes:<br />
- Primero vamos a hacer un grid que muestre los datos existentes en una tabla de una base de datos sql. El grid recibira los datos como una cadena Json.<br />
- Segundo vamos a hacer posible editar las filas.<br />
- Tercero vamos a crear un boton para añadir nuevas filas.<br />
- Ultimo un boton de borrar.<br />
<span id="more-95"></span></p>
<h2>MVC 3 JqGrid mostrar datos usando Json</h2>
<p><a href="http://www.trirand.com/blog/?page_id=6">Descargamos JqGrid</a> con todo, tened cuidado porque si quitais &#8220;FormEditing&#8221; se nos jode el ejemplo. Añadimos los archivos css y .js a nuestro proyecto y tenemos que referenciarlos, yo lo hago desde Index.aspx</p>
<pre class="brush: xml; title: ; notranslate">
    &lt;%--CSS Files--%&gt;
    &lt;link href=&quot;/Content/jquery-ui-1.8.7.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
    &lt;link href=&quot;/Content/ui.jqgrid.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
    &lt;link href=&quot;/Content/ui.multiselect.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;

    &lt;%--jQuery Library--%&gt;
    &lt;script src=&quot;/Scripts/jquery-1.4.4.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;

    &lt;%--Must load language tag BEFORE script tag--%&gt;
    &lt;script src=&quot;/Scripts/grid.locale-en.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;/Scripts/jquery.jqGrid.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Hoy estaba un poco vago y añadi el javascript dentro del propio index, pero lo suyo es hacerlo en un fichero aparte, lo mas importante del codigo de abajo es el parametro url: &#8216;/Home/LinqGridData/&#8217; de donde obtenemos los datos, y las columnas que definimos justo debajo. A este codigo la añadiremos mas adelante las opciones para poder <strong>editar el grid</strong>, asi que no lo perdais de vista.</p>
<pre class="brush: jscript; title: ; notranslate">
    &lt;%--jqGrid Code - refer http://www.trirand.com/blog/jqgrid/jqgrid.html --%&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
      jQuery(document).ready(function() {
          jQuery(&quot;#list&quot;).jqGrid({
              url: '/Home/LinqGridData/',
              datatype: 'json',
              mtype: 'POST',
              colNames: ['Title', 'Genre', 'ReleaseDate', 'Price', 'Rating'],
              colModel: [
          { name: 'Title', index: 'Title', width: 300, align: 'left'},
          { name: 'Genre', index: 'Genre', width: 100, align: 'left' },
          { name: 'ReleaseDate', index: 'ReleaseDate', width: 100, align: 'left' },
          { name: 'Price', index: 'Price', width: 100, align: 'left'},
          { name: 'Rating', index: 'Rating', width: 100, align: 'left'},
          ],
              pager: '#pager',
              rowNum: 10,
              rowList: [5, 10, 20, 50],
              sortname: 'Id',
              sortorder: &quot;desc&quot;,
              viewrecords: true,
              caption: 'My first grid'
          });
          $(&quot;#list&quot;).navGrid(&quot;#pager&quot;, { edit: false, add: false, del: false });
      });

    &lt;/script&gt;
</pre>
<p>Llegamos a la parte mas dificil del ejemplo, lo mas complicado aqui es<strong> formatear los datos </strong>para enviarlos como una cadena Json, el grid va a llamar a /Home/LinqGridData/ con lo cual tenemos que crear esa accion y devolver los datos. La <strong>estructura de datos</strong> contiene el numero total de paginas, la pagina actual, el total de filas y un ultimo campo con una lista de objetos que contiene nuestra informacion. Cada objeto de esa lista esta formado por el id del objeto y un array de string con los valores que se ven en el grid.</p>
<pre class="brush: csharp; title: ; notranslate">
        public JsonResult LinqGridData(string sidx, string sord, int page, int rows)
        {

            var db = new MovieDBContext();
            var dbd = db.Database;
            var movies = from m in db.Movies
                         where m.ReleaseDate &gt; new DateTime( 1984, 6, 1 )
                         select m;

            int pageIndex = Convert.ToInt32( page ) - 1;
            int pageSize = rows;
            int totalRecords = movies.Count();
            int totalPages = (int)Math.Ceiling( (float)totalRecords / (float)pageSize );

            List&lt;object&gt; l = GetRowsFromList( movies );

            var jsonData = new
            {
                total = totalPages,
                page = page,
                records = totalRecords,
                rows = l
            };
            return Json(jsonData);
        }

        private static List&lt;object&gt; GetRowsFromList( IQueryable&lt;Movie&gt; movies )
        {
            List&lt;object&gt; l = new List&lt;object&gt;();
            foreach ( var movie in movies )
            {
                l.Add( new
                {
                    id = movie.ID,
                    cell = new string[] {String.Empty, movie.Title, movie.Genre, String.Format( &quot;{0:M/d/yyyy}&quot;, movie.ReleaseDate ), String.Format( &quot;{0}&quot;, movie.Price ), movie.Rating }
                } );
            }
            return l;
        }
</pre>
<p>Para terminar la primera parte de este ejemplo nos falta crear el html correspondiente que no puede ser mas simple.</p>
<pre class="brush: xml; title: ; notranslate">
    &lt;table id=&quot;list&quot; class=&quot;scroll&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;/table&gt;
    &lt;div id=&quot;pager&quot; class=&quot;scroll&quot; style=&quot;text-align:center;&quot;&gt;&lt;/div&gt;
</pre>
<h2>MVC 3 JqGrid Editable con Json</h2>
<p>Esta parte es mas corta que la anterior, ya tenemos una base y ahora hay que construir encima. Vamos a empezar configurando el javascript. Necesitamos añadir editurl: &#8216;/Home/EditGridData/&#8217;, la direccion donde se hará la llamada <strong>Ajax </strong>para actualizar los campos en la base de datos, tenemos que poner las columnas como editables y crear una nueva columna que contenga los botones para editar, salvar y cancelar. La columna con los botones la creamos en el metodo <strong>gridComplete</strong>, ahi pegamos los botones.El codigo queda tal que asi.</p>
<pre class="brush: jscript; title: ; notranslate">
    &lt;%--jqGrid Code - refer http://www.trirand.com/blog/jqgrid/jqgrid.html --%&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
      jQuery(document).ready(function() {
          jQuery(&quot;#list&quot;).jqGrid({
              editurl: '/Home/EditGridData/',
              url: '/Home/LinqGridData/',
              datatype: 'json',
              mtype: 'POST',
              colNames: ['Actions','Title', 'Genre', 'ReleaseDate', 'Price', 'Rating'],
              colModel: [
          { name: 'act', index: 'act', width: 75, sortable: false },
          { name: 'Title', index: 'Title', width: 300, align: 'left',editable: true},
          { name: 'Genre', index: 'Genre', width: 100, align: 'left', editable: true },
          { name: 'ReleaseDate', index: 'ReleaseDate', width: 100, align: 'left', editable: true },
          { name: 'Price', index: 'Price', width: 100, align: 'left', editable: true },
          { name: 'Rating', index: 'Rating', width: 100, align: 'left', editable: true },
          ],
              gridComplete: function ()
              {
                  var ids = jQuery(&quot;#list&quot;).jqGrid('getDataIDs');
                  for (var i = 0; i &lt; ids.length; i++)
                  {
                      var cl = ids[i];
                      be = &quot;&lt;input style='height:22px;width:20px;' type='button' value='E' onclick=\&quot;jQuery('#list').editRow('&quot; + cl + &quot;');\&quot;  /&gt;&quot;;
                      se = &quot;&lt;input style='height:22px;width:20px;' type='button' value='S' onclick=\&quot;jQuery('#list').saveRow('&quot; + cl + &quot;');\&quot;  /&gt;&quot;;
                      ce = &quot;&lt;input style='height:22px;width:20px;' type='button' value='C' onclick=\&quot;jQuery('#list').restoreRow('&quot; + cl + &quot;');\&quot; /&gt;&quot;;
                      jQuery(&quot;#list&quot;).jqGrid('setRowData', ids[i], { act: be + se + ce });
                  }
              },
              pager: '#pager',
              rowNum: 10,
              rowList: [5, 10, 20, 50],
              sortname: 'Id',
              sortorder: &quot;desc&quot;,
              viewrecords: true,
              caption: 'My first grid'
          });
          $(&quot;#list&quot;).navGrid(&quot;#pager&quot;, { edit: false, add: false, del: false });
      });

    &lt;/script&gt;
</pre>
<p>El siguiente paso es ir al Home cotroller y crear la accion para editar. Esta debe ser de tipo Post y tiene que contener un parametro por cada columna editable, añadiendo el id, como es un ejemplo no pongo ningun codigo para actualizar la base de datos, y por supuesto es imprescindible <strong>validar los parametros</strong> de entrada, como deberes te dejo investigar como hacer una validacion javascript <img src='http://csharping.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  .Veamos el codigo para <strong>EditGridData</strong>.</p>
<pre class="brush: csharp; title: ; notranslate">
        [HttpPost]
        public void EditGridData( Guid id, string title, string genre, DateTime releaseDate, decimal price, string rating )
        {

            var newMovie = new Movie()
            {
                ID = id,
                Title = title,
                ReleaseDate = releaseDate,
                Price = price,
                Rating = rating
            };
            // Put your database code here.
        }
</pre>
<p>En este punto deberias ver un grid como el de la imagen, si no es asi no te preocupes posiblemente la he cagado en alguna parte de este tutorial.</p>
<p><a href="http://csharping.net/wp-content/uploads/2011/04/jqGridEditing.jpg"><img src="http://csharping.net/wp-content/uploads/2011/04/jqGridEditing.jpg" alt="jqGrid edit " title="jqGridEditing" width="600" height="300" class="alignnone size-full wp-image-128" /></a><br />
<img src="" /></p>
<h2>MVC 3 JqGrid Editable, con boton de Añadir </h2>
<p>En este nivel ya tenemos nuestro<strong> grid editable</strong>, ya somos unos maestros del jqGrid y podemos escribir articulos molones como este en nuestro blog, como estoy un poco cansado de escribir y lo que queda es un poco mas de lo mismo, voy a ir un poco mas rapido.<br />
Creamos el button en el html y le añadimos la funcionalidad usando javascript.</p>
<pre class="brush: xml; title: ; notranslate">
    &lt;%-- HTML Required--%&gt;
    &lt;h2&gt;My Grid Data&lt;/h2&gt;
    &lt;table id=&quot;list&quot; class=&quot;scroll&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;/table&gt;
    &lt;div id=&quot;pager&quot; class=&quot;scroll&quot; style=&quot;text-align:center;&quot;&gt;&lt;/div&gt;
    &lt;input type=&quot;button&quot; id=&quot;addData&quot; value=&quot;Add&quot; /&gt;
</pre>
<p>El principio de la funcion javascript OnReady es el mismo veamos lo que ha cambiado.</p>
<pre class="brush: jscript; title: ; notranslate">
              rowList: [5, 10, 20, 50],
              sortname: 'Id',
              sortorder: &quot;desc&quot;,
              viewrecords: true,
              caption: 'My first grid'
          });
          $(&quot;#list&quot;).navGrid(&quot;#pager&quot;, { edit: false, add: false, del: false });
          $(&quot;#addData&quot;).click(function ()
          {
              jQuery(&quot;#list&quot;).jqGrid('editGridRow', &quot;new&quot;, { height: 280, reloadAfterSubmit: false });
          });
      });

    &lt;/script&gt;
</pre>
<p>Si añadimos una nueva pelicula esto va a petar, porque la url que se utiliza es la misma que para editar, y nos va a decir que el parametro id Guid no es opcional. Obviamente acabamos de crear una nueva pelicula y no hemos creado un nuevo Guid, para solucinar esto tenemos que hacer dos cosas. Primero cambiar el tipo del parametro a un nullable Guid dentro del Action. Y segundo tocar la table de <strong>routing </strong>dentro de Global.asax para definir el parametro como opcinal. Veamos el codigo.</p>
<pre class="brush: csharp; title: ; notranslate">
        [HttpPost]
        public void EditGridData( Guid id, string title, string genre, DateTime releaseDate, decimal price, string rating )
        {

            var newMovie = new Movie()
            {
                ID = id,
                Title = title,
                ReleaseDate = releaseDate,
                Price = price,
                Rating = rating
            };
            // Put your database code here.
        }
</pre>
<p>Dentro Global.asax vemos.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class MvcApplication : System.Web.HttpApplication {
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute(&quot;{resource}.axd/{*pathInfo}&quot;);

            routes.MapRoute(
                &quot;EditGrid&quot;,                                              // Route name
                &quot;Home/EditGridData/{id}&quot;,                           // URL with parameters
                new { controller = &quot;Home&quot;, action = &quot;EditGridData&quot;, id= UrlParameter.Optional }  // Parameter defaults
            );

            routes.MapRoute(
                &quot;Default&quot;,                                              // Route name
                &quot;{controller}/{action}/{id}&quot;,                           // URL with parameters
                new { controller = &quot;Home&quot;, action = &quot;Index&quot;, id = &quot;&quot; }  // Parameter defaults
            );

        }

        protected void Application_Start() {
            RegisterRoutes(RouteTable.Routes);
        }
    }
</pre>
<p><a href="http://csharping.net/wp-content/uploads/2011/04/jqGridAdd1.jpg"><img src="http://csharping.net/wp-content/uploads/2011/04/jqGridAdd1.jpg" alt="jqGrid add button" title="jqGridAdd" width="600" height="350" class="alignnone size-full wp-image-136" /></a></p>
<h2>MVC 3 JqGrid Añadir, editar y borrar</h2>
<p>En este paso seguiremos una dinamica parecida al anterior y aprovecharemos para retocar el metodo <strong>EditGriddata</strong>. Empezamos añadiendo el boton en html y el javascript.</p>
<pre class="brush: xml; title: ; notranslate">
    &lt;%-- HTML Required--%&gt;
    &lt;h2&gt;My Grid Data&lt;/h2&gt;
    &lt;table id=&quot;list&quot; class=&quot;scroll&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;/table&gt;
    &lt;div id=&quot;pager&quot; class=&quot;scroll&quot; style=&quot;text-align:center;&quot;&gt;&lt;/div&gt;
    &lt;input type=&quot;button&quot; id=&quot;addData&quot; value=&quot;Add&quot; /&gt;
    &lt;input type=&quot;button&quot; id=&quot;delData&quot; value=&quot;Delete Selected&quot; /&gt;
</pre>
<p>Vemos la parte nueva de la funcion Javascript OnReady.</p>
<pre class="brush: jscript; title: ; notranslate">
          $(&quot;#addData&quot;).click(function ()
          {
              jQuery(&quot;#list&quot;).jqGrid('editGridRow', &quot;new&quot;, { height: 280, reloadAfterSubmit: false });
          });
          $(&quot;#delData&quot;).click(function ()
          {
              var gr = jQuery(&quot;#list&quot;).jqGrid('getGridParam', 'selrow');
              if (gr != null) jQuery(&quot;#list&quot;).jqGrid('delGridRow', gr, { reloadAfterSubmit: true });
              else alert(&quot;Please Select Row to delete!&quot;);
          });

      });

    &lt;/script&gt;
</pre>
<p>En la <strong>operacion de borrar</strong>, los unicos parametros que nos llegan del post son &#8220;id&#8221; and &#8220;oper&#8221; (tipo de operacion), luego tenemos que arreglar Global.asax y EditGridMethod para hacer el resto de los parametros opcionales. Tambien rescribiremos un poco EditGridData para separar la funcionalidad de <strong>editar, borrar y añadir</strong>.</p>
<pre class="brush: csharp; title: ; notranslate">
        [HttpPost]
        public void EditGridData( Guid? id, string title, string genre, DateTime? releaseDate, decimal? price, string rating, string oper )
        {
            switch ( oper )
            {
                case &quot;add&quot;: //Validate Input ; Add Method
                    break;
                case &quot;edit&quot;:  //Validate Input ; Edit Method
                    break;
                case &quot;del&quot;: //Validate Input ; Delete Method
                    break;
                default: break;
            }
        }
</pre>
<p>Veamos Global.asax.</p>
<pre class="brush: csharp; title: ; notranslate">
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute(&quot;{resource}.axd/{*pathInfo}&quot;);

            routes.MapRoute(
                &quot;EditGrid&quot;,                                              // Route name
                &quot;Home/EditGridData/{id}&quot;,                           // URL with parameters
                new { controller = &quot;Home&quot;, action = &quot;EditGridData&quot;, id = UrlParameter.Optional , releaseDate = UrlParameter.Optional , price = UrlParameter.Optional }  // Parameter defaults
            );

            routes.MapRoute(
                &quot;Default&quot;,                                              // Route name
                &quot;{controller}/{action}/{id}&quot;,                           // URL with parameters
                new { controller = &quot;Home&quot;, action = &quot;Index&quot;, id = &quot;&quot; }  // Parameter defaults
            );

        }
</pre>
<h2>Conclusion</h2>
<p>El grid facilita bastante el desarrollo pero tambien limita bastante, un gran inconveniente (que tiene solucion) es la <strong>validacion</strong>, no existe una forma facil de validar los datos y devolver una respuesta al usuario. En cuanto al estilo y colores existen diferentes <strong>plantillas </strong>a elegir, que te salvan de un apuro. No me gusta mucho la dependencia del codigo Javascript, casi toda la configuracion se realiza en javascript y me gustaria tener un control que se pueda configurar mediante <strong>codigo c#</strong>. En lineas generales hace un buen trabajo y segun mi punto de vista es el mejor grid hasta el momento.</p>
]]></content:encoded>
			<wfw:commentRss>http://csharping.net/c/mvc-ajax-grid-with-jqgrid/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Ejemplo Javascript compactor con MVC</title>
		<link>http://csharping.net/javascript/ejemplo-javascript-compactor-with-mvc/</link>
		<comments>http://csharping.net/javascript/ejemplo-javascript-compactor-with-mvc/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 10:38:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://csharping.net/?p=105</guid>
		<description><![CDATA[La idea principal de este tutorial es mejorar el tiempo de respuesta de nuestra aplicacion, hay veces que tenemos muchos archivos javascript con poco peso, y como lleva mas tiempo realizar el get de 20 archivos de poco peso que el de un solo archivo con todo el contenido, vamos a implementar una solucion para [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">
La idea principal de este tutorial es<strong> mejorar el tiempo de respuesta</strong> de nuestra aplicacion, hay veces que tenemos <strong>muchos archivos javascript</strong> con poco peso, y como lleva mas tiempo realizar el get de 20 archivos de poco peso que el de un solo archivo con todo el contenido,<br />
vamos a implementar una solucion para juntar todos los archivos dentro de la carpeta applicationScripts en uno solo. De esta forma tambien nos olvidamos un poco de tener que declarar los nuevos archivos en la cabecera de la pagina.</p>
<p><span id="more-105"></span></p>
<h2>Paso a paso</h2>
<p><span style="text-decoration: underline;">Step 1.</span> Abrimos Global.asax.cs y <strong>declaramos un nuevo routing</strong> para la peticion del archivo &#8220;applicationScripts.js&#8221;</p>
<pre class="brush: csharp; title: ; notranslate">
        public static void RegisterRoutes( RouteCollection routes )
        {
            routes.IgnoreRoute( &quot;{resource}.axd/{*pathInfo}&quot; );

            routes.MapRoute( &quot;scripts&quot;,
            &quot;applicationScripts.js&quot;,
            new { controller = &quot;JavascriptCompresor&quot;, action = &quot;Index&quot; } );

            routes.MapRoute(
                &quot;Default&quot;, // Route name
                &quot;{controller}/{action}/{id}&quot;, // URL with parameters
                new { controller = &quot;Home&quot;, action = &quot;Index&quot;, id = UrlParameter.Optional } // Parameter defaults
            );

        }
</pre>
<p><span style="text-decoration: underline;">Step 2.</span> Ahora creamos el controlador segun el codigo inferior.</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Text;
using System.IO;

namespace MVCJavascriptCompactorExample.Controllers
{
    public class JavascriptCompresorController : Controller
    {
        //
        // GET: /JavascriptCompresor/

        [OutputCache(Duration=3600000)]
        public ActionResult Index()
        {
            byte[] script;
            StringBuilder sb = new StringBuilder();

            DirectoryInfo di = new DirectoryInfo( this.Request.MapPath( @&quot;/Scripts/ApplicationScripts/&quot; ) );

            if ( di.Exists )
            {
                var files = di.GetFiles( &quot;*.js&quot;, SearchOption.AllDirectories );
                if ( files.Length == 0 )
                {
                    throw new HttpException( 404, &quot;applicationScripts couldn't be generated&quot; );
                }

                foreach ( var file in files )
                {
                    using ( StreamReader sr = new StreamReader( file.OpenRead() ) )
                    {
                        sb.Append( sr.ReadToEnd() );
                    }
                }
                script = Encoding.UTF8.GetBytes( sb.ToString() );
                return File( script, &quot;text/javascript&quot;, &quot;applicationScripts.js&quot; );
            }
            throw new HttpException(404,&quot;applicationScripts couldn't be generated&quot;);
        }

    }
}
</pre>
<p style="text-align: justify;">
Hemos usado el atributo OutputCache, nos permite usar ASP.NET Output Caching con las acciones de los controladores en MVC, muy util. Si miramos el codigo hemos unido todos los archivos javascript en uno, en caso de que no exista el directorio o que no contenga archivos javascript lanzamos una excepcion.</p>
<p style="text-align: justify;">
<span style="text-decoration: underline;">Step 3.</span> Creamos el directorio \Scripts\ApplicationScripts y copiamos dentro los archivos javascripts que necesitemos en _Layout.cshtml</p>
<p><img class="alignnone size-full wp-image-106" title="applicationScripts" src="http://csharping.net/wp-content/uploads/2011/03/applicationScripts.jpg" alt="application Scripts" width="320" height="354" /></p>
<p style="text-align: justify;">
<span style="text-decoration: underline;">Step 4</span>. Por ultimo escribimos la referencia en _Layout.cshtml y quitamos las referencias a los archivos que ya tenemos dentro del directorio \Scripts\ApplicationScripts</p>
<pre class="brush: xml; title: ; notranslate">

    &lt;script src=&quot;@Url.Content( &quot;applicationScripts.js&quot; )&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<h2>Realizando los Test de rendimiento</h2>
<p style="text-align: justify;">
He usado fiddler para realizar los performance test y el resultado ha sido muy satisfactorio, demasiado, ahora cargamos 4 veces mas rapido, es porque nuestra aplicacion esta compuesta por 10 javascript files y solo un par de css etc. En un escenario normal quizas podamos reducir el tiempo de carga un 20% .</p>
<p style="text-align: justify;"><a href="http://csharping.net/wp-content/uploads/2011/03/withoutCompactor.jpg"><img class="alignnone size-full wp-image-107" title="withoutCompactor" src="http://csharping.net/wp-content/uploads/2011/03/withoutCompactor.jpg" alt="" width="600" height="380" /></a></p>
<p style="text-align: justify;"><a href="http://csharping.net/wp-content/uploads/2011/03/withCompactor.jpg"><img class="alignnone size-full wp-image-108" title="withCompactor" src="http://csharping.net/wp-content/uploads/2011/03/withCompactor.jpg" alt="result with compactor" width="600" height="380" /></a></p>
<p style="text-align: justify;">
En el siguiente enlaze puedes <a href="http://www.megaupload.com/?d=J0OU2O5G">Descargar el ejemplo javascript compactor MVC</a></p>
<p style="text-align: justify;">Un Saludo y espero que les halla gustado el articulo.</p>
]]></content:encoded>
			<wfw:commentRss>http://csharping.net/javascript/ejemplo-javascript-compactor-with-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Menu de navegacion con JQuery</title>
		<link>http://csharping.net/jquery/menu-de-navegacion-con-jquery/</link>
		<comments>http://csharping.net/jquery/menu-de-navegacion-con-jquery/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 18:16:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Jquery]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[menu]]></category>

		<guid isPermaLink="false">http://csharping.net/?p=111</guid>
		<description><![CDATA[He visto un interesante ejemplo de menu con JQuery y creo que merece la pena que le echeis un vistazo. Cada vez que posiciones el raton sobre un elemento cambia la imagen del background, aqui podeis ver el tutorial completo del menu de jquery y si pinchad en el siguiente enlace si quereis ver una [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">He visto un interesante ejemplo de <strong>menu con JQuery</strong> y creo que merece la pena que le echeis un vistazo. Cada vez que posiciones el raton sobre un elemento cambia la imagen del background, aqui podeis ver el <a href="http://tympanus.net/codrops/2010/05/05/beautiful-background-image-navigation-with-jquery/" target="_blank">tutorial completo del menu de jquery</a> y si pinchad en el siguiente enlace si quereis ver una <a href="http://tympanus.net/Tutorials/BeautifulBackgroundImageNavigation/#" target="_blank">demo</a>.</p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://csharping.net/jquery/menu-de-navegacion-con-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MVC Tabs con Ajax</title>
		<link>http://csharping.net/c/mvc-ajax-tabs/</link>
		<comments>http://csharping.net/c/mvc-ajax-tabs/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 21:04:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://csharping.net/?p=85</guid>
		<description><![CDATA[Con este proyecto he querido poner en practica las llamadas AJAX, y que mejor manera de hacerlo que creando unos Tabs que no requieran de postback. Primero hemos creado el proyecto basico MVC con login. Este viene por defecto con dos tabs &#8220;About&#8221; y &#8220;Home&#8221;, si pruebas clickear ahora son link normales y realizan un [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Con este proyecto he querido poner en practica las llamadas <strong>AJAX</strong>, y que mejor manera de hacerlo que creando unos Tabs que no requieran de postback. Primero hemos creado el proyecto basico <strong>MVC </strong>con login. Este viene por defecto con dos tabs &#8220;About&#8221; y &#8220;Home&#8221;, si pruebas clickear ahora son link normales y realizan un postback, los vamos a tunear cambiandolos por AJAX links. Para que veais que no hago trampas añadiré un campo llamado &#8220;current time field&#8221;.</p>
<p>Vamos por partes, abrimos _Layout.cshtml (que es como las master pages en ASP.Net) para realizar multples cambios.</p>
<p><span id="more-85"></span></p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;@ViewBag.Title&lt;/title&gt;
    &lt;link href=&quot;@Url.Content(&quot;~/Content/Site.css&quot;)&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
    &lt;!-- Jquery Latest version  --&gt;
    &lt;script src=&quot;@Url.Content( &quot;~/Scripts/jquery-1.5.1.min.js&quot; )&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;@Url.Content( &quot;~/Scripts/jquery.unobtrusive-ajax.js&quot; )&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div class=&quot;page&quot;&gt;

        &lt;div id=&quot;header&quot;&gt;
            &lt;div id=&quot;title&quot;&gt;
                &lt;h1&gt;My MVC Application&lt;/h1&gt;
            &lt;/div&gt;
            &lt;div id=&quot;currentTime&quot;&gt;Page Rendered:  @DateTime.Now.ToLongTimeString() &lt;br /&gt;&lt;/div&gt;
            &lt;div id=&quot;logindisplay&quot;&gt;
                @Html.Partial(&quot;_LogOnPartial&quot;)
            &lt;/div&gt;

            &lt;div id=&quot;menucontainer&quot;&gt;

                &lt;ul id=&quot;menu&quot;&gt;
                    &lt;li&gt;@Ajax.ActionLink( &quot;Home&quot;, &quot;Home&quot;, new AjaxOptions { UpdateTargetId = &quot;ajaxBody&quot; } ) &lt;/li&gt;
                    &lt;li&gt;@Ajax.ActionLink( &quot;About&quot;, &quot;About&quot;, new AjaxOptions { UpdateTargetId = &quot;ajaxBody&quot; } ) &lt;/li&gt;
                    &lt;li&gt;@Ajax.ActionLink( &quot;Contact Us&quot;,&quot;Contact&quot;, new AjaxOptions { UpdateTargetId = &quot;ajaxBody&quot; } ) &lt;/li&gt;
                    &lt;li&gt;@Html.ActionLink( &quot;Home No Ajax&quot;, &quot;Index&quot;, &quot;Home&quot;)&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&quot;main&quot;&gt;
            &lt;!-- Recipient for the result of the Ajax call  --&gt;
            &lt;div id=&quot;ajaxBody&quot;&gt;
                @RenderBody()
            &lt;/div&gt;
            &lt;div id=&quot;footer&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<ul>
<li>Inicializamos los links con el jquery necesario</li>
<li>Creamos el campo current time field en lo alto de la pagina para que se vea bien</li>
<li>Creamos un div &#8220;ajax body&#8221; en la parte inferior</li>
<li>Cambiamos Html.ActionLink por Ajax.ActionLink</li>
</ul>
<p>Veamos el archivo HomeController.cs</p>
<pre class="brush: csharp; title: ; notranslate">
   public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = &quot;Welcome to ASP.NET MVC!&quot;;

            return View();
        }

        public ActionResult About()
        {
            return PartialView();
        }

        public ActionResult Contact()
        {
            return PartialView();
        }

        public ActionResult Home()
        {
            ViewBag.Message = &quot;Welcome to ASP.NET MVC!&quot;;

            return PartialView();
        }
    }
</pre>
<p style="text-align: justify;">
<a href="http://csharping.net/wp-content/uploads/2011/03/ajaxTabsScreenshot.jpg"><img class="alignnone size-full wp-image-97" title="ajaxTabsScreenshot" src="http://csharping.net/wp-content/uploads/2011/03/ajaxTabsScreenshot.jpg" alt="Ajax Tabs screenshot" width="600" height="400" /></a></p>
<p style="text-align: justify;">
El Home controller es casi el mismo, lo unico que hemos añadido han sido un par de pestañas mas, todas son creadas como PartialView, y siempre devolvemos PartialView porque sino se renderizaria la pagina completa dentro del div &#8220;ajaxRcipient&#8221;. Finalmente he creado las pestañas necesarias, todas con Ajax excepto uno para que se vea la diferencia.</p>
<p style="text-align: justify;"><strong>Realizar llamadas Ajax con MVC es limpio y facil</strong>, no hay necesidad de crear un web services simplemente llamamos a métodos dentro del controlador, esta es una de las grandes ventajas de MVC frente a ASP.Net webforms, aunque no todo en MVC es bueno, si que tiene algunas mejoras con respecto a webforms.</p>
<p><a href="http://www.megaupload.com/?d=MK86F794">Descarga el ejemplo de pestañas con AJAX</a></p>
]]></content:encoded>
			<wfw:commentRss>http://csharping.net/c/mvc-ajax-tabs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sortable with Jquery and ASP.NET</title>
		<link>http://csharping.net/c/sortable-with-jquery-and-asp-net/</link>
		<comments>http://csharping.net/c/sortable-with-jquery-and-asp-net/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 20:47:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[sortable]]></category>

		<guid isPermaLink="false">http://csharping.net/?p=80</guid>
		<description><![CDATA[Me gusto bastante el ejemplo de Sortable de Jquery y el otro dia en un rato libre lo puse a funcionar usando asp.net, lo interesante del ejemplo era hacerlo de manera que se guardara el estado entre postback, por lo que yo ordeno la lista a mi manera le doy al boton de save y [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Me gusto bastante el ejemplo de<a title="Sortable" href="http://jqueryui.com/demos/sortable/" target="_blank"> Sortable de Jquery</a> y el otro dia en un rato libre lo puse a funcionar usando asp.net, lo interesante del ejemplo era hacerlo de manera que se <strong>guardara el estado entre postback</strong>, por lo que yo ordeno la lista a mi manera le doy al boton de save y por mucho que refresque recuerda el estado. Pido disculpas porque no tengo tiempo para escribir un tutorial como dios manda, pero si teneis preguntas os las respondo en los comentarios. Prometo hacer otro dia un pequeño post resumen del ejemplo.</p>
<p style="text-align: justify;">
<a href="http://www.megaupload.com/?d=7U0P7GWB">Descarga el proyecto Sortable con Jquery y ASP.NET</a></p>
]]></content:encoded>
			<wfw:commentRss>http://csharping.net/c/sortable-with-jquery-and-asp-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ventajas de usar Scrum</title>
		<link>http://csharping.net/metodologia/ventajas-de-usar-scrum/</link>
		<comments>http://csharping.net/metodologia/ventajas-de-usar-scrum/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 22:05:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Metodologia]]></category>

		<guid isPermaLink="false">http://csharping.net/?p=77</guid>
		<description><![CDATA[Las metodologías Ágiles se caracterizan por una rápida respuesta frente a los cambios. En proyectos en los que el cliente cambia los requisitos, o estos no están bien definidos, y necesitamos ser flexibles es cuando debemos poner en marcha SCRUM. Pero SCRUM tiene muchas otras ventajas, gracias a que SCRUM muestra resultados cada poco tiempo, podemos [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Las <strong>metodologías Ágiles</strong> se caracterizan por una rápida respuesta frente a los cambios. En proyectos en los que el cliente cambia los requisitos, o estos no están bien definidos, y necesitamos ser flexibles es cuando debemos poner en marcha <strong>SCRUM</strong>.</p>
<p style="text-align: justify;">Pero SCRUM tiene muchas otras ventajas, gracias a que SCRUM muestra resultados cada poco tiempo, podemos gestionar las expectativas del cliente de una forma mas efectiva. Con SCRUM priorizamos los requisitos por valor y coste, generamos gran parte del producto en poco tiempo y el cliente ya puede empezar a utilizar esa funcionalidad.</p>
<p style="text-align: justify;">Y por ultimo al ser un<strong> proceso iterativo incremental </strong>vamos mejorando el proceso en cada iteración.</p>
<p style="text-align: justify;">Para mas información podeis consultar la pagina de <a href="http://es.wikipedia.org/wiki/Scrum">Scrum de la wikipedia</a> o esta web sobre <a href="http://www.proyectosagiles.org/que-es-scrum">metodologias ágiles</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://csharping.net/metodologia/ventajas-de-usar-scrum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conceptos básicos de herencia y polimorfismo</title>
		<link>http://csharping.net/c/conceptos-basicos-de-herencia-y-polimorfismo/</link>
		<comments>http://csharping.net/c/conceptos-basicos-de-herencia-y-polimorfismo/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 22:14:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Herencia]]></category>

		<guid isPermaLink="false">http://csharping.net/?p=74</guid>
		<description><![CDATA[Inheritance, ¿Que salida da el siguiente código? ¿What is the result of executing the following code? [[Visit blog to check out this spoiler]]]]></description>
			<content:encoded><![CDATA[<p><strong>Inheritance</strong>, ¿Que salida da el siguiente código? ¿What is the result of executing the following code?</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
namespace BasicTest
{
    public class A
    {
        public virtual void DoSomething()
        {
            Console.WriteLine(&quot;A doSomething&quot;);
        }
    }

    public class B:A
    {
        public void DoSomething()
        {
            Console.WriteLine(&quot;B doSomething&quot;);
        }
    }

    public class C : A
    {
        public override void DoSomething()
        {
            Console.WriteLine(&quot;C doSomething&quot;);
        }
    }

    public class D : C
    {
        public new void DoSomething()
        {
            Console.WriteLine(&quot;D doSomething&quot;);
        }
    }
    public class EntryPoint
    {
        static void Main()
        {
            A testB = new B();
            A testC = new C();
            A testD = new D();
            testB.DoSomething();
            testC.DoSomething();
            testD.DoSomething();
            Console.ReadLine();
        }
    }
}
</pre>
<p><a href='http://csharping.net/c/conceptos-basicos-de-herencia-y-polimorfismo/#SID74_1_tgl' title='Visit blog to check out this spoiler'>[[Visit blog to check out this spoiler]]</a></p></p>
]]></content:encoded>
			<wfw:commentRss>http://csharping.net/c/conceptos-basicos-de-herencia-y-polimorfismo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
