none
Datagridview - Me vuelve a traer el pedido anterior RRS feed

  • Pregunta

  • Hola

    Estoy armando un programa de ventas:

    Selecciono la comida a vender y registro la venta, por ejemplo:

    El problema es que, luego de registrar la venta, empiezo a gestionar la segunda venta. Selecciono la comida a vender (Picada p/5 por ejemplo) pero me trae la comida que pedi anteriormente y asi sucesivamente me va trayendo todas las comidas que voy vendiendo.

    Para poder solucionar esto, tengo que cerrar el proyecto y volverlo a ejecutar, pero luego de cargar la primera venta vuelve a suceder lo mismo.

    Codigo del boton agregar comida a datagridview:

                                                                                              

     private void BtnAgregar_Click(object sender, EventArgs e)
            {
                clsVenta V = new clsVenta();
                decimal total;

                if (txtCantidad.Text == "")

                {
                    MessageBox.Show("Ingrese la cantidad", "Mensaje importante", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

                    txtCantidad.Focus();
                }


                if (this.txtCantidad.Text.Trim() != "") {
                    if (txtComida1.Text.Trim() != "") {
                        //if (this.txtNombreCliente.Text.Trim() != ""){
                        //    if (txtComida1.Text.Trim() != ""){
                        //if (txtCantidad.Text.Trim() != "")
                        //      {


                        if (Convert.ToInt32(txtCantidad.Text) >= 0) {
                            if (Convert.ToInt32(txtCantidad.Text) <= Convert.ToInt32(txtStock.Text)) {
                                //    if (txtIgv.Text.Trim() != ""){

                                V.id_comida = Convert.ToInt32(txtIdComida.Text);
                                V.id_venta = Convert.ToInt32(txtIdVenta.Text);
                                V.descripcion = txtComida1.Text;
                                //V.descripcion = txtComida1.Text + " - " + txtComida1.Text;
                                V.cantidad = Convert.ToInt32(txtCantidad.Text);
                                V.precio = Convert.ToDecimal(txtPrecio.Text);

                                //Porcentaje = (Convert.ToDecimal(txtIgv.Text) / 100) + 1;
                                total = ((Convert.ToDecimal(txtPrecio.Text) * Convert.ToInt32(txtCantidad.Text)));
                                //V.Igv = Math.Round(Convert.ToDecimal(SubTotal) * (Convert.ToDecimal(txtIgv.Text) / (100)), 2);
                                V.total = Math.Round(total, 2);
                                lst.Add(V);
                                LlenarGrilla();
                                Limpiar();

                                                }

                            else {
                                MessageBox.Show("Stock Insuficiente para Realizar la Venta.", "Sistema de Ventas.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }}}}

            }

    El metodo Limpiar() solo clarea (limpia) los textbox.

    Codigo del metodo LlenarGrilla:

      private void LlenarGrilla()
            {
                //Decimal SumaSubTotal = 0; Decimal SumaIgv = 0;
                Decimal total = 0;

                dataGridView3.Rows.Clear();
                for (int i = 0; i < lst.Count; i++)
                {
                    dataGridView3.Rows.Add();
                    dataGridView3.Rows[i].Cells[0].Value = lst[i].id_venta;
                    dataGridView3.Rows[i].Cells[1].Value = lst[i].cantidad;
                    dataGridView3.Rows[i].Cells[2].Value = lst[i].descripcion;
                    dataGridView3.Rows[i].Cells[3].Value = lst[i].precio;
                    dataGridView3.Rows[i].Cells[4].Value = lst[i].total;
                    dataGridView3.Rows[i].Cells[5].Value = lst[i].id_comida;
                    //dataGridView1.Rows[i].Cells[6].Value = lst[i].Igv;
                    total += Convert.ToDecimal(dataGridView3.Rows[i].Cells[4].Value);
                    //SumaIgv += Convert.ToDecimal(dataGridView1.Rows[i].Cells[6].Value);
                }

                dataGridView3.Rows.Add();
                //dataGridView3.Rows.Add();
                //dataGridView3.Rows.Add();
                //dataGridView1.Rows[lst.Count + 1].Cells[3].Value = "SUB-TOTAL  S/.";
                //dataGridView1.Rows[lst.Count + 1].Cells[4].Value = SumaSubTotal;
                dataGridView3.Rows.Add();
                //dataGridView1.Rows[lst.Count + 2].Cells[3].Value = "      I.G.V.        %";
                //dataGridView1.Rows[lst.Count + 2].Cells[4].Value = SumaIgv;
                //dataGridView3.Rows.Add();
                dataGridView3.Rows[lst.Count + 1].Cells[3].Value = "Total: ";
                //SumaTotal += SumaTotal;
                //SumaTotal += SumaSubTotal + SumaIgv;

                dataGridView3.Rows[lst.Count + 1].Cells[4].Value = total;
                dataGridView3.ClearSelection();
            }

    Codigo del boton registrar venta:

                                                                                                                                              

      private void button3_Click_1(object sender, EventArgs e)
            {


                if (dataGridView3.Rows.Count > 0)
                {

                    if (Convert.ToString(dataGridView3.CurrentRow.Cells[2].Value) != "")
                    {
                        GuardarLaVenta();


                        try
                        {
                            for (int i = 0; i < dataGridView3.Rows.Count; i++)
                            {
                                //Decimal SumaIgv = 0; Decimal SumaSubTotal = 0;
                                Decimal total = 0;
                                if (Convert.ToString(dataGridView3.Rows[i].Cells[2].Value) != "")
                                {
                                    //SumaIgv += Convert.ToDecimal(dataGridView1.Rows[i].Cells[6].Value);
                                    //SumaSubTotal += Convert.ToDecimal(dataGridView1.Rows[i].Cells[4].Value);
                                    GuardarDetalleVenta(
                                    Convert.ToInt32(dataGridView3.Rows[i].Cells[5].Value),
                                    Convert.ToInt32(dataGridView3.Rows[i].Cells[0].Value),
                                    Convert.ToInt32(dataGridView3.Rows[i].Cells[1].Value),
                                    Convert.ToDecimal(dataGridView3.Rows[i].Cells[3].Value),
                                    //SumaIgv, SumaSubTotal
                                    total
                                    );

                                    dataGridView1.DataSource = LlenarDataGV("Venta").Tables[0];
                                    Limpiar();
                                    cboEstado.SelectedValue = -1;
                                    cboFP.SelectedValue = -1;








                                    //DevComponents.DotNetBar.MessageBoxEx.Show("Contiene Datos.");




                                }



                                else
                                {
                                    //DevComponents.DotNetBar.MessageBoxEx.Show("Fila Vacia.");
                                }
                            }
                        }

                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }


                    else
                    {
                        MessageBox.Show("No Existe Ningún Elemento en la Lista.", "Sistema de Ventas.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show("No Existe Ningún Elemento en la Lista.", "Sistema de Ventas.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }


    Codigo del metodo GuardarLaVenta():

                           

       private void GuardarLaVenta()
            {
                if (cboEstado.SelectedIndex == -1)
                {
                    MessageBox.Show("Seleccione un estado", "Mensaje importante", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                if (cboFP.SelectedIndex == -1)
                {
                    MessageBox.Show("Seleccione una forma de pago", "Mensaje importante", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                else {
                    decimal total = 0;
                    if (Convert.ToString(dataGridView3.CurrentRow.Cells[2].Value) != "")
                    {
                        for (int i = 0; i < dataGridView3.Rows.Count; i++)
                        {
                            total = Convert.ToDecimal(dataGridView3.Rows[i].Cells[4].Value);
                        }
                        //string TipoDocumento = "";
                        //TipoDocumento = rbnBoleta.Checked == true ? "Boleta" : "Factura";
                        //Ventas.IdEmpleado = Program.IdEmpleadoLogueado;
                        Ventas.id_cliente = Program.id_cliente;

                        //Ventas.NroComprobante = lblNroCorrelativo.Text;
                        //Ventas.TipoDocumento = TipoDocumento;
                        //Ventas.FechaVenta = Convert.ToDateTime(dtpFecha.Value);
                        Ventas.FechaVenta = dtpFecha.Value;

                        Ventas.total = total;
                        Ventas.id_estado_venta = cboEstado.SelectedIndex + 1;
                        Ventas.id_formaDePago = cboFP.SelectedIndex + 1;
                        Ventas.RegistrarVenta();
                       // dataGridView3.Rows.Clear();



                        //     MessageBox.Show(Ventas.RegistrarVenta(), "Sistema de Ventas.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                }

            }

    Codigo del metodo RegistrarVenta():

    public String RegistrarVenta()
            {
                String Mensaje = "";
                List<clsParametro> lst = new List<clsParametro>();
                try
                {
                    //lst.Add(new clsParametro("@id_usuario", id_usuario));
                    lst.Add(new clsParametro("@id_cliente", id_cliente));
                    //lst.Add(new clsParametro("@NroDocumento", NroComprobante));
                    //lst.Add(new clsParametro("@TipoDocumento", TipoDocumento));
                    lst.Add(new clsParametro("@FechaVenta", FechaVenta));
                    lst.Add(new clsParametro("@total", total));
                    lst.Add(new clsParametro("@id_estado_venta", id_estado_venta));
                    lst.Add(new clsParametro("@id_formaDePago", id_formaDePago));

                    lst.Add(new clsParametro("@Mensaje", "Pedido cargado", SqlDbType.VarChar, ParameterDirection.Output, 100));
                    M.EjecutarSP("AgregarVenta", ref lst);
                    return Mensaje = lst[5].Valor.ToString();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

    como lo puedo solucionar? porque me trae las comidas que vendi anteriormente??


    A

    lunes, 12 de octubre de 2020 23:36

Respuestas

  • Hola Yan Eric

    En el método del botón que agrega comida, hay un objeto que debe ser un List<clsVenta> que parece que es la lista de comidas, como nunca lo vacias, va acumulando. Tendrías que vaciarlo al momento de terminar cada venta:

    lst.Clear();

    Otras cosas que te recomiendo para mejorar la legibilidad y eficiencia de tu programa:

    1) Borra las lineas comentadas, porque dificultan la visibilidad

    2) Conviene tener el código alineado y con el sangrado correcto

    3) En esta parte:

     if (txtCantidad.Text == "")
    
                {
                    MessageBox.Show("Ingrese la cantidad", "Mensaje importante", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
    
                    txtCantidad.Focus();
                }
    
    
                if (this.txtCantidad.Text.Trim() != "") {
                    if (txtComida1.Text.Trim() != "") {

    Yo lo que haría es evaluar en el if de arriba que ambos txtCantidad y txtComida con el Trim() no valgan "" y advertir en el mensaje que ninguno de ambos puede ser vacío con o sin espacios adelante o atrás. Y eliminaría los 2 if que siguen en donde prevenis lo mismo pero sin mensaje, lo cual si fuera true creo que no haría nada la venta y no te avisa. 

    Una cosa que me llama la atención es, ¿la comida la escribis manualmente? ¿No se supone que debería haber un ComboBox con todas las comidas disponibles y vos elegis una?

    Saludos

    Pablo


    • Editado Tigre Pablito martes, 13 de octubre de 2020 0:23
    • Marcado como respuesta Eric_96 martes, 13 de octubre de 2020 23:32
    martes, 13 de octubre de 2020 0:22

Todas las respuestas

  • Hola Yan Eric

    En el método del botón que agrega comida, hay un objeto que debe ser un List<clsVenta> que parece que es la lista de comidas, como nunca lo vacias, va acumulando. Tendrías que vaciarlo al momento de terminar cada venta:

    lst.Clear();

    Otras cosas que te recomiendo para mejorar la legibilidad y eficiencia de tu programa:

    1) Borra las lineas comentadas, porque dificultan la visibilidad

    2) Conviene tener el código alineado y con el sangrado correcto

    3) En esta parte:

     if (txtCantidad.Text == "")
    
                {
                    MessageBox.Show("Ingrese la cantidad", "Mensaje importante", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
    
                    txtCantidad.Focus();
                }
    
    
                if (this.txtCantidad.Text.Trim() != "") {
                    if (txtComida1.Text.Trim() != "") {

    Yo lo que haría es evaluar en el if de arriba que ambos txtCantidad y txtComida con el Trim() no valgan "" y advertir en el mensaje que ninguno de ambos puede ser vacío con o sin espacios adelante o atrás. Y eliminaría los 2 if que siguen en donde prevenis lo mismo pero sin mensaje, lo cual si fuera true creo que no haría nada la venta y no te avisa. 

    Una cosa que me llama la atención es, ¿la comida la escribis manualmente? ¿No se supone que debería haber un ComboBox con todas las comidas disponibles y vos elegis una?

    Saludos

    Pablo


    • Editado Tigre Pablito martes, 13 de octubre de 2020 0:23
    • Marcado como respuesta Eric_96 martes, 13 de octubre de 2020 23:32
    martes, 13 de octubre de 2020 0:22
  • Hola Yan Eric Abramian, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    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.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    martes, 13 de octubre de 2020 15:08
    Moderador
  • Muchas gracias Pablo. Funciono limpiando la lista y poniendolo en el boton registrar venta.

    La comida la eligo haciendo doble clic en una fila de un datagridview, y automaticamente me completa los textbox nombre comida, precio, stock, cantidad


    A

    martes, 13 de octubre de 2020 23:32
  • Hola 

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Gracias por usar los foros de MSDN. 

     

     Andres Aguilar

    ____________________________ 

    miércoles, 14 de octubre de 2020 14:59
    Moderador