entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

[C#] Cargar combobox con lista genérica que contiene "sublistas".

Hola!

Estoy trabajando con C# y WinForm y no puedo avanzar debido a que no encuentro la solución a lo siguiente, explico:

Estoy llenando mis dos ComboBox con una lista genérica:

List<Estatus> listEstMot = .....;                

y lo hago de la siguiente forma:

(**)
var estatus =
                (from listEs in listEstMot                 
                 select new                 
                 {                                                               
                     DisplayMemberEst = listEs.Estatus.Descripcion,
                     ValueMemberEst = listEs.Estatus.Id,                  
                     DisplayMemberMot = listEs.Motivos[**??**].Descripcion,                                                              
                 }).ToList();                                  

            cmbEstatus.DataSource = estatus;
            cmbEstatus.DisplayMember = "DisplayMemberEst";
            cmbEstatus.ValueMember = "ValueMemberEst";            

            cmbMotivo.DataSource = estatus;
            cmbMotivo.DisplayMember = "DisplayMemberMot";

...Lo hago de esa forma ya que mi objeto "Estatus" contiene una lista de motivos algo como esto:

Estatus =
{
  Clave: 0001,
  Descripción: 'En Proceso',
  Motivos =
  {
    Clave: 0002,
    Descripción: 'En taller y'
  },
  {
    Clave: 0001,
    Descripción: 'En taller x'
  }
}

.. lleno los combobox de esa forma porque no funciona el:

cmbEstatus.DisplayMember = "Estatus.Descripcion";
cmbEstatus.ValueMember = "Estatus.Id";  

Y ya que mi estatus puede contener varios motivos, pueees.. la cuestión es, que cuando quiero mostrar los Motivos con el código(**), lo tengo que hacer de la siguiente forma:

 DisplayMemberMot = listEs.Motivos[**??**].Descripcion,  

pero tengo que indicarle un index por ser varios motivos, en todo caso si le pongo 0, me traerá todo los motivos de todo los estatus que estén en la posición 0, lo que yo quiero hacer es que me traiga TODOS los motivos de todos los estatus no solo los que se encuentren en x posición.

pero no he encontrado la forma de como hacerlo, ya que no puedo meter 'for' dentro del select (obviamente). y estando fuera del 'select' no puedo acceder a los elementos que forman el listado.

2 Respuestas

2votos

Andhii1293 Puntos2840

Al final encontré la solución y queda de la siguiente forma:

(***)
            Estatus motDeEst = (Estatus)cmbEstatus.SelectedItem;
            cmbMotivo.DataSource = motDeEst.Motivos;
            cmbMotivo.DisplayMember = "Descripcion";
            cmbMotivo.ValueMember = "Id";

Hice que dependiera del item de estatus, es decir tenia mis dos combos y el combo de estatus lo llenaba así:

            cmbEstatus.DataSource = listEstMot;
            cmbEstatus.DisplayMember = "Descripcion";
            cmbEstatus.ValueMember = "Id";

Luego teniendo lleno el combobox con mis estatus, (El objeto Estatus ya contiene cada uno su lista de motivos), cuando selecciono un estatus en el combo llamo al evento que valida el cambio en el combo, osea al evento:

cmbEstatus_SelectionChangeCommitted

y obtengo el SelectedItem lo convierto en un objeto tipo Estatus y de dicho objeto solo obtengo los motivos que le pertenecen al estatus que tengo seleccionado (***)

y funciona! de esta forma solo me muestra en el combo de motivos, los motivos que le corresponden al estatus que tengo seleccionado.

saludos!

Peter comentado Ene 29, 2016

Gracias por compartirla!

2votos

bl4z3r Puntos16340

¿Intentaste de la siguiente manera?

var motivos = new List<Motivos>(); 
listaEstado.ForEach(x => motivos.Add(x.Motivo));

Andhii1293 comentado Ene 29, 2016

Lo intente de esa forma pero aun así, me pedía indicarle un index, y si lo dejaba solo así, me marcaba error.

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

¿Eres Usuario Apple?

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta