none
crear un fucncion que llene diferentes paneles con botones RRS feed

  • Pregunta

  • buenas tardes programadores 

    tengo una aplicacion hecha en visual studio 2015 sql 2014 tengo un formulario que contien un tabcontrol con  3 pestañas

    tabapage1, tabpage2 ,tabpage3 etc

    cada pestaña contiene un panelcontrol ( panelverduras, panelpanaderia, panelfrutas)

    tengo este codigo que me crea botones dinamicos todo bien hasta hay ¿ como puedo crear una funcion que me cargue en las otros paneles? para no repetir el codigo

             SELECT * FROM SubFamiliaProductos where NombreSubFamilia = 'Panaderia'

      ListaProductos = objProducto.GetAllActivosPanaderia(406); esta linea me trae todos los productos de panaderia


                ListaProductos = objProducto.GetAllActivosVerduras(500);
                ListaProductos = objProducto.GetAllActivosfrutas(200);

    codigo que tengo hasta el momento

    private void FrmVentaTouch_Load(object sender, EventArgs e)
            {
             
                panelPanaderia.Controls.Clear();
                
                locP.Y = 10;
                locP.X = 10;
                ListaProductos = objProducto.GetAllActivosPanaderia(406);
                TotP = ListaProductos.Count;
                BtnP = new Button[TotP];
                for (int k = 0; k < TotP; k++)
                {
                    if (k == 5 || k == 10 || k == 15 || k == 20 || k == 25 || k == 30 || k == 35 || k == 40 || k == 45 || k == 50)
                    {
                        locP.Y += 90;
                        locP.X = 10;
                    }
                    BtnP[k] = new Button();
                    BtnP[k].Size = new Size(100, 60);
                    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;
    
                        DetalleVentaDTO eDeta = new DetalleVentaDTO();
                        PRODUCTO eProd = new PRODUCTO();
    
                        eProd = objProducto.GetByID(Convert.ToInt32(Pt.Tag));
                        if (eProd != null)
                        {
                          //resto codigo
    
                    };
                }
                panelPanaderia.Controls.AddRange(BtnP);
             
    
            }

    sábado, 11 de mayo de 2019 16:50

Respuestas

  • Hola

    para eso deves definir cual quieres llenar, se me facilita usar Enum

    public enum Tipo
    {
        verduras, panaderia, frutas
    }

    Luego mando como parametro el tipo

     private void LlenaPanel( Tipo tipo)
     {
         switch (tipo)
         {
             case Tipo.verduras:
                 ListaProductos = objVerduras.GetAllActivosVerduras(406);
                 panelVerduras.Controls.Clear();
                 break;
             case Tipo.panaderia:
                 ListaProductos = objProducto.GetAllActivosPanaderia(406);
                 panelPanaderia.Controls.Clear();
                 break;
             case Tipo.frutas:
                 ListaProductos = objFrutas.GetAllActivosFrutas(406);
                 panelFrutas.Controls.Clear();
                 break;
             default:
                 break;
         }
         
    
         locP.Y = 10;
         locP.X = 10;
         
         TotP = ListaProductos.Count;
         BtnP = new Button[TotP];
         for (int k = 0; k < TotP; k++)
         {
             if (k == 5 || k == 10 || k == 15 || k == 20 || k == 25 || k == 30 || k == 35 || k == 40 || k == 45 || k == 50)
             {
                 locP.Y += 90;
                 locP.X = 10;
             }
             BtnP[k] = new Button();
             BtnP[k].Size = new Size(100, 60);
             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;
    
                 DetalleVentaDTO eDeta = new DetalleVentaDTO();
                 PRODUCTO eProd = new PRODUCTO();
    
                 eProd = objProducto.GetByID(Convert.ToInt32(Pt.Tag));
                 if (eProd != null)
                 {
                     //resto codigo
    
                 };
             }
             switch (tipo)
             {
                 case Tipo.verduras:
                     panelVerduras.Controls.AddRange(BtnP);
                     break;
                 case Tipo.panaderia:
                     panelPanaderia.Controls.AddRange(BtnP);
                     break;
                 case Tipo.frutas:
                     panelFrutas.Controls.AddRange(BtnP);
                     break;
                 default:
                     break;
             }
            
    
    
         }
    
    
    

    Y en el formload mando lamar

    private void FrmVentaTouch_Load(object sender, EventArgs e)
    {
    
        LlenaPanel(Tipo.frutas);
        LlenaPanel(Tipo.panaderia)
        LlenaPanel(Tipo.verduras);
    
    
    }

    Espero te sirva

    • Marcado como respuesta djnilo lunes, 13 de mayo de 2019 13:35
    domingo, 12 de mayo de 2019 2:04

Todas las respuestas

  • hola

    >>¿ como puedo crear una funcion que me cargue en las otros paneles? para no repetir el codigo

    podrias pasar el nombre de la subfamilia por parametros

    public DataTable ObtenerPorSubfamilia(string subfamilia)
    {
    	DataTable dt = new DataTable();  
    	
    	using (SqlConnection conn = new SqlConnection("connection string"))  
    	{  
    
    		string query = @"SELECT * 
    						FROM SubFamiliaProductos 
    						WHERE NombreSubFamilia = @subfamilia";  
    
    		SqlCommand cmd = new SqlCommand(query, conn);  
    		cmd.Parameters.AddWithValue("@subfamilia", subfamilia);  
    		
    		SqlDataAdapter da = new SqlDataAdapter(cmd);    
    		da.Fill(dt);  
    	} 
    	
    	return dt;
    }

    asi pasas por parametro la subfamlia que quieres filtrar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 11 de mayo de 2019 17:15
  • gracias por tiempo disponibilidad lendro tuttini

    pero como paso los tres parametros que necesito para que me pinte los los tres paneles panelpanaderia(406),

    panelverduras(200), panelfrutas(500)

    los parametros serian  406,200, 500 consulta como hacer un for no se para me que carge los paneles segun esto parametros fijos

    private void FrmVentaTouch_Load(object sender, EventArgs e)
            {
             
                panelPanaderia.Controls.Clear();
                
                locP.Y = 10;
                locP.X = 10;
                ListaProductos = objProducto.GetAllActivos(406);
                TotP = ListaProductos.Count;
                BtnP = new Button[TotP];
                for (int k = 0; k < TotP; k++)
                {
                    if (k == 5 || k == 10 || k == 15 || k == 20 || k == 25 || k == 30 || k == 35 || k == 40 || k == 45 || k == 50)
                    {
                        locP.Y += 90;
                        locP.X = 10;
                    }
                    BtnP[k] = new Button();
                    BtnP[k].Size = new Size(100, 60);
                    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;
    
                        DetalleVentaDTO eDeta = new DetalleVentaDTO();
                        PRODUCTO eProd = new PRODUCTO();
    
                        eProd = objProducto.GetByID(Convert.ToInt32(Pt.Tag));
                        if (eProd != null)
                        {
                          //resto codigo
    
                    };
                }
                panelPanaderia.Controls.AddRange(BtnP);
             
    
            }

    sábado, 11 de mayo de 2019 19:07
  • Hola

    para eso deves definir cual quieres llenar, se me facilita usar Enum

    public enum Tipo
    {
        verduras, panaderia, frutas
    }

    Luego mando como parametro el tipo

     private void LlenaPanel( Tipo tipo)
     {
         switch (tipo)
         {
             case Tipo.verduras:
                 ListaProductos = objVerduras.GetAllActivosVerduras(406);
                 panelVerduras.Controls.Clear();
                 break;
             case Tipo.panaderia:
                 ListaProductos = objProducto.GetAllActivosPanaderia(406);
                 panelPanaderia.Controls.Clear();
                 break;
             case Tipo.frutas:
                 ListaProductos = objFrutas.GetAllActivosFrutas(406);
                 panelFrutas.Controls.Clear();
                 break;
             default:
                 break;
         }
         
    
         locP.Y = 10;
         locP.X = 10;
         
         TotP = ListaProductos.Count;
         BtnP = new Button[TotP];
         for (int k = 0; k < TotP; k++)
         {
             if (k == 5 || k == 10 || k == 15 || k == 20 || k == 25 || k == 30 || k == 35 || k == 40 || k == 45 || k == 50)
             {
                 locP.Y += 90;
                 locP.X = 10;
             }
             BtnP[k] = new Button();
             BtnP[k].Size = new Size(100, 60);
             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;
    
                 DetalleVentaDTO eDeta = new DetalleVentaDTO();
                 PRODUCTO eProd = new PRODUCTO();
    
                 eProd = objProducto.GetByID(Convert.ToInt32(Pt.Tag));
                 if (eProd != null)
                 {
                     //resto codigo
    
                 };
             }
             switch (tipo)
             {
                 case Tipo.verduras:
                     panelVerduras.Controls.AddRange(BtnP);
                     break;
                 case Tipo.panaderia:
                     panelPanaderia.Controls.AddRange(BtnP);
                     break;
                 case Tipo.frutas:
                     panelFrutas.Controls.AddRange(BtnP);
                     break;
                 default:
                     break;
             }
            
    
    
         }
    
    
    

    Y en el formload mando lamar

    private void FrmVentaTouch_Load(object sender, EventArgs e)
    {
    
        LlenaPanel(Tipo.frutas);
        LlenaPanel(Tipo.panaderia)
        LlenaPanel(Tipo.verduras);
    
    
    }

    Espero te sirva

    • Marcado como respuesta djnilo lunes, 13 de mayo de 2019 13:35
    domingo, 12 de mayo de 2019 2:04
  • muchas gracias Martin llam perfecto esto lo que necesitaba me entendiste al tiro
    lunes, 13 de mayo de 2019 13:36