none
consulta hacer Botones dinamicos(segun consulta sql) RRS feed

  • Pregunta

  • buenas tardes 

    amigos programadores

    trabajo en vb.net 2015 sql 2014

    Si alguien me orienta por favor  como podria hacer botones dinámicos segun la consulta que elija el usuarios estoy haciendo una aplicacion de restorant hago las consultas en grilla en esta grilla me muestra la informacion filtrada eso esta bien pero quiero en vez de una grilla lo necesito en botones ejemplo si piden empanadas que me aparescan todas las empanadas en botones (papas grande , papas con queso , papas con pollo etc,

     Public Function BUSCAR_PRODUCTO(ByVal obj As CAPA_ENTIDAD.CpE_Cls_PRODUCTO)
            Dim cn As New SqlConnection(Conexion.Connectionstring)
            Dim dtprov As New Data.DataTable
            Try
                cn.Open()
                dapprov.SelectCommand = cn.CreateCommand
                dapprov.SelectCommand.CommandText = "PA_BuscarProducto"
                dapprov.SelectCommand.CommandType = CommandType.StoredProcedure
                dapprov.SelectCommand.Parameters.AddWithValue("@nom", obj.Nombre)
                dapprov.SelectCommand.Parameters.AddWithValue("@tipo", obj.Nombre)
                dapprov.SelectCommand.Parameters.AddWithValue("@opcion", obj.opcion)
                dapprov.SelectCommand.ExecuteNonQuery()
                dapprov.Fill(dtprov)
                Return dtprov
            Catch ex As Exception
                MsgBox(ex.Message)
                Throw New Exception(ex.Message)
            Finally
                If cn.State = ConnectionState.Open Then
                    cn.Dispose()
                    cn.Close()
                End If
            End Try
        End Function
    USE [RESTAURANTE]
    GO
    /****** Object:  StoredProcedure [dbo].[PA_BuscarProducto]    Script Date: 08/10/2016 16:22:56 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[PA_BuscarProducto]
    @nom varchar(40),
    @tipo varchar(40),
    @opcion int
    as
    begin
    if @opcion  = 1
    SELECT IdProducto ,Nombre ,IdTipoProducto ,Precio ,Medida ,CantidadUnidadMedida ,Stock ,Estado,Descripcion
    FROM PRODUCTO   where replace(replace(replace(replace(replace(
    ltrim (Nombre),'Á','A'),'É','E'),'Í','I'),'Ó','O'),'Ú','U') like  '%' + @nom + '%'
    else
    SELECT p.IdProducto ,p.Nombre ,p.IdTipoProducto ,p.Precio ,p.Medida ,p.CantidadUnidadMedida ,p.Stock ,p.Estado,p.Descripcion
    FROM PRODUCTO as p,TIPO_PRODUCTO as t  where p.IdTipoProducto  = t.IdTipoProducto and 
    ltrim(t.Nombre ) LIKE @tipo  + '%'
    end


    sábado, 8 de octubre de 2016 19:22

Respuestas

  • muchas gracias por respondeer JC NaupaCrispìn

    Imports System
    Imports System.Drawing
    Imports System.Windows.Forms
    Public Class FrmGenerado
        Inherits System.Windows.Forms.Form
    
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Windows Form Designer.
            InitializeComponent()
    
            'Add any initialization after the InitializeComponent() call
    
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnGenerar.Click
            'Listado de productos
            Dim papas As New List(Of String)
            papas.AddRange(New String() {"Papas Grande", "Papas Mediana",
                "Papas Chica", "Papas con queso", "Papas con pollo", "Papas solas"})
    
            'Crear una instancia del form visualizador
            Using frm As New FrmGenerado
    
                Dim alto As Integer = 12
    
                'Recorro los valores
                For Each p In papas
    
                    'Creo un botón por cada iteración
                    'Agrego algunas propiedades
                    Dim btn As New Button _
                    With {
                       .Text = p, 'Toma el nombre
                       .Width = 216,
                       .Height = 36,
                       .Location = New Point(12, alto)
                       }
    
                    'Crea un Handler para detecta que botón hizo click
                    AddHandler btn.Click, AddressOf clickBoton
    
                    'Agrego el control al FORM
                    frm.Controls.Add(btn)
    
                    'espacio entre botones +27
                    alto += (12 + 27)
                Next
    
                frm.Text = "Escoja su pedido..."
    
                'Visualizo
                frm.ShowDialog()
    
            End Using
        End Sub
    
        Private Sub clickBoton_Click(sender As Object, e As EventArgs)
          
     ' Obtienes el botón generado que hizo click
            Dim btn As Button = TryCast(sender, Button)
            MessageBox.Show(String.Format("El botón [ {0} ] fue clickeado.", btn.Text))
        End Sub
    como agrego el  error 
    'Crea un Handler para detecta que botón hizo click
                    AddHandler btn.Click, AddressOf clickBoton
    otra consulta debo de tener dos formulario primer formulario FrmGenerado del  con un boton btnGenerar

    • Marcado como respuesta djnilo sábado, 8 de octubre de 2016 23:30
    sábado, 8 de octubre de 2016 22:46

Todas las respuestas

  • Hola djnilo,

    [-] ....  como podría hacer botones dinámicos según la consulta que elija el usuarios ...

    Es necesario crear un botón por cada "registro" ? No sería mejor cargar el resultado en un ComboBox y dejar al usuario escoger un producto "X" y mediante un botón procesar ejecutas alguna acción ?

    Si insistes en usar botones, cn realidad no es tan difícil, lo "complicado" es posicionar los botones dentro del contenedor.

    Te explico un poco la lógica : (Creo los botones en un form, pero es prácticamente lo mismo)

    Private Sub btnGenerar_Click(sender As Object, e As EventArgs) Handles btnGenerar.Click
    
            'Listado de productos
            Dim papas As New List(Of String)
            papas.AddRange(New String() {"Papas Grande", "Papas Mediana",
                "Papas Chica", "Papas con queso", "Papas con pollo", "Papas solas"})
    
            'Crear una instancia del form visualizador
            Using frm As New FrmGenerado
    
                Dim alto As Integer = 12
    
                'Recorro los valores
                For Each p In papas
    
                    'Creo un botón por cada iteración
                    'Agrego algunas propiedades
                    Dim btn As New Button _
                    With {
                       .Text = p, 'Toma el nombre
                       .Width = 216,
                       .Height = 36,
                       .Location = New Point(12, alto)
                       }
    
                    'Crea un Handler para detecta que botón hizo click
                    AddHandler btn.Click, AddressOf clickBoton
    
                    'Agrego el control al FORM
                    frm.Controls.Add(btn)
    
                    'espacio entre botones +27
                    alto += (12 + 27)
                Next
    
                frm.Text = "Escoja su pedido..."
    
                'Visualizo
                frm.ShowDialog()
    
            End Using
    
        End Sub

    Y el Handler del evento Click : Puedes agregar la propiedad .Name al crear el botón.

      Private Sub clickBoton(sender As Object, e As EventArgs)
            'Obtienes el botón generado que hizo click
            Dim btn As Button = TryCast(sender, Button)
            MessageBox.Show(String.Format("El botón [ {0} ] fue clickeado.", btn.Text))
        End Sub

    Dónde de la lista, con los valores :

    "Papas Grande", "Papas Mediana","Papas Chica", "Papas con queso", "Papas con pollo", "Papas solas"

    Muestra el siguiente resultado :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    sábado, 8 de octubre de 2016 20:57
  • muchas gracias por respondeer JC NaupaCrispìn

    Imports System
    Imports System.Drawing
    Imports System.Windows.Forms
    Public Class FrmGenerado
        Inherits System.Windows.Forms.Form
    
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Windows Form Designer.
            InitializeComponent()
    
            'Add any initialization after the InitializeComponent() call
    
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnGenerar.Click
            'Listado de productos
            Dim papas As New List(Of String)
            papas.AddRange(New String() {"Papas Grande", "Papas Mediana",
                "Papas Chica", "Papas con queso", "Papas con pollo", "Papas solas"})
    
            'Crear una instancia del form visualizador
            Using frm As New FrmGenerado
    
                Dim alto As Integer = 12
    
                'Recorro los valores
                For Each p In papas
    
                    'Creo un botón por cada iteración
                    'Agrego algunas propiedades
                    Dim btn As New Button _
                    With {
                       .Text = p, 'Toma el nombre
                       .Width = 216,
                       .Height = 36,
                       .Location = New Point(12, alto)
                       }
    
                    'Crea un Handler para detecta que botón hizo click
                    AddHandler btn.Click, AddressOf clickBoton
    
                    'Agrego el control al FORM
                    frm.Controls.Add(btn)
    
                    'espacio entre botones +27
                    alto += (12 + 27)
                Next
    
                frm.Text = "Escoja su pedido..."
    
                'Visualizo
                frm.ShowDialog()
    
            End Using
        End Sub
    
        Private Sub clickBoton_Click(sender As Object, e As EventArgs)
          
     ' Obtienes el botón generado que hizo click
            Dim btn As Button = TryCast(sender, Button)
            MessageBox.Show(String.Format("El botón [ {0} ] fue clickeado.", btn.Text))
        End Sub
    como agrego el  error 
    'Crea un Handler para detecta que botón hizo click
                    AddHandler btn.Click, AddressOf clickBoton
    otra consulta debo de tener dos formulario primer formulario FrmGenerado del  con un boton btnGenerar

    • Marcado como respuesta djnilo sábado, 8 de octubre de 2016 23:30
    sábado, 8 de octubre de 2016 22:46
  • muchas gracias por respondeer JC NaupaCrispìn

    Imports System
    Imports System.Drawing
    Imports System.Windows.Forms
    Public Class FrmGenerado
        Inherits System.Windows.Forms.Form
    
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Windows Form Designer.
            InitializeComponent()
    
            'Add any initialization after the InitializeComponent() call
    
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnGenerar.Click
            'Listado de productos
            Dim papas As New List(Of String)
            papas.AddRange(New String() {"Papas Grande", "Papas Mediana",
                "Papas Chica", "Papas con queso", "Papas con pollo", "Papas solas"})
    
            'Crear una instancia del form visualizador
            Using frm As New FrmGenerado
    
                Dim alto As Integer = 12
    
                'Recorro los valores
                For Each p In papas
    
                    'Creo un botón por cada iteración
                    'Agrego algunas propiedades
                    Dim btn As New Button _
                    With {
                       .Text = p, 'Toma el nombre
                       .Width = 216,
                       .Height = 36,
                       .Location = New Point(12, alto)
                       }
    
                    'Crea un Handler para detecta que botón hizo click
                    AddHandler btn.Click, AddressOf clickBoton
    
                    'Agrego el control al FORM
                    frm.Controls.Add(btn)
    
                    'espacio entre botones +27
                    alto += (12 + 27)
                Next
    
                frm.Text = "Escoja su pedido..."
    
                'Visualizo
                frm.ShowDialog()
    
            End Using
        End Sub
    
        Private Sub clickBoton_Click(sender As Object, e As EventArgs)
          
     ' Obtienes el botón generado que hizo click
            Dim btn As Button = TryCast(sender, Button)
            MessageBox.Show(String.Format("El botón [ {0} ] fue clickeado.", btn.Text))
        End Sub
    como agrego el  error 
    'Crea un Handler para detecta que botón hizo click
                    AddHandler btn.Click, AddressOf clickBoton
    otra consulta debo de tener dos formulario primer formulario FrmGenerado del  con un boton btnGenerar

    soy novato 
    sábado, 8 de octubre de 2016 22:46
  • Hola djnilo,

    [-] ... como agrego el error 

    Cuál error y en dónde ? Explícate con más detalle.

    [-] ... debo de tener dos formulario primer formulario FrmGenerado del con un boton btnGenerar ..

    No es necesario, solo lo hice por cuestiones de ejemplo lo importante es que entiendas la lógica. Mi formulario FrmGenerado lo uso solo para visualizar los botones, en tu caso usarías el TabPanel para agregar las opciones.

    [-] ... soy novato 

    Eso no tiene nada que ver, mejor aún si no tienes conocimientos puedes intentar hacerlo siguiendo el ejemplo, así aprenderás más, evita el copiar y pegar.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    sábado, 8 de octubre de 2016 23:11
  • gracias por responder el error era que faltaba 

    'Crea un Handler para detecta que botón hizo click
                    AddHandler btn.Click, AddressOf clickBoton_Click

    clickBoton_Clic
    sábado, 8 de octubre de 2016 23:30