none
Llenar un Datagrid con procediento Almacenando y EF RRS feed

  • Pregunta

  • Nuevamente Buenas tardes.

    necesito cargar los datos de mi tabla tblCargos en un DataGridView

    tengo este metodo

    public static void ListaCargos()
            {
                using(GourmetEntities db = new GourmetEntities())
                {
                    db.SP_Lista_Cargo(); // Este mi Procedimiento
                }
            }

    para llamarlo desde el load he hecho esto

    pero me sale un error 

    como lo tengo comentado funciona perfectamente, pero quiero hacerlo desde métodos y llamando mis procedimientos 

    por favor como debo hacer para que me muestre los datos.

    Gracias

    Roberto

    viernes, 21 de febrero de 2020 20:52

Respuestas

  • Falta poner un ".ToList()":

     return db.SP_Lista_Cargo().ToList();

    La razón es que al salir del bloque "using" se cierra la conexión, por lo que el programa llamante no puede usar el objeto devuelto por el objectcontext para materializar la consulta. Al llamar a ToList, se materializa la consulta en ese momento, y se devuelven los datos ya cargados en memoria, con lo que el llamante ya no necesita que el objectcontext esté abierto.

    sábado, 22 de febrero de 2020 8:29
    Moderador

Todas las respuestas

  • El problema es que el procedimiento es "void". Quita el void y en su lugar escribe el tipo de dato que devuelva SP_Lista_Cargo (si no lo sabes, puedes verlo desde el propio Visual Studio usando la opción "ir a la definicion").

    Una vez hecho eso, agrega return en la llamada al procedimiento:

            public static pon_aqui_el_tipo ListaCargos()
            {
                using(GourmetEntities db = new GourmetEntities())
                {
                    return db.SP_Lista_Cargo(); // Este mi Procedimiento
                }
            }

    viernes, 21 de febrero de 2020 22:14
    Moderador
  • Estimado cuando le doy ir a definicion me lleva a este metodo

    public virtual ObjectResult<SP_Lista_Cargo_Result2> SP_Lista_Cargo()
            {
                return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<SP_Lista_Cargo_Result2>("SP_Lista_Cargo");
            }

    que debo hacer con esto por favor

    Gracias

    Roberto

    viernes, 21 de febrero de 2020 22:55
  • Lo hice de esta manera

    public static object ListadoCargos()
            {
                using(GourmetEntities db = new GourmetEntities())
                {
                    return db.SP_Lista_Cargo();
                }
            }

    y me muestra este error

    por favor que mas debo hacer

    Gracias

    viernes, 21 de febrero de 2020 22:59
  • Falta poner un ".ToList()":

     return db.SP_Lista_Cargo().ToList();

    La razón es que al salir del bloque "using" se cierra la conexión, por lo que el programa llamante no puede usar el objeto devuelto por el objectcontext para materializar la consulta. Al llamar a ToList, se materializa la consulta en ese momento, y se devuelven los datos ya cargados en memoria, con lo que el llamante ya no necesita que el objectcontext esté abierto.

    sábado, 22 de febrero de 2020 8:29
    Moderador
  • Efectivamente muchas gracias.

    Roberto

    sábado, 22 de febrero de 2020 13:25