martes, 16 de febrero de 2010

Crear controles en tiempo de ejecucion con ASP.NET (Insertar datos en SQL Server)

//Creación de controles en tiempo de ejecución basado en una tabla de sql server

//Creamos un array de controles
Public TextBox[] LabelArrayIdProd, LabelArrayProd, TBArrayInvTot
TextBox labelIdProd, labelProd, TBInvTot
 //Varible para generar n cantidad de controles
static int CantidadRegistros = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
       {
            CrearControles();
             this.NumberOfControls = 1;
      }
    }

        protected int NumberOfControls
    {
        get { return (int)ViewState["NumControls"]; }
        set { ViewState["NumControls"] = value; }
    }

        protected override void CreateChildControls()
    {
        // Aqui estamos recreando los controles para que se mantengan en cada post back
            if (this.NumberOfControls == 1)            {
                CrearControles();
            }
            else
            {
                return;
            }
   }

//Creamos los controles
    protected void CrearControles()
    {
        //************************************************************
        string GenerarProductos;
 
        GenerarProductos = "SELECT idconsecutivo, producto FROM ConnProductos2  "
                                + "ORDER BY idconsecutivo";
        DataTable dt;
        OleDbDataAdapter da;
        da = new OleDbDataAdapter(GenerarProductos, MiConeccion);
        dt = new DataTable();
        da.Fill(dt);
        CantidadRegistros = Convert.ToInt16(dt.Rows.Count);
        //********************************************************
        LabelArrayIdProd = new TextBox[CantidadRegistros];
        LabelArrayProd = new TextBox[CantidadRegistros];
        TBArrayInvTot = new TextBox[CantidadRegistros];

        for (int i = 0; i < CantidadRegistros; i++)
        {
            labelIdProd = new TextBox();
            labelIdProd.ID = "LabelID" + i;
            LabelArrayIdProd[i] = labelIdProd;
            this.Panel1.Controls.Add(labelIdProd);
            //Dar un formato por medio de una hoja de estilo
            LabelArrayIdProd[i].CssClass = "ClaseEtiquetasId";
            //Le asignamos un valor a la etiqueta desde la tabla de nuestra base
            LabelArrayIdProd[i].Text = dt.Rows[i]["idconsecutivo"].ToString();
            LabelArrayIdProd[i].Enabled = false;
            this.Panel1.Controls.Add(new LiteralControl("
"));
            //***************************************************************
            labelProd = new TextBox();
            this.labelProd.ID = "LabelProd" + i;
            LabelArrayProd[i] = labelProd;
            this.Panel2.Controls.Add(this.labelProd);
            LabelArrayProd[i].CssClass = "ClaseEtiquetasProd";
            LabelArrayProd[i].Text = dt.Rows[i]["Producto"].ToString();
            LabelArrayProd[i].Enabled = false;
            this.Panel2.Controls.Add(new LiteralControl("
"));
            //****************************************
         
            TBInvTot = new TextBox();
            this.TBInvTot.ID = "tbInvTot" + i;
            TBArrayInvTot[i] = TBInvTot;
            this.Panel4.Controls.Add(this.TBInvTot);
            TBArrayInvTot[i].CssClass = "ClaseTB";
            TBArrayInvTot[i].Text = "0";
            this.Panel4.Controls.Add(new LiteralControl("
"));
            //**********************************************

        }

    }

//Guardar los datos
protected void LinkButtonGuardarReg_Click(object sender, EventArgs e)
    {

                InsertarCapura();
                this.NumberOfControls = 0;
                 //
    }

   protected void InsertarCapura()
    {

        for (int i = 0; i < CantidadRegistros; i++)
        {
       
                string InsertarDesglose = "INSERT INTO Desglose "
                                        + "(id_producto, invtot) "
                                        + "VALUES (" + Convert.ToInt16(this.LabelArrayIdProd[i].Text) + ", "
                                        + " + Convert.ToInt16(this.TBArrayInvTot[i].Text)) ";

                OleDbConnection MiConexion = new OleDbConnection(MiConeccion);
                OleDbCommand MiInsert = new OleDbCommand(InsertarDesglose, MiConexion);
                MiInsert.Connection.Open();
                MiInsert.ExecuteNonQuery();
                MiInsert.Connection.Close();
             }
        }

 //Este es un código modificado del que uso en mis páginas,
//así que puede que no sea del todo correcto, espero sus comentarios

2 comentarios:

  1. funciona esto..?? espero q funcione tengo una tarea

    ResponderEliminar
  2. yo tengo el siguiente codigo:
    Button botton1 = new Button();
    botton1.Click += new System.EventHandler(Edita_Click);
    botton1.Text = "EDITAR";
    botton1.CssClass = "btn";
    botton1.ID = nombrebtn;
    trw.Cells[2].Controls.Add(botton1);

    crea el boton pero no funciona el metodo Edita_Click pues este no se jecuta

    ResponderEliminar