jueves, abril 25, 2013

Mostrar entidad relacionada como lista desplegable (combo) en ASP.Net

En un proyecto ASP.Net, supongamos que 2 entidades relacionadas como por ejemplo Cliente y Provincia (relación N a 1). En la ficha de Cliente podemos mostrar la Provincia como una lista desplegable de selección (combo) de la siguiente forma:

1) En la acción Edit (y/o Create) del ClientesController añadir:

      var ctx = new MyProject.Models.MyContext();
      ViewData["ProvinciaId"] = new SelectList(ctx.Provincias, "Id""Name");

...donde Id y Name son campos de la entidad Provincias

OJO: El identificador del ViewData debe llamarse exactamente igual que el campo de la entidad principal que hace referencia a la entidad relacionada.



Si queremose un elemento seleccionado por defecto, podemos hacerlo así:

      var ctx = new MyProject.Models.MyContext();
      var provinciasSelectList = 
            from p in ctx.Provincias
            select new { Value = p.Id, Text = p.Name, Selected = (p.Name == "Málaga") };
      ViewData["ProvinciaId"] = new SelectList(provinciasSelectList , "Value""Text");

 2) En al vista que toque (Clientes/Edit y/o Clientes/Create) añadir:

     Html.DropDownList("ProvinciasList")
 
 
 


miércoles, abril 24, 2013

Sentencia SQL que retorna el número de registros en cada fecha

Imaginemos que tenemos una tabla ArticleIds que contiene un campo CreationDate definido como datetime con valor predeterminado = getDate( ), y queremos averiguar cuántos registros se han creado cada día entre las 9:00 y las 12:00:

Sentencia SQL:

SELECT t.Fecha,  COUNT(*) AS Cuenta FROM (
  SELECT CONVERT(CHAR(10), creationDate , 103) AS Fecha, CONVERT(CHAR(8), creationDate , 114) as Hora
    FROM [AESQL2008].[dbo].ArticleIds
    WHERE CONVERT(CHAR(5), creationDate , 114) > '09:00' AND CONVERT(CHAR(5), creationDate , 114) < '12:00'
) t
GROUP BY t.Fecha
ORDER BY t.Fecha


Resultado:

Fecha           Cuenta
04/17/2013    113
04/18/2013    1050
04/19/2013    8278
04/20/2013    1889
04/22/2013    1936
04/23/2013    1269
04/24/2013    235



Exinten otras maneras de hacer lo mismo (p.e. utilizando DATEADD como se explica aquí) pero ésta quizás es la más simple.