Numero de visitas 

contadores

 Creado por Ramon Torras   r_torras@msn.com

Ibetania > DotNet
mayo 15
Cómo pasar los datos LINQ a un Control DataSource

Hay muchas formas de llegar al destino: Hacer un binding de la variable resultante de la expresión LINQ a un control.

Yo expongo en este post la más cómoda para mí. Si sabéis de otros métodos, por favor, no dudéis en comentarlos en el post y los incluiré J

Primero veamos el caso más sencillo, tengo un objeto enumerable y quiero hacer directamente un binding:

Mediante el método: toList<Type>()

var query1 = (from n in excol

where n.PorMaternidad == GetValue()

select n);

 

List<Excedencia> list = new List<Excedencia>();

 

list = query1.ToList<Excedencia>();

 

gridDevoluciones.DataSource = list;

gridDevoluciones.DataBind();

 

Vamos al el caso mas complejo, una JOIN entre tres objetos enumerables. En este caso, 3 Collections enumerables (En este post podemos ver como una collection herede de ienumerable).

En estas 3 collections queremos hacer una join a la collection principal (que solo tiene los valores ID).

  • Con la Join quiero mostrar las descripciones de los valores en una nueva vista.

ClaseIncidenciaList claselist = new ClaseIncidenciaList();

ClaseIncidenciaCollection clasecol = claselist.GetItems();

 

TipoIncidenciaList tipolist = new TipoIncidenciaList();

TipoIncidenciaCollection tipocol = tipolist.GetItems();

 

EstadoIncidenciaList estadolist = new EstadoIncidenciaList();

EstadoIncidenciaCollection estadcol = estadolist.GetItems();

 

Tenemos, por ejemplo una expresión LINQ como esta:

var query2 = (from n in incidcol

join np in clasecol on n.ClasseIncidencia equals np.ID

join nc in tipocol on n.Tipo equals nc.ID

join ne in estadcol on n.Estado equals ne.ID

select new { id = n.ID, cliente = n.ContactId, claseincidencia = np.Titulo, estado = ne.Titulo, tipo = nc.Titulo }

);

 

El problema es que no podemos hacer un toList<Type> pq el tipo resultante es anónimo. La solución pasa por generar una Dataview

DataTable view = new DataTable();

view.Columns.Add("id");

view.Columns.Add("cliente");

view.Columns.Add("claseincidencia");

view.Columns.Add("tipo");

view.Columns.Add("estado");

foreach (var t in query2)

{

view.Rows.Add(t.id, t.cliente, t.claseincidencia, t.tipo, t.estado);

}

DataView dv = view.DefaultView;

 

Ahora que ya tenemos el objeto DataView ya lo podemos asignar a un DataSource o lo podemos filtrar por cada una de sus columnas mediante el método RowFilter.

Si queréis saber mas del método RowFilter en este link hay algunos ejemplos:

http://msdn.microsoft.com/en-us/library/bb669073(v=vs.90).aspx

Saludos

mayo 10
Ejemplos LINQ

En el siguiente enlace podrás encontrar 101 ejemplos de sintaxis enLINQ

http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

mayo 10
Como tratar una Collection con LINQ

Si definimos nuestra clase collection que herede de la clase collectionBase para listar un objeto que hemos definido, en lugar de utilizar una lista tipada, tiene una serie de ventajas:

  • Proteger para solo lectura el acceso los elementos de la lista
  • Podemos utilizar el Foreach para recorrer los elementos

Pero si queremos buscar un elemento dentro de la collection debemos recorrer todos los elementos

Solución:

  • Definimos que la clase collection herede de ienumerable
    • Debemos definir también el método getEnumerator

 

Aquí os pongo un ejemplo de las clases y sus instancias:

 

   public class LineaContrato

    {

 

        #region Private Vars

        internal bool disposed;

        internal int vID; //

        internal string vTitulo; //

        internal int vQty;//

        internal decimal vAmount;//

        internal Boolean vIsTotal;//

 

 

        #endregion

 

        #region Properties

 

        public int ID

        {

            get { return vID; }

        }

 

        public string Titulo

        {

            get { return vTitulo; }

        }

        public int Qty

        {

            get { return vQty; }

        }

        public decimal Amount

        {

            get { return vAmount; }

        }

        public Boolean IsTotal

        {

            get { return vIsTotal; }

        }

        #endregion

 

        public LineaContrato()

        {

        }

 

 

 

    }

 

    public class LineaContratoCollection : System.Collections.CollectionBase, IEnumerable<LineaContrato>

    {

        private bool disposed;

        public String Empresa;

        public String Centro;

 

 

        public LineaContrato Add()

        {

            LineaContrato item = new LineaContrato();

 

            return item;

        }

        public void Add(LineaContrato item)

        {

            List.Add(item);

        }

        public LineaContrato this[int index]

        {

            get

            {

                return (LineaContrato)List[index];

            }

            set

            {

                List[index] = value;

            }

        }

 

        public new IEnumerator<LineaContrato> GetEnumerator()

        {

 

            foreach (LineaContrato nom in this.List)

            {

                yield return nom;

            }

        } 

    }

 

    class Program

    {

 

        static void Main(string[] args)

        {

            LineaContratoCollection col = new LineaContratoCollection();

 

            LineaContrato lin = new LineaContrato ();

            lin.vID = 1;

            col.Add(lin);

            LineaContrato lin2 = new LineaContrato ();

            lin2.vID = 2;

            col.Add(lin2);

            LineaContrato lin3 = new LineaContrato ();

            lin3.vID = 3;

            col.Add(lin3);

            

            var query1 = from n in col

            where n.ID ==2

            select n;

            List <LineaContrato > lista;

            lista = query1.ToList<LineaContrato>();

            

            //ya puedes incluir la lista en qualquier datasource​

 

        }

    }

 

 

PSD: Al menos es lo que parece desde fuera, porque cuando LINQ se traducirá, internamente recorrerá todos los elementos J

abril 03
ConfigurationSettings deprecada: Utilizar ConfigurationManager

Si utilizáis la función de configuratinoSettings os dirá un mensaje de warning diciendo:

Warning 1 'System.Configuration.ConfigurationSettings.AppSettings' is obsolete: 'This method is obsolete, it has been replaced by ConfigurationManager.AppSettings'

Eso es pq es una función antigua que ya pronto dejara de estar soportada.

La solución es utilizar ConfigurationManager que esta situada en otra dll, System.Configuration.dll

  1. Añadir en el Proyecto, buscar "add reference"
    1. En el apartado de .net buscar la dll llamada System.Configuration
  2. Click Ok
  3. Ahora en el código ya podréis remplazar ConfigurationSettings.AppSettings por ConfigurationManager.AppSettings

 

Source http://msdn.microsoft.com/es-es/library/system.configuration.configurationmanager(v=vs.80).aspx

Saludos

enero 11
AJAX: Problemas de flicker (parpadeo) con Collapsiblepanelextender

Me he encontrado con algunos problemillas a la hora de utilizar el control de AJAX Collapsiblepanelextender.

 

El problema era que si te interesa que en la carga de la pagina, el panel de contenido aparezca contraído hacia un parpadeo.

El parpadeo era que durante unas decimas de segundo, aparecía el panel de contenido y luego desaparecía.

 

La solución es la siguiente:

 

Tenemos que crear una clase para aplicarla al panel de contenido que contenga height:0 overflow:hidden

.cpBody

        {

            height:0px;

            overflow: hidden;

        }

NOTA: Hay que hacer una clase CSS, no funciona si ponemos el estilo inline.

 

enero 11
Paleta de colores System.Drawing.Color
 
 
noviembre 23
Como hacer un reloj retro en ASP.NET AJAX
noviembre 13
Tocar el archivo de hosts de una maquina

Como tocar el archivo de hosts

Es un vestigio de los tiempos en que había pocos dominios. En la actualidad todas las peticiones se realizan a los servers DNS, no obstante se mantiene este archivo de modo que podamos modificar a mano que IP debe resolver determinados dominios.

 

Nos puede interesar enmascarar la IP de un servidor bajo un nombre. Esto facilita bastante los pasos a producción ya que podemos hacer que en todos lo entornos (desarrollo, test, preproducción, producción) el host dentro de cada entorno se llame igual.

 

Su localización es la siguiente:

  • Windows 95/98/Me: C:\Windows\hosts
  • Windows NT/2000: C:\WINNT\System32\drivers\etc\hosts
  • Windows XP/2003/Vista/7: C:\Windows\System32\drivers\etc\hosts
  • MacOS/iPhone: /private/etc/hosts
  • Unix/Linux/BSD: /etc/hosts
  • Novell NetWare: SYS:etc\hosts

Fuente: http://es.wikipedia.org/wiki/Archivo_hosts

noviembre 10
Un Visual Studio online, en el navegador. Coderun
El futuro web es muy prometedor. El navegador cada vez mas gana protagonismo a las aplicaciones de escritorio.
 
Bien, ahora ha venido el caso de tener un Visual Studio online, en el navegador. capaz de compilar codigo y generar soluciones.
 
Si lo quereis ver en vivo, no hace falta que os registreis. Lo podreis probar en este enlace : http://coderun.com/ide/
 
 
 
Llegará un punto que nada me sorprenderá   :)
septiembre 04
Windows4all
 
Windows4All es una aplicación hecha en silverlight basado en un sistema operativo virtual.
 
Una autentica virgueria!
 
 
1 - 10Siguiente