none
Cargar dropdownlist con varias columnas de base de datos RRS feed

  • Pregunta

  • Buenas, estoy trabajando con mvc3 y tengo un problema, he buscado por todas partes pero no logre solucionarlo.

    Tengo una tabla Docentes en la que tengo las columnas

    Codigo, ApellidoPaterno, ApellidoMaterno, Nombres, DNI, Celular

    Al Docente se le tiene que asignar un curso, entonces debo cargar el ApellidoPaterno, Materno y Nombres en un dropdownlist  y trabajar solamente con el Codigo del Docente ya que es mi llave foranea.

    Actualmente le estoy pasando al dropdownlista de la siguiente forma

    ViewBag.CodigoDocente = new SelectList(db.Docente, "CodigoDocente", "CodigoDocente") y en el dropdownlist me carga solamente los codigos.

    Como puedo cargar un dropdownlist con estas 3 columnas de mi base de datos??? (Apellido Paterno, Materno y nombres)??


    Luis


    • Editado luis.isg sábado, 10 de noviembre de 2012 19:46
    sábado, 10 de noviembre de 2012 19:35

Respuestas

  • No, tiene que alterar la clase Docente.  Veo que parece estar usando Entity Framework, que es algo que yo nunca uso, así que no sé qué posibilidades tiene usted de cambiar Docente.  Espero que pueda cambiarla (que haya usado Code First).

    public class Docente
    {
        public string ApellidoPaterno { get; set; }
        public string ApellidoMaterno { get; set; }
        public string Nombres { get; set; }
        //etc.  Las demás propiedades.  Adicionalmente agregue algo como:
        public string NombreCompleto
        {
            get
            {
                return String.Format("{0} {1}, {2}", ApellidoPaterno, ApellidoMaterno, Nombres);
            }
        }
        ...
    }

    Así tiene una propiedad de sólo lectura que devuelve el nombre completo.  Luego es tan fácil como:

    ViewBag.CodigoDocente = new SelectList(db.Docente, "CodigoDocente", "NombreCompleto");


    Jose R. MCP
    Code Samples

    • Marcado como respuesta luis.isg sábado, 10 de noviembre de 2012 20:33
    sábado, 10 de noviembre de 2012 20:22

Todas las respuestas

  • Tiene que construir el nombre completo en una propiedad de sólo lectura en la clase Docente, luego usar el nombre de esa propiedad como tercer argumento en la construcción del objeto SelectList.  Actualmente le muestra los códigos porque su tercer argumento es CodigoDocente.  Si fuera Nombres, le mostraría los nombres, si fuera ApellidoPaterno le mostraría el apellido paterno, etc.

    Jose R. MCP
    Code Samples

    sábado, 10 de noviembre de 2012 19:57
  • Estimado Jose, recien me inicio en mvc 3,

    como podria almacenar el nombre completo???

    actualmente estoy recuperando estas 3 columnas(apellitopaterno, materno y nombre) de la siguiente forma:

    Docente docente = new Docente();

    string nombrecompleto = (docente.ApellidoPaterno + docente.ApellidoMaterno + docente.Nombres);

    //y al dropdownlist le paso

    ViewBag.nombres= new SelecList(db.Docente, "CodigoDocente", nombrecompleto.ToString());


    Luis

    sábado, 10 de noviembre de 2012 20:09
  • No, tiene que alterar la clase Docente.  Veo que parece estar usando Entity Framework, que es algo que yo nunca uso, así que no sé qué posibilidades tiene usted de cambiar Docente.  Espero que pueda cambiarla (que haya usado Code First).

    public class Docente
    {
        public string ApellidoPaterno { get; set; }
        public string ApellidoMaterno { get; set; }
        public string Nombres { get; set; }
        //etc.  Las demás propiedades.  Adicionalmente agregue algo como:
        public string NombreCompleto
        {
            get
            {
                return String.Format("{0} {1}, {2}", ApellidoPaterno, ApellidoMaterno, Nombres);
            }
        }
        ...
    }

    Así tiene una propiedad de sólo lectura que devuelve el nombre completo.  Luego es tan fácil como:

    ViewBag.CodigoDocente = new SelectList(db.Docente, "CodigoDocente", "NombreCompleto");


    Jose R. MCP
    Code Samples

    • Marcado como respuesta luis.isg sábado, 10 de noviembre de 2012 20:33
    sábado, 10 de noviembre de 2012 20:22
  • Muchas gracias Estimado Jose:

    Efectivamente ahora me cargan los Apellidos Paterno, Materno y Nombres.

    Mil Gracias!


    Luis

    sábado, 10 de noviembre de 2012 20:34
  • Hola.

    Aunque funcione no me parce una opción adecuada, es decir tener que modificar tus entidades de dominio por algo que es solo un requerimiento en Presentación no lo veo muy optimo.

    Deberías pensar en crear View Models que satisfagan este tipo de necesidades en las Views del proyecto.

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG | @nicolocodev
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes

    sábado, 10 de noviembre de 2012 22:57
  • Es un punto válido, ciertamente.  Creo que simplemente no lo vi de esa forma porque supongo que se le pueden dar más usos a dicha propiedad, pero estrictamente hablando podría verse como una transgresión de los requerimientos de la vista en la capa de negocio.  Otro detalle que probablemente oscureció esta posibilidad es el hecho de que es una propiedad de sólo lectura que no afecta cómo trabaja la capa de negocio, así que supongo que fue algo más que contribuyó a que yo no viera la adición de la propiedad como una capa tratando de dominar otra.

    Jose R. MCP
    Code Samples

    domingo, 11 de noviembre de 2012 4:23