none
Crear botones en tiempo de ejcucion RRS feed

  • Pregunta

  • buenas noches 

    mi pregunta es la siguiente tengo un proyecto en vb.net 2010 lo que trato de hacer es que atravez de mi base de datos se genere una cantidad de botones dependiendo los registros y contegan el nombre y ligue un label con el dato de la misma fila

    mi base de datos 

    tabla pizza contenido id nombre costo

    lo que busco 

    crear el boton, poner el campo Nombre , y el label poner el Costo

    actualmente uso variables de proyecto 

    recupero los registros de dt en un datagridview y los asigno alas variables y esas variables se las asigno al name del boton y al label(text) pero tengo que mantener el form de datagridview abierto y cuando no hay datos en la base solo me marca error pienso que la forma que escribi arriba es la mejor he encontrado poca informacion de estosoy nuevo en vb.net

    agradezco su apoyo y su tiempo

    sábado, 8 de diciembre de 2018 5:59

Respuestas

  • hola torres

    Lo que tienes que hacer es abrir una conexión a la base de datos y leer el esquema de la tabla, coloca este código en el load de un windowform y coloca el control que necesites para tu proyecto.

    private void Form1_Load(object sender, EventArgs e)
    {
    DataTable dt_tableField = new DataTable();
    using (SqlConnection connection = new SqlConnection(TuCadenaConexion))  
    {  
        connection.Open();  
        cmd.CommandText = "Select Column_Name from INFORMATION_SCHEMA.COLUMNS where Table_Name='Pizas'";
         SqlDataReader reader_Object = cmd.ExecuteReader();
         dt_tableField.Load(reader_Object);
    
         if (dt_tableField.Rows.Count > 0)
                {
                    TableLayoutPanel newtable_Obj = new TableLayoutPanel();
                    this.Controls.Add(newtable_Obj);
                    newtable_Obj.Location = new Point(0,0);
                    newtable_Obj.AutoSize = true;
                    foreach (DataRow dtrow in dt_tableField.Rows)
                    {
                        newtable_Obj.RowStyles.Add(new RowStyle(SizeType.Percent, 100));
                        Label labelObject = new Label();
                        labelObject.Name = "lbl" + dtrow[0].ToString();
                        labelObject.Text = dtrow[0].ToString();
    
                        newtable_Obj.Controls.Add(labelObject, 0,index );  // first cell
                        TextBox textboxObject = new TextBox();
                        textboxObject.Name = "txt" + dtrow[0].ToString();
                        newtable_Obj.Controls.Add(textboxObject, 1, index);
                        index++;
                        newtable_Obj.RowStyles.Clear();
                        RowStyle rs = new RowStyle();
                        rs.Height = 23F;
                        newtable_Obj.RowStyles.Add(rs);
                        newtable_Obj.RowCount = newtable_Obj.RowCount + 1;
                    }
                    newtable_Obj.Visible=true;
    
       }
    } 

    lunes, 10 de diciembre de 2018 19:49

Todas las respuestas

  • Hola torresem

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, para poder darte una mejor atención, te solicitamos de favor que nos brindes un poco más de información acerca del problema que se te presenta, así como compartirnos un fragmento del código para podernos dar una idea más clara de lo que requieres.

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    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. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    lunes, 10 de diciembre de 2018 15:48
    Moderador
  • hola torres

    Lo que tienes que hacer es abrir una conexión a la base de datos y leer el esquema de la tabla, coloca este código en el load de un windowform y coloca el control que necesites para tu proyecto.

    private void Form1_Load(object sender, EventArgs e)
    {
    DataTable dt_tableField = new DataTable();
    using (SqlConnection connection = new SqlConnection(TuCadenaConexion))  
    {  
        connection.Open();  
        cmd.CommandText = "Select Column_Name from INFORMATION_SCHEMA.COLUMNS where Table_Name='Pizas'";
         SqlDataReader reader_Object = cmd.ExecuteReader();
         dt_tableField.Load(reader_Object);
    
         if (dt_tableField.Rows.Count > 0)
                {
                    TableLayoutPanel newtable_Obj = new TableLayoutPanel();
                    this.Controls.Add(newtable_Obj);
                    newtable_Obj.Location = new Point(0,0);
                    newtable_Obj.AutoSize = true;
                    foreach (DataRow dtrow in dt_tableField.Rows)
                    {
                        newtable_Obj.RowStyles.Add(new RowStyle(SizeType.Percent, 100));
                        Label labelObject = new Label();
                        labelObject.Name = "lbl" + dtrow[0].ToString();
                        labelObject.Text = dtrow[0].ToString();
    
                        newtable_Obj.Controls.Add(labelObject, 0,index );  // first cell
                        TextBox textboxObject = new TextBox();
                        textboxObject.Name = "txt" + dtrow[0].ToString();
                        newtable_Obj.Controls.Add(textboxObject, 1, index);
                        index++;
                        newtable_Obj.RowStyles.Clear();
                        RowStyle rs = new RowStyle();
                        rs.Height = 23F;
                        newtable_Obj.RowStyles.Add(rs);
                        newtable_Obj.RowCount = newtable_Obj.RowCount + 1;
                    }
                    newtable_Obj.Visible=true;
    
       }
    } 

    lunes, 10 de diciembre de 2018 19:49