none
COMO LLENAR UN DATAGRID DESDE DOS FORMULARIOS EN C# RRS feed

  • Pregunta

  • Hola buena tarde, espero y se encuentren de lo mejor.

    Quisiera saber, como puedo hacer  para pasar datos de dos formularios a un datagridview que se encuentra en un tercer formulario, les explico:

    Cuento con un formulario el cual tiene por nombre COTIZACIÓN en este formulario tengo como datos MODELO(combobox), MARCA (combobox), SISTEMA(combobox), CANTIDAD (textbox), ANCHO (textbox), ALTURA (textbox).En mi segundo formulario llamado ENROLLABLE cuento con los datos TIPO TELA (combobox) MODELO DE TELA (combobox).

    En el formulario COTIZACIÓN cuento con un botón llamada AGREGAR LINEA este botón lo que hace es mostrar el tercer formulario llamado LISTA el cual contiene el DGV, quisiera que cuando le diera click a este botón los datos que tengo en mis dos formularios se mostrara en el dgv.

    La verda recurro a ustedes ya que e investigado y nadamas no e podido hacerlo, opte por hacer variables publicas en cada formulario en donde almacenaba los datos correspondientes pero no me sale, quisiera que me aconsejaran de que es lo que tengo que hacer o como es que lo tengo que hacer.

    Cuento con dos métodos, que se los dejare enseguida, estos métodos lo que hacen es solo generar las columnas y el segundo es insertar datos en el datagrid, espero y puedan ayudarme de antemano gracias.

                 

    public void llenarDGV(DataGridView DGV, string cantidad, string cargos, string modelo, string sistema,string ancho, string alto,string m2, string preciobase, string descuento, string importe, string totaldesc, string total, string descripcion)

            {

                renglon = tabla.NewRow();
                renglon[0] = cantidad;
                renglon[1] = cargos;
                renglon[2] = modelo;
                renglon[3] = sistema;
                renglon[4] = ancho;
                renglon[5] = alto;
                renglon[6] = m2;
                renglon[7] = preciobase;
                renglon[8] = descuento;
                renglon[9] = importe;
                renglon[10] = totaldesc;
                renglon[11] = total;
                renglon[12] = descripcion;
                tabla.Rows.Add(renglon);
                DGV.DataSource = tabla;

            }

            public void creacloumna(DataGridView dgv)
            {
                tabla = new DataTable();
                tabla.Columns.Add("Cantidad");
                tabla.Columns.Add("Cargos");
                tabla.Columns.Add("Modelo");
                tabla.Columns.Add("Sistema");
                tabla.Columns.Add("Ancho");
                tabla.Columns.Add("Alto");
                tabla.Columns.Add("MT2");
                tabla.Columns.Add("Precio Base");
                tabla.Columns.Add("Descuento");
                tabla.Columns.Add("Importe");
                tabla.Columns.Add("Total de Descuento");
                tabla.Columns.Add("Total");
                tabla.Columns.Add("Descripcion");
                dgv.DataSource = tabla;

            }

    sábado, 16 de diciembre de 2017 0:28

Respuestas

  • Hola. Para que se actualice el DGV hay que eliminar primero los datos viejos, así:

    dgv.DataSource = null;

    dgv.DataSource = tabla;

    Ovbiamente, al hacer esto perdés todos los renglones cargados con anterioridad. Solución: Crear todos los renglones primero en una lista y despúes los mostrás en DGV. Para ello, lo más fácil y útil es crear una clase llamada Renglon y una lista por ejemplo:

    // Crear clase Renglon public class Renglon { public int Cantidad { get; set; } public String Cargos { get; set; } public String Modelo { get; set; } public String Sistema { get; set; } public int Ancho { get; set; } public int Alto { get; set; } public int MetrosCuadrados { get; set; } public double PrecioBase { get; set; } public double Descuento { get; set; } public double Importe { get; set; } public double TotalDesc { get; set; } public double Total { get; set; } public String Descripcion { get; set; } } // Crear lista de renglones public List<Renglon> Renglones = new List<Renglon>(); //y con este medodo vas cargando los renglones public void AgregarNuevoRenglon(int cantidad, string cargos, string modelo, string sistema, int ancho, int alto, int m2, double preciobase, double descuento, double importe, double totaldesc, double total, string descripcion) { Renglon r = new Renglon(); r.Cantidad = cantidad; r.Cargos = cargos; r.Modelo = modelo; r.Sistema = sistema; r.Ancho = ancho; r.Alto = alto; r.MetrosCuadrados = m2; r.PrecioBase = preciobase; r.Descuento = descuento; r.Importe = importe; r.TotalDesc = totaldesc; r.Total = total; r.Descripcion = descripcion; Renglones.Add(r); }

    //para mostrarlos haces

    DGV.Datasource = null;

    DGV.Datasource = Renglones;

    No te doy más detalles porque no se si te interesa esta opción.

    Saludos



    jueves, 21 de diciembre de 2017 11:30
  • Hola buen dia, Agradezco muchisimo su ayuda Pablo Rubio y Juan Mondragon.

    Juan que bien la opcion de actualizacion, de echo me sirve.

    El problema lo resolvi con el mismo método que les mostré en la parte superior.

    En si el problema es que no podía pasar variables de los distintos formularios que serian insertadas en el DGV. investigado y leyendo me tope con la opción de realizar una clase estática en donde declaraba las variables que necesito de cada formulario, y en cada formulario asignaba a la variable su valor correspondiente , con esto pude llenar el DGV

    public static class variables
    {
       //Variables que su valor será asignado en el formulario1
       public static string modelo;
       public static string marca;
       public static string sistema;
      
      //Variables que su valor será asignado en el formulario 2
       public static string tipoTela;
       public static string modeloTela;
    
    }
    
    formulario 1
    //Aqui asignaremos el valor a las variables del formulario1
    //declaradas en la clase estática
    private void button1_Click(object sender, EventArgs e)
    {
       //llamamos las variables de form1 recordando que en las clases
       //estáticas no se realiza ninguna instancia por lo que se 
       //llama a los métodos o variables con el nombre de la clas
       variables.modelo = comboModelo.selectedItem.ToString();
       variables.marca = comboMarca.selectedItem.ToString();
       variables.sistema = comboSistema.selectedItem.ToString();
    }
    
    formulario 2
    /*Ya que necesitamos un evento para llamar la variable y asignarle un valor, opte por ponerlo dentro de su combobox correspondiente para que en el momento que seleccione el item este se guarde en la variable correspondiente*/
    
    private void combotipoTela_SelectedIndexChanged(object sender, EventArgs e)
    {
     variables.tipoTela = combotipoTela.selectedItem.ToString();
    
    
    }
    
    private void combomodeloTela_SelectedIndexChanged(object sender, EventArgs e)
    {
         variables.modeloTela = 
         combomodeloTela.selectedItem.ToString();
    
    }

    Y ya que tenía las variables con los datos que necesitaba, solo lo inserte en el DGV con los metodos con los que externe mi duda.

    Espero y esto pueda ayudar a alguien y que también sea correcto lo que hice, por lo menos hace lo que necesitaba.

    Saludos a todos, me despido no sin antes desearles una Feliz Navidad y un nuevo año lleno de éxitos y nuevos conocimientos. Saludos desde mi bonito México. 



    Marco Fabricio Lopez Rangel

    viernes, 22 de diciembre de 2017 16:48

Todas las respuestas

  • Hola Marco Fabricio Lopez

    De acuerdo a una breve investigación, si es posible hacer lo que quieres realizar, te voy a compartir el siguiente enlace en donde explica a fondo con ejemplos como pasar datos a un datagrid desde dos forms, espero que sea mucha utilidad.

    https://msdn.microsoft.com/es-es/library/fbk67b6z(v=vs.110).aspx

    Quedamos al pendiente de cualquier actualización de tu parte.

    Saludos Cordiales.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     _____

    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, 20 de diciembre de 2017 23:40
    Moderador
  • Hola. Para que se actualice el DGV hay que eliminar primero los datos viejos, así:

    dgv.DataSource = null;

    dgv.DataSource = tabla;

    Ovbiamente, al hacer esto perdés todos los renglones cargados con anterioridad. Solución: Crear todos los renglones primero en una lista y despúes los mostrás en DGV. Para ello, lo más fácil y útil es crear una clase llamada Renglon y una lista por ejemplo:

    // Crear clase Renglon public class Renglon { public int Cantidad { get; set; } public String Cargos { get; set; } public String Modelo { get; set; } public String Sistema { get; set; } public int Ancho { get; set; } public int Alto { get; set; } public int MetrosCuadrados { get; set; } public double PrecioBase { get; set; } public double Descuento { get; set; } public double Importe { get; set; } public double TotalDesc { get; set; } public double Total { get; set; } public String Descripcion { get; set; } } // Crear lista de renglones public List<Renglon> Renglones = new List<Renglon>(); //y con este medodo vas cargando los renglones public void AgregarNuevoRenglon(int cantidad, string cargos, string modelo, string sistema, int ancho, int alto, int m2, double preciobase, double descuento, double importe, double totaldesc, double total, string descripcion) { Renglon r = new Renglon(); r.Cantidad = cantidad; r.Cargos = cargos; r.Modelo = modelo; r.Sistema = sistema; r.Ancho = ancho; r.Alto = alto; r.MetrosCuadrados = m2; r.PrecioBase = preciobase; r.Descuento = descuento; r.Importe = importe; r.TotalDesc = totaldesc; r.Total = total; r.Descripcion = descripcion; Renglones.Add(r); }

    //para mostrarlos haces

    DGV.Datasource = null;

    DGV.Datasource = Renglones;

    No te doy más detalles porque no se si te interesa esta opción.

    Saludos



    jueves, 21 de diciembre de 2017 11:30
  • Hola buen dia, Agradezco muchisimo su ayuda Pablo Rubio y Juan Mondragon.

    Juan que bien la opcion de actualizacion, de echo me sirve.

    El problema lo resolvi con el mismo método que les mostré en la parte superior.

    En si el problema es que no podía pasar variables de los distintos formularios que serian insertadas en el DGV. investigado y leyendo me tope con la opción de realizar una clase estática en donde declaraba las variables que necesito de cada formulario, y en cada formulario asignaba a la variable su valor correspondiente , con esto pude llenar el DGV

    public static class variables
    {
       //Variables que su valor será asignado en el formulario1
       public static string modelo;
       public static string marca;
       public static string sistema;
      
      //Variables que su valor será asignado en el formulario 2
       public static string tipoTela;
       public static string modeloTela;
    
    }
    
    formulario 1
    //Aqui asignaremos el valor a las variables del formulario1
    //declaradas en la clase estática
    private void button1_Click(object sender, EventArgs e)
    {
       //llamamos las variables de form1 recordando que en las clases
       //estáticas no se realiza ninguna instancia por lo que se 
       //llama a los métodos o variables con el nombre de la clas
       variables.modelo = comboModelo.selectedItem.ToString();
       variables.marca = comboMarca.selectedItem.ToString();
       variables.sistema = comboSistema.selectedItem.ToString();
    }
    
    formulario 2
    /*Ya que necesitamos un evento para llamar la variable y asignarle un valor, opte por ponerlo dentro de su combobox correspondiente para que en el momento que seleccione el item este se guarde en la variable correspondiente*/
    
    private void combotipoTela_SelectedIndexChanged(object sender, EventArgs e)
    {
     variables.tipoTela = combotipoTela.selectedItem.ToString();
    
    
    }
    
    private void combomodeloTela_SelectedIndexChanged(object sender, EventArgs e)
    {
         variables.modeloTela = 
         combomodeloTela.selectedItem.ToString();
    
    }

    Y ya que tenía las variables con los datos que necesitaba, solo lo inserte en el DGV con los metodos con los que externe mi duda.

    Espero y esto pueda ayudar a alguien y que también sea correcto lo que hice, por lo menos hace lo que necesitaba.

    Saludos a todos, me despido no sin antes desearles una Feliz Navidad y un nuevo año lleno de éxitos y nuevos conocimientos. Saludos desde mi bonito México. 



    Marco Fabricio Lopez Rangel

    viernes, 22 de diciembre de 2017 16:48