none
Agregar Valores a un DataGridView RRS feed

  • Pregunta

  • Buen dia, este tema creo que esta demasiado mencionado, y eh buscado en internet, y he intentado, pero no resulta, la cuestion es la siguiente:

    **Tengo un Form (frm1), donde esta un DataGridView, y otro Form (frm2) con varios Textbox, DateTimePicker, NumericUpDown, etc... los cuales, al momento de dar clic en aceptar en frm2, me guarde esos valores en un nuevo renglon en el dgv del frm1...

    ***Lo eh intentado, pero como que nop, no funciona, probe y probe, y pues no marca error ni nada, pero simplemente no lo hace :s espero puedan identificar mi error y resolver mi duda, Anexo mi codigo:

    ///Boton Agregar en Form2
    
    private void btnAgregarProd_Click(object sender, EventArgs e){
                frmNomina objNomina = new frmNomina();
                object[] datos = new object[7];
                datos[0] = txtNombreProd.Text;
                datos[1] = dtpFecha.Text;
                datos[2] = nudCantidad.Value.ToString();
                datos[3] = nudPesoUnit.Value.ToString();
                datos[4] = txtPesoTot.Text;
                datos[5] = nudCostoUnit.Value.ToString();
                datos[6] = txtMontPagar.Text;
                objNomina.agregar_dgvCargas(datos);
                this.Close();
            }
    /// Codigo en Form1
    public void agregar_dgvCargas(object[] renglon) {
                dgvCargaProductos.Rows.Add(renglon);
            }

    Espero puedan resolver mi duda.

    PD.(Amm tengo la impresion de que probablemente tenga que ver con una de las propiedades del DataGridView).

    Saludos

    jueves, 30 de agosto de 2012 15:56

Respuestas

  • hola esta es la solucion que vi segun tu caso obviamente se puede mejorar pero la que te presento aqui funciona:

    primero en tu form creas tu arreglo statico de esta forma: public static object[] datos = new object[7];

    luego en tu boton agregar del form2 lo dejarias asi

    private void btnAgregarProd_Click(object sender, EventArgs e){
             
              
                datos[0] = txtNombreProd.Text;
                datos[1] = dtpFecha.Text;
                datos[2] = nudCantidad.Value.ToString();
                datos[3] = nudPesoUnit.Value.ToString();
                datos[4] = txtPesoTot.Text;
                datos[5] = nudCostoUnit.Value.ToString();
                datos[6] = txtMontPagar.Text;
                this.Close();
            }

    y en tu form1 (al momento de cerrarse tu form2)  mandas a llamar a tu areglo del form2 asi

    private void abreform2_Click(object sender, EventArgs e)
            {
    /* me imagino que asi lo hiciste, das clic a un el boton (abreform2) del  form1  y aparece el form2..*/
                Form2 fo = new Form2();
                fo.ShowDialog();
    // declaras tu nuevo arreglo llamado renglon
                string[] renglon = new string[2];
    // le asignas los valores de tu arreglo del form2
                renglon = Form2.datos;
    // mandas a llamar a tu metodo
                agregar_dgvCargas(renglon);
            }

    hice una modificacion a tu metodo agregar_dgvCargas ahora quedaria asi:

            public void agregar_dgvCargas(string[] renglon)
            {
                dataGridView1.Columns.Add("nombre-de-columna", "header");
                dataGridView1.Columns.Add("nombre-de-columna2", "header2");
                dataGridView1.Rows.Add(renglon);
            }

    y ya con esto funciona para todos los que quieras agregar, muy importante como te comente debes de tener habilitado la opcion agregar de el grid

    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, saludos

    • Marcado como respuesta TUROEL jueves, 30 de agosto de 2012 18:51
    jueves, 30 de agosto de 2012 17:03

Todas las respuestas

  • hola esta es la solucion que vi segun tu caso obviamente se puede mejorar pero la que te presento aqui funciona:

    primero en tu form creas tu arreglo statico de esta forma: public static object[] datos = new object[7];

    luego en tu boton agregar del form2 lo dejarias asi

    private void btnAgregarProd_Click(object sender, EventArgs e){
             
              
                datos[0] = txtNombreProd.Text;
                datos[1] = dtpFecha.Text;
                datos[2] = nudCantidad.Value.ToString();
                datos[3] = nudPesoUnit.Value.ToString();
                datos[4] = txtPesoTot.Text;
                datos[5] = nudCostoUnit.Value.ToString();
                datos[6] = txtMontPagar.Text;
                this.Close();
            }

    y en tu form1 (al momento de cerrarse tu form2)  mandas a llamar a tu areglo del form2 asi

    private void abreform2_Click(object sender, EventArgs e)
            {
    /* me imagino que asi lo hiciste, das clic a un el boton (abreform2) del  form1  y aparece el form2..*/
                Form2 fo = new Form2();
                fo.ShowDialog();
    // declaras tu nuevo arreglo llamado renglon
                string[] renglon = new string[2];
    // le asignas los valores de tu arreglo del form2
                renglon = Form2.datos;
    // mandas a llamar a tu metodo
                agregar_dgvCargas(renglon);
            }

    hice una modificacion a tu metodo agregar_dgvCargas ahora quedaria asi:

            public void agregar_dgvCargas(string[] renglon)
            {
                dataGridView1.Columns.Add("nombre-de-columna", "header");
                dataGridView1.Columns.Add("nombre-de-columna2", "header2");
                dataGridView1.Rows.Add(renglon);
            }

    y ya con esto funciona para todos los que quieras agregar, muy importante como te comente debes de tener habilitado la opcion agregar de el grid

    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, saludos

    • Marcado como respuesta TUROEL jueves, 30 de agosto de 2012 18:51
    jueves, 30 de agosto de 2012 17:03
  • Buena dia Turin.

    primero antes que nada debes pensar en que es lo mas sencillo para resolver un problema, ya que el modo en el que ves el problema te puede ayudar o limitar para resolverlo.

    te dejo un codigo con el cual podrias realizarlo, como comentas, es a manita, te lo dejo en VB.NET por la premura, tu lo conviertes.

    debes invocar primero el formulario que contiene el DataGridView

    Dim oFrmGridView1 As New frmNomina

    oFrmGridView1.Show()

    ahi coloca un botón que diga Nuevo, lo puedes poner en un ToolStrip o en la forma ahi a la brava.

    dentro del botón invocas el formulario de registro.

      Dim WithEvents oFrmNuevoProducto As New frmRegistrarProducto 'En C# no es necesario colocar WithEvents, por que esto sirve para manejar eventos entre formas
        Private Sub btnNuevoProducto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevoProducto.Click
            Try
                oFrmNuevoProducto.Show()
            Catch ex As Exception
                MsgBox("Error: " & ex.Message)
            End Try
        End Sub

    ahora viene lo bueno, te recomiendo no manejar arreglos ni eso, puesto con ellos no controlas el tipo de dato que recibes 

    de los controles, a menos que uses un tipado como dice mayo.

    Así pues te recomiendo que te crees una clase sencilla aunque sea. yo le llamo clase individual. la cual contendria la definicion de tus propiedades ( campos), y si la complementas un poco más contendría la definicion de tus metodos de registrar y/o actualizar, eliminar logicó o fisico, etc..

    ejemplo:

    Public Class producto
        Private _prodNom As String
        Private _prodcnt As Integer
        Private _prodpeso As Decimal
        Public Property prodNom() As String
            Get
                Return _prodNom
            End Get
            Set(ByVal value As String)
                _prodNom = value
            End Set
        End Property
        Public Property prodcnt() As Integer
            Get
                Return _prodcnt
            End Get
            Set(ByVal value As Integer)
                _prodcnt = value
            End Set
        End Property
        Public Property prodpeso() As Decimal
            Get
                Return _prodpeso
            End Get
            Set(ByVal value As Decimal)
                _prodpeso = value
            End Set
        End Property
        Public Sub registrar()
            'proceso de registrar productos
        End Sub
    End Class

    entonces esta clase te serviría para crear una instancia de ella y con esta controlar tus datos que obtienes de tus controles

    dentro del formulario de registrar realizas lo siguiente en el botón AgregarProd

    Public oProducto As New producto
        Public Event Agregar()
        Private Sub btnAgregarProd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregarProd.Click
            oProducto.prodNom = txtNombreProd.Text
            oProducto.prodcnt = nudCantidad.Value
            oProducto.prodpeso = txtPesoTot.Text
            RaiseEvent Agregar() 'Cuando llega a este evento ejecuta el metodo del formulario del grid, ponle un breakPoint en el metodo AgregarAGrid
            Me.Close()
        End Sub

    luego en el formulario que tiene el grid coloca el metodo que realiza el RaiseEvent del formulario de registro.

        Dim oListaProductos As New List(Of producto)
        Private Sub AgregarAGrid() Handles oFrmNuevoProducto.Agregar
            Try 'Coloca el break point aqui para que veas que se detiene cuando ejecutas raiseEvent Agregar del formulario de registro que contiene tus controles.
                oListaProductos.Add(ofrmNuevoProducto.oProducto) 'aqui solo agregar el elemento a la lista, debes controlar la logica de agregar productos, si ya existe no agregar, etc.. puedes usar predicados para ello
                dgvCargaProductos.DataSource = oListaProductos ' se coloca como origen de datos la lista de productos para que te lo pinte.
                dgvCargaProductos.Refresh() 'usa refresh o algo así sino te actualiza.
            Catch ex As Exception
                msgbox("Error" & ex.Message)
            End Try
        End Sub

    Esto es un poco más completo, espero y te ayude, cualquier cosa, comentalo.

    Saludos.


    • Editado Victor Ram jueves, 30 de agosto de 2012 18:12
    jueves, 30 de agosto de 2012 18:10