none
Como puedo Cargar un DataGrid Usando Linq RRS feed

  • Pregunta

  • Hola buenos dias 

    Me puede guiar como hacer poder hacer en capas les muestro como he estado intentando. pero no se me da

            public void Xxxxx(DataGridView xdataGrid)
            {
                Demo_FacturaBDDataContext aaa = new Demo_FacturaBDDataContext();
                var xx = from xxx in aaa.sp_cargar_categoria()
                         select xxx;
                xdataGrid.DataSource = xx;
            }

    Nota lo estoy haciendo en capas
    • Editado Ronal Funes domingo, 15 de julio de 2018 14:57
    domingo, 15 de julio de 2018 14:57

Todas las respuestas

  • No es buena idea hacerlo como lo estás haciendo. Fíjate que esa subrutina tendría que estar en la capa de datos, pero le estás pasando como argumento un datagrid. Eso implica que le estás dando información a la capa de datos acerca de la capa de presentación. Esto es contrario al modelo de capas, en el que las capas inferiores no deben "saber" nada de las capas superiores. La idea es que deberías poder, por ejemplo, convertir la aplicación de escritorio en una aplicación web sin más que hacer una nueva capa de presentación y sin cambiar nada de las capas de negocio y/o acceso a datos. Pero con la estructura que has hecho no se podría, porque no existe la clase DataGridView en Web.

    Lo correcto es que no pases el DataGridView a la capa de datos para que ésta lo rellene, sino que debes hacer que la capa de datos devuelva los datos encapsulados en algún objeto adecuado, y al recibir ese objeto la capa de presentación lo use para rellenar el Grid. Esto tiene una consecuencia: no puedes usar tipos anónimos en el LINQ, porque el tipo anónimo solo es válido localmente, no puedes devolverlo desde la rutina (bueno, sí, puedes, pero para consumirlo tendrías que usar reflexión o tipos dinámicos, cosa que no es nada conveniente). Así que tienes que declarar la clase concreta que vas a devolver.

    Por ejemplo, no puedes poner "... select new { codigo, precio }" sino que tiene que ser "... select new MiClase(codigo, precio)". Obviamente esto es más trabajoso porque hay que declarar esa clase por separado, pero luego te permite declarar el método como IEnumerable<MiClase> en lugar de void, y en la capa de presentación pones DataGrid1.DataSource=Xxxxx() y ya te sale el datagrid cargado con los datos.

    domingo, 15 de julio de 2018 17:09
    Moderador
  • hola

    Si la aplciaicon es en capas no deberias pasar el gri como parametro, deberias asignarlo

    la idea es que desde la capa de negocio o datos retornes los datos

    public void Xxxxx()
    {
    	Demo_FacturaBDDataContext aaa = new Demo_FacturaBDDataContext();
    	var result = (from xxx in aaa.sp_cargar_categoria()
    					select xxx).ToList();
       
       return result;
    }
    
    

    y en la presentacion lo asignas al control

    public void button1_click(..){
    
    	xdataGrid.DataSource = instancia.Xxxxx();
     
    }

    no pasas por parametro ningun control a otra capa

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 16 de julio de 2018 16:18