protected void cargarPlantilla()
    {
        foreach (DatosRevision item in revision.DatosRevisions.OrderBy(f => f.Campo.Posicion))
        {
            string tipo = item.Campo.TipoCampo.Descripcion;
            switch (tipo)
            {
            case "Campo Si/No":
                CampoSN csn = (CampoSN)LoadControl("~/CampoSN.ascx");
                csn.ID = item.DatosId.ToString();
                csn.SetNombre(item.Campo.Nombre);
                csn.SetValor(item.Valor);
                PlantillaHolder.Controls.Add(csn);
                break;

            case "Texto":
                CampoText ctxt = (CampoText)LoadControl("~/CampoText.ascx");
                ctxt.ID = item.DatosId.ToString();
                ctxt.SetNombre(item.Campo.Nombre);
                ctxt.SetValor(item.Valor);
                PlantillaHolder.Controls.Add(ctxt);
                break;

            case "Tetra":
                CampoTetra ctt = (CampoTetra)LoadControl("~/CampoTetra.ascx");
                ctt.ID = item.DatosId.ToString();
                ctt.SetNombre(item.Campo.Nombre);
                ctt.SetValor(item.Valor);
                PlantillaHolder.Controls.Add(ctt);
                break;

            case "Numerico":
                CampoNum cnum = (CampoNum)LoadControl("~/CampoNum.ascx");
                cnum.ID = item.DatosId.ToString();
                cnum.SetNombre(item.Campo.Nombre);
                cnum.SetValor(item.Valor);
                PlantillaHolder.Controls.Add(cnum);
                break;

            case "Fecha":
                CampoDate cdt = (CampoDate)LoadControl("~/CampoDate.ascx");
                cdt.ID = item.DatosId.ToString();
                cdt.SetNombre(item.Campo.Nombre);
                cdt.SetValor(item.Valor);
                PlantillaHolder.Controls.Add(cdt);
                break;
            }
        }
    }
    protected void CargarControl(DatosRevision dr)
    {
        string tipo = dr.Campo.TipoCampo.Descripcion;

        switch (tipo)
        {
        case "Campo Si/No":
            CampoSN csn = (CampoSN)LoadControl("~/CampoSN.ascx");
            csn.ID = dr.DatosId.ToString();
            csn.SetNombre(dr.Campo.Nombre);
            csn.SetValor(dr.Valor);
            PlantillaHolder.Controls.Add(csn);
            break;

        case "Texto":
            CampoText ctxt = (CampoText)LoadControl("~/CampoText.ascx");
            ctxt.ID = dr.DatosId.ToString();
            ctxt.SetNombre(dr.Campo.Nombre);
            ctxt.SetValor(dr.Valor);
            PlantillaHolder.Controls.Add(ctxt);
            break;

        case "Tetra":
            CampoTetra ctt = (CampoTetra)LoadControl("~/CampoTetra.ascx");
            ctt.ID = dr.DatosId.ToString();
            ctt.SetNombre(dr.Campo.Nombre);
            ctt.SetValor(dr.Valor);
            PlantillaHolder.Controls.Add(ctt);
            break;

        case "Numerico":
            CampoNum cnum = (CampoNum)LoadControl("~/CampoNum.ascx");
            cnum.ID = dr.DatosId.ToString();
            cnum.SetNombre(dr.Campo.Nombre);
            cnum.SetValor(dr.Valor);
            PlantillaHolder.Controls.Add(cnum);
            break;

        case "Fecha":
            CampoDate cdt = (CampoDate)LoadControl("~/CampoDate.ascx");
            cdt.ID = dr.DatosId.ToString();
            cdt.SetNombre(dr.Campo.Nombre);
            cdt.SetValor(dr.Valor);
            PlantillaHolder.Controls.Add(cdt);
            break;
        }
    }
    protected void leerDatos()
    {
        foreach (Control control in PlantillaHolder.Controls)
        {
            string        tipo = control.GetType().ToString();
            int           id   = int.Parse(control.ID);
            DatosRevision dr   = (from d in revision.DatosRevisions
                                  where d.DatosId == id
                                  select d).FirstOrDefault <DatosRevision>();
            if (dr != null)
            {
                switch (tipo)
                {
                case "ASP.camposn_ascx":
                    CampoSN csn = (CampoSN)control;
                    dr.Valor = csn.GetValor();
                    break;

                case "ASP.campotext_ascx":
                    CampoText ctxt = (CampoText)control;
                    dr.Valor = ctxt.GetValor();
                    break;

                case "ASP.camponum_ascx":
                    CampoNum cnum = (CampoNum)control;
                    dr.Valor = cnum.GetValor();
                    break;

                case "ASP.campodate_ascx":
                    CampoDate cdt = (CampoDate)control;
                    dr.Valor = cdt.GetValor();
                    break;

                case "ASP.campotetra_ascx":
                    CampoTetra ctetra = (CampoTetra)control;
                    dr.Valor = ctetra.GetValor();
                    break;
                }
                dr.Revision = revision;
            }
        }
        ctx.SaveChanges();
    }
    protected void DescargarControl(DatosRevision dr)
    {
        Control control = PlantillaHolder.Controls[0];
        string  tipo    = control.GetType().ToString();

        if (dr != null)
        {
            switch (tipo)
            {
            case "ASP.camposn_ascx":
                CampoSN csn = (CampoSN)control;
                dr.Valor = csn.GetValor();
                break;

            case "ASP.campotext_ascx":
                CampoText ctxt = (CampoText)control;
                dr.Valor = ctxt.GetValor();
                break;

            case "ASP.camponum_ascx":
                CampoNum cnum = (CampoNum)control;
                dr.Valor = cnum.GetValor();
                break;

            case "ASP.campodate_ascx":
                CampoDate cdt = (CampoDate)control;
                dr.Valor = cdt.GetValor();
                break;

            case "ASP.campotetra_ascx":
                CampoTetra ctetra = (CampoTetra)control;
                dr.Valor = ctetra.GetValor();
                break;
            }
            dr.Revision = r;
        }
        // si descargamos grabamos
        ctx.SaveChanges();
    }