none
Como llenar cada columna de datagridview con una lista diferente RRS feed

  • Pregunta

  • Tengo una lista 

    List<string> datosFactura = new List<string>();

    que lleno con los datos que obtengo de un datagridview

    foreach (DataGridViewRow filasFactura in dgvMostrarFactura.Rows) { string valorNumeroFactura = Convert.ToString(filasFactura.Cells["Numerofactura"].Value); if (valorNumeroFactura == txtBuscarEstadoCuenta.Text) { datosFactura.Add(valorNumeroFactura);

    datosFactura.Add("FACTURA");

    } }

    Esto para mostrar esta consulta en otro datagridview, recorro 3 datagridview diferentes para mostrar todos las datos en uno solo, el problema es que quiero que la palabra "FACTURA" que agrego a la list<string> me aparezca en la segunda columna del datagridview.

    Lleno el datagridview de esta manera
    dgvEstadoCuenta.Rows.Add(datosFactura);

    Y cuando me muestra los registros me los muestras en una sola columna. Como creo 2 listas diferentes y que cada lista sea una columna? o hay una manera mas sencilla, de que si los datos del textbox coinciden con la celda del datagridview me traiga todos los datos de esa fila?


    • Editado NathalyChR lunes, 14 de septiembre de 2020 19:33
    lunes, 14 de septiembre de 2020 19:29

Todas las respuestas

  • Como creo 2 listas diferentes y que cada lista sea una columna?

    No, no funciona así. El DataGridView solo sabe vincularse a datos desde una única lista. Si quisieras cargar varias listas, tendrías que hacer varios bucles recorriendo cada lista y pasando sus datos a la columna correspondiente, cosa que implica que todas las columnas tendrían que estar pre-creadas para luego poderlas rellenar; no puedes hacer que se creen automáticamente con el .Rows.Add, porque así solo se crearía una.

    Afortunadamente hay una forma más sencilla de hacerlo. Lo que haces no es crear varias listas diferentes, sino que creas una única lista. La lista no es de String, sino de una clase definida por ti de manera que tenga tantas propiedades como columnas quieras mostrar en el grid. Entonces simplemente creas esa única lista y la rellenas con todos los datos deseados. Si esos datos provienen de varios sitios distintos, no hay problema en que recorras la lista varias veces y a cada pasada rellenes una de las columnas, si por alguna razón no puedes rellenarlas todas de golpe.

    Y una vez que ya tienes esa lista "ancha" rellena de datos, simplemente se la asignas al DataSource del DataGridView y ¡listo! solo con eso el DataGridView muestra inmediatamente todos los datos de todas las columnas.

    lunes, 14 de septiembre de 2020 20:04
    Moderador
  • Hola NathalyChR,

    Para añadir a la respuesta de Alberto, acá un ejemplo si lo haces con una clase:

    // clase de ejemplo Libro
    
    public class Libro
    {
        public string Titulo { get; set; }
        public string Precio { get; set; }
    }
    
    //Bind data to DataGridView
    
    var list = new List<Libro>();
    for (int i = 0; i < list1.Count; i++)
    {
        list.Add(new Libro()
        {
            Titulo = list1[i],
            Precio = list2[i]
        });
    }
    
    this.dataGridView1.AutoGenerateColumns = true;
    this.dataGridView1.DataSource = list;

    Acá un ejemplo añadiendo los datos de varias listas una columna a la vez:

            List<dynamic> 1erNombre = new List<dynamic>();
            List<dynamic> Edad = new List<dynamic>();
            List<dynamic> Cantidad = new List<dynamic>();
    
            1erNombre.Add("John Doe");
            Edad.Add("56");
            Cantidad.Add("90");
    
            1erNombre.Add("James Doe");
            Edad.Add("34");
            Cantidad.Add("24");
    
            DataTable dt = new DataTable();
            dt.Columns.Add("Name");
            dt.Columns.Add("Number");
            dt.Columns.Add("Value");
    
            for (int i = 0; i < 1erNombre.Count; i++)
            {
                dt.Rows.Add(1erNombre[i], Edad[i], Cantidad[i]);
            }
    
            gvSP.DataSource = dt;
            gvSP.DataBind();

    Espero que te sea de ayuda.  Por favor no olvides marcar una respuesta si resolviste tu consulta. Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    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. 


    lunes, 14 de septiembre de 2020 20:39
    Moderador
  • Hola Nathaly

    Aunque ya te dieron respuestas correctas, me parece que quizás en este caso en particular podría hacerse un poquito más fácil y compacto. Tendrías que eliminar la linea que añade "FACTURA" al List datosFactura, no hace falta porque es la misma palabra en toda la 2da columna, entonces se puede hardcodear (poner un valor constante).

    dgvEstadoCuenta.ColumnCount = 2;  // 2 columnas
    
    for (int a = 0; a < datosFactura.Count; a++)
    {
        dgvEstadoCuenta.Rows.Add();
        dgvEstadoCuenta.Rows[a].Cells[0].Value = datosFactura[a];
        dgvEstadoCuenta.Rows[a].Cells[1].Value = "FACTURA";
    }

    Saludos

    Pablo

    sábado, 19 de septiembre de 2020 21:12
  • Hola NathalyChR,

    ¿Alguna novedad sobre tu pregunta? ¿Han sido útiles las respuestas proporcionadas? Por favor no olvides marcar una respuesta si resolviste tu consulta (debajo de cada post hay una opción que dice "Marcar como respuesta").

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    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. 

    martes, 22 de septiembre de 2020 17:42
    Moderador