Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: djnilo en 27 Agosto 2022, 16:45 pm



Título: poner en pausa datos grilla c#
Publicado por: djnilo en 27 Agosto 2022, 16:45 pm
hola buenos dias programadores tengo una aplicacion hecha en visual studio 2015 sql 2016 es una aplicacion de restaurant  tengo un formulario de mesas y formulario de comandas
en el frmmesas tengo las mesas al presionar por ejemplo la mesa 5 aparece el formulario frmconanda esta formualrio se llena con botones una grilla la informacion pero al momento de cerrar desaparece la informacion de la grilla necesito mantenerla esa informacion  del formualrio
codigo

 BindingList<Comanda_Detalle> ListadoComanda = new BindingList<Comanda_Detalle>();

si lo dejo publico queda  la embarrada  que da en memoria en todas la instancia del formulario no sirve por que al abrir otra mesa se abre la información en todas la mesas error

public static BindingList<Comanda_Detalle> ListadoComanda = new BindingList<Comanda_Detalle>();

Código:
}
                                      BtnP[k] = new Button();
                                      BtnP[k].Name = "BtnS" + j.ToString();
                                      BtnP[k].Size = new Size(150, 80);
                                      BtnP[k].Text =ListaProductos[k].NombreProducto;
                                      BtnP[k].Tag =ListaProductos[k].IdProducto;
                                      BtnP[k].Location = locP;
                                      BtnP[k].BackColor = Color.Tomato;
                                      BtnP[k].TabStop = false;
                                      locP.X += 155;
                                      BtnP[k].Click += (object p, EventArgs ak) =>
                                        {
                                            dynamic Pt = (Button)p;
                                            //Agregar a la comanda
                                            var myproducto = objProducto.GetByID(Convert.ToInt32(Pt.Tag));
                                            if (myproducto != null)
                                            {
                                                if (myproducto.NombreSubFamilia != "OPCIONALES" && myproducto.NombreSubFamilia != "Opcionales")
                                                {
                                                    if ((myproducto.Stock <= 0) && (myproducto.CalcularStock == true))
                                                    {
                                                        MessageBox.Show("No existe stock suficiente para vender", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                                        return;
                                                    }
                                                }
                                                //DgvDetalleComanda.Rows.Add(0, 0, myproducto.IdProducto, myproducto.NombreProducto, myproducto.Precio, 1, 0.19, "", 1, false);
                                                var deta = new Comanda_Detalle();
                                                deta.IdDetalle = 0;
                                                deta.IdComanda = 0;
                                                deta.IdProducto = myproducto.IdProducto;
                                                deta.NombreProducto = myproducto.NombreProducto;
                                                deta.Precio = myproducto.Precio;
                                                deta.Cantidad = 1;
                                                deta.PorcentajeIVA = eImpuesto.TasaImpuesto;
                                                if (myproducto.NombreSubFamilia == "OPCIONALES" || myproducto.NombreSubFamilia == "Opcionales")
                                                {
                                                    deta.Observaciones = myproducto.NombreSubFamilia.ToString();
                                                }
                                                else
                                                {
                                                    deta.Observaciones = "";
                                                }
                                                deta.IdSeccion =myproducto.IdSeccion;
                                                deta.Impreso = false;
                                                deta.IdPrioridad = 0;
                                                ListadoComanda.Add(deta);
                                                CalcularComanda();
                                                DgvDetalleComanda.DataSource = ListadoComanda;
                                               
                                      };
                                  }
                                  panelProductos.Controls.AddRange(BtnP);
tambien trate ocultar formulario y nada
Código:
private void button1_Click(object sender, EventArgs e)
        {
            FrmMesas form = new FrmMesas();

            this.Hide();


            form.ShowDialog();

            this.Show();
        }

se oculto pero aperecieron dos instancia del formulario Frmesas

esto es lo que tengo en el boton formulario mesas


Título: Re: poner en pausa datos grilla c#
Publicado por: **Aincrad** en 30 Agosto 2022, 21:05 pm
No entendi ni verga de tu problema.

Parece que Por lo que entendi , en el frmmesas tienes (Objetos de mesas) al presionar la mesa 5 , abres un formulario frmconanda Este formulario lo llenas de nuevo, (con botones) , y en ese formulario tienes la informacion ( BindingList<Comanda_Detalle> por lo que tengo entendido).

Si es correcto lo que entendi. Entonces hay varias cosas que arreglar. sobre todo como tienes la estructura de tu codigo.

Primero que todo si quieres guardar la Lista BindingList<Comanda_Detalle>, de la mesa 5 (frmconanda). Almacenalo en otro lugar, como por ejemplo una clase diferente. ademas puedes mejorar en vez de usar una lista, usar un Diccionario, y al KeyPairValue , le pasas a la Key la ID de la mesa, y en Value , el objeto Comanda_Detalle.

Por cierto , si cierra el (frmconanda) que carga la lista, y luego lo cierras, Posiblemente no te acceso a el. por cierto, con tal estructura, la memoria deberia ser un desastre, tantos formularios abiertos, por cada mesa, y no veo que tengas una forma de liberar el objeto de la memoria, Dispose.



Código
  1. private void button1_Click(object sender, EventArgs e)
  2.        {
  3.            FrmMesas form = new FrmMesas();
  4.  
  5.            this.Hide();
  6.  
  7.  
  8.            form.ShowDialog();
  9.  
  10.            this.Show();
  11.        }
  12.  
  13. se oculto pero aperecieron dos instancia del formulario Frmesas
  14.  
  15. esto es lo que tengo en el boton formulario mesas

No se a que te refieres, pero estas creando un nuevo  Frmesas con cada click, por lo tanto deberias tener mas de una instancia, ya que cada click , es una nueva instancia de Frmesas