none
Como edito las celdas de un DataGridView que tiene los datos desde un datasource RRS feed

  • Pregunta

  • Tengo un DataGridView que tiene datos en el datasource que vienen del mi Entity, pero el datagridview no se puede editar, quisiera saber la manera de poder editar los datos que están en mi datagridview
    • Cambiado webJoseModerator domingo, 11 de noviembre de 2012 6:11 (De:Lenguaje C#)
    domingo, 11 de noviembre de 2012 5:36

Respuestas

  • hola

    de casualidad cuando creas la query de linq usas "var" para crear el resultado y esto lo asignas al datasource

    proque recuerda que con var no se puede editar, deebs asignar una clase

    si usas

    var query = from item in dbcontext.NombreProp

                         where ....

                        select new { prop1= item.prop1, prop2 = item.prop2 };

    datagridview1.DataSource = query;

    asi no se edita

    pero si haces

    List<Entidad>  query = (from item in dbcontext.NombreProp

                                              where ....

                                          select new NombreClass(){ prop1= item.prop1, prop2 = item.prop2 }).ToList();

    datagridview1.DataSource = query;

    debrias poder editar

    la diferencia esta en usar una clase concreta y no un tipo anonimo para asignar el grid

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    domingo, 11 de noviembre de 2012 5:50

Todas las respuestas

  • hola

    de casualidad cuando creas la query de linq usas "var" para crear el resultado y esto lo asignas al datasource

    proque recuerda que con var no se puede editar, deebs asignar una clase

    si usas

    var query = from item in dbcontext.NombreProp

                         where ....

                        select new { prop1= item.prop1, prop2 = item.prop2 };

    datagridview1.DataSource = query;

    asi no se edita

    pero si haces

    List<Entidad>  query = (from item in dbcontext.NombreProp

                                              where ....

                                          select new NombreClass(){ prop1= item.prop1, prop2 = item.prop2 }).ToList();

    datagridview1.DataSource = query;

    debrias poder editar

    la diferencia esta en usar una clase concreta y no un tipo anonimo para asignar el grid

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    domingo, 11 de noviembre de 2012 5:50
  • Si Leandro, lo que sucede es que estoy utilizando un select new por que cojo diferentes campos de diferentes clases y creo un objeto que no esta definido en mi programa, entonces que seria lo recomendable..??

    Blog: http://www.technology-park.com/qwerty/

    domingo, 11 de noviembre de 2012 20:45
  • Tienes que crearte una clase que representen los diferentes campos que quieres mostrar en el grid.

    public class NombreClass
    {
            public int Id { get; set; }
            public string Nombre { get; set; }
            public string Apellido { get; set; }
            //tus demas propiedades
    }

    Entonces tendrias que hacer.

    List<NombreClass> query = from datos in Context.Entidad
                select new NombreClass
                {
                     Id = datos.Id,
                     Nombre = datos.Nombre,
                     Apellido = datos.Apellido,
    
                };
    
    datagriedview1.Datasource = query.ToList();

    Como veras en el select new utilizarías la clase que te creaste con sus diferentes propiedades, para acceder a las propiedades de todas las entidades que usas tendrias que hacerlo por medio de las propiedades de navegacion de la entidad a la cual estas haciendo el select.

    Saludos.


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador

    domingo, 11 de noviembre de 2012 23:15
  • La aclaración esta muy bien, pero como nunca he usado List<> tengo muchas dudas, Supongo que:

    • NombreClass la debo crear en el Model del Entity, pero no estoy seguro.
    • Context: ¿se refiere a la variable del nombre de mi entitidad?.
    • Entidad: La tabla a la que estoy accediendo. Busque en la web y no encontre nada concreto, si me pueden explicar esto mas claro.

    Disculpen soy nuevo en el entity framwork.

    Gracias


    omixan - Lo único difícil es identificar el problema.... Física, Mecatrónica, C++, SQL Server Aprendiz de VB y C# .Net


    • Editado omixan lunes, 19 de noviembre de 2012 14:38
    lunes, 19 de noviembre de 2012 14:36
  • El NombreClass no necesariamente lo tienes que crear en el Model del Entity basta con que sea accesible para la función o método que estas usando.

    El context se refiere al nombre que le das a tu entidad una vez que lo instancias.

    Entidad es un modelo de la tabla que es una clase que crea el Entity.

    lunes, 19 de noviembre de 2012 14:47
  • Gracias por la aclaración,sigo con inconvenientes, ahora tengo el siguiente problema:

    class NombreClass {

    //Aqui tengo las propiedades

    }


    cuando trato de hacer la consulta,

    List<NombreClass> query = from datos in Context.Entidad select new NombreClass {

    }

    Tengo el siguiente error:

    Error    1    Cannot implicitly convert type 'System.Linq.IQueryable<namespaceModel.NombreClass>' to 'System.Collections.Generic.List<namespaceModel.NombreClass>'. An explicit conversion exists (are you missing a cast?)   

    ¿Como podría resolver esto?



    omixan - Lo único difícil es identificar el problema.... Física, Mecatrónica, C++, SQL Server Aprendiz de VB y C# .Net


    • Editado omixan lunes, 19 de noviembre de 2012 15:07
    lunes, 19 de noviembre de 2012 14:58
  • Lo que pasa es que tu query devuelve una lista de clases, pero de tu Entity, y el error te da por que tu lo estas guardando en una lista de clases que no es del entity, por que supongo que tu "NombreClass" no es del entyti.

    Lo que puedes hacer es un foreach para pasar cada una de las propiedades de la clase del entity a la clase que tu creaste.


    lunes, 19 de noviembre de 2012 15:13
  • NombreClass la agregue de forma manual al Model del Entity.... Intente con un foreach pero no me funciona....

    List<NombreClass> query = (from datos in Context.Entidad

    where select new NombreClass {

    datos 

    }).ToList();

    Error    1    Cannot initialize type 'namespaceModel.prueba' with a collection initializer because it does not implement 'System.Collections.IEnumerable'    C:\Users\Visual Studio 2012\Projects\Proyecto\Form1.cs    2985    26   

    Me urge encontrar una solución, ya que haciendo el query con var es más fácil, pero no puedo editar el datagrid luego....


    omixan - Lo único difícil es identificar el problema.... Física, Mecatrónica, C++, SQL Server Aprendiz de VB y C# .Net

    lunes, 19 de noviembre de 2012 17:58
  • Te recomendaría que la clase no este dentro del Modelo, y asegúrate que la estructura del foreach haya sido parecida a esta:

    List<NombreClass> ObjetoLista = new List<NombreClass>();
    
    foreach(ClaseDeLaEntidad item in Context.Entidad)
    {
    	NombreClass ObjetoNombreClass = new NombreClass();
    	
    	ObjetoNombreClass.propiedad1 = item.propiedad1
    	ObjetoNombreClass.propiedad2 = item.propiedad2
    	ObjetoNombreClass.propiedad3 = item.propiedad3
    	
    	ObjetoLista.Add(ObjetoNombreClass);
    
    }
    
    return ObjetoLista;

    lunes, 19 de noviembre de 2012 18:06
  • Pero luego que le asigno el query al datagrid no puedo ordenar las columnas haciendo clic encima de los header.

    ¿Hay alguna forma para solucionar esto?


    omixan - Lo único difícil es identificar el problema.... Física, Mecatrónica, C++, SQL Server Aprendiz de VB y C# .Net

    martes, 20 de noviembre de 2012 15:35