none
¿Cómo puedo ordenar los datos que recibo de los textbox, combobox y datetimepicker de una forma en c#? RRS feed

  • Pregunta

  • Hola! Tengo una forma en donde capturo los datos de un formulario y los agrego a una lista. El problema, es que quiero ordenar esos datos según la numeración que le ponga a los tags, había pensado que visual me los devolvía desde el último número al primero, pero me dí cuenta que devuelve los componentes en el orden en que fueron creados, por lo que altera el orden de los datos. Este es mi código:

          public void Capturar_datos(Form forma, string nombre_tabla)
                {
                    int posicion = 0, cont = 0;
                    foreach (Control x in forma.Controls)
                    {
                        if (x is TextBox || x is DateTimePicker || x is ComboBox)
                            {
                            if (x.Tag.ToString() != null && x.Tag.ToString() != "")
                            {
                                cont++;
                            }
                        }     
                    }
                    foreach (Control x in forma.Controls)
                    {
                        if (x is TextBox || x is DateTimePicker || x is ComboBox)
                        {
                           if (x.Tag.ToString() != null && x.Tag.ToString() !="" )        
                           {
                                if (x.Text != "")
                                {
                                    if (x is TextBox || x is DateTimePicker)
                                    {
                                        pila.Push(x.Text);
                                        posicion++;
                                    }
                                    else if (x is ComboBox) {
                                        string valor;
                                        ComboBox nuevoCmb = x as ComboBox;
                                        valor = nuevoCmb.SelectedValue.ToString();
                                        pila.Push(valor);
                                        posicion++;
                                    }                   
                                }

                           }
                        }
                    }

                    if(posicion==cont){
                        for (int i = 0; i < cont; i++)
                        {
                            contenido = pila.Pop().ToString();
                            lista.Add(contenido);
                            Insertar_datos(lista,nombre_tabla,cont);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Quedan campos sin llenar, por favor asegurese de haber llenado todos los datos antes de guardar", "Campos Vacios", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
        }


        
    martes, 7 de julio de 2020 23:53

Todas las respuestas

  • Hola anonimo19, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Entendimos su pregunta y vamos a darle seguimiento para buscar la mejor repuesta pertinente al caso.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.   

     

     Andres Aguilar

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    miércoles, 8 de julio de 2020 0:53
    Moderador
  • hola

    Porque no te ayudas con linq, aunque no se si se pueda mezclar de forma directa en una lista todos los datos

    podrias crear una clase como ser

    public class Item{
    
       public int Index {get;set;}
    
       public valor {get;set;}
    
    }


    y luego vas volcando los datos

    List<Item> list1 = forma.Controls.OfType<TextBox>().Select(c=> new Item(){Index = int.Parse(c.Tag), valor = c.Text }).ToList();
    
    List<Item> list2 = forma.Controls.OfType<DateTimePicker>().Select(c=> new Item(){Index = int.Parse(c.Tag), valor = c.Value.ToString("dd/MM/yyyy")}).ToList();
    
    List<Item> list3 = forma.Controls.OfType<ComboBox>().Select(c=> new Item(){Index = int.Parse(c.Tag), valor = c.SelectedValue.ToString}).ToList();


    teniendo las listas puedes unirlas

    var lista = list1.Union(list2);
    
    lista = lista.Union(list3);
    
    var listaOrdenada = lista.OrderBy(x=>x.Tag).ToList();

    Enumerable.Union Method

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 8 de julio de 2020 0:57
  • Hola! Gracias por responder! El único problema que tengo al tratar de ordenar las listas juntas es que no reconoce la propiedad de Tag para x, entonces no me deja ordenarlo... Pero no sé si el problema es que estoy usando c# y no me dí cuenta de que había puesto la pregunta en la sección de ASP y el código difiera, perdón por la ignorancia, pero de igual manera gracias por la ayuda! :D
    miércoles, 8 de julio de 2020 18:58