Example #1
0
        /// <summary>
        /// each custom field has its ICustomizableColumnFieldFactory, which will read the form, validate it,
        /// report errors or modify the ICustomizableField object accordingly.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void SaveButton_Click(object sender, EventArgs e)
        {
            bool valid = true;

            validationResult.Items.Clear();
            foreach (Dictionary <string, object> colSettings in customs.Values)
            {
                var factory = (ICustomizableColumnFieldFactory)colSettings["factory"];
                factory.ValidateForm();
                if (factory.ErrorMessage != null)
                {
                    validationResult.Items.Add(factory.ErrorMessage);
                    valid = false;
                }
            }
            if (valid)
            {
                List <IField> customizedFields = new List <Interfaces.IField>();
                foreach (DataColumn col in customs.Keys)
                {
                    var factory = (ICustomizableColumnFieldFactory)customs[col]["factory"];

                    IColumnField field = factory.Create(col);
                    field.Required = (bool)customs[col]["required"];
                    field.Unique   = (bool)customs[col]["unique"];
                    field.Caption  = (string)customs[col]["caption"];
                    customizedFields.Add(field);
                }
                interPanel.AddFields(customizedFields);

                validationResult.Items.Add(new ListItem("Valid"));

                // finally save the new panel
                mm.SysDriver.BeginTransaction();
                mm.SysDriver.UpdatePanel(interPanel);
                Session.Clear();
                mm.SysDriver.IncreaseVersionNumber();
                mm.SysDriver.CommitTransaction();

                validationResult.Items.Add(new ListItem("Saved"));
                Response.RedirectToRoute("ArchitectEditEditableRoute", new { projectName = mm.ProjectName, panelId = interPanel.panelId });
            }
        }
Example #2
0
        /// <summary>
        /// deserializes a specific panel with controls, fields and child panels
        /// </summary>
        /// <param name="ds">the dataset from FullProjectLoad</param>
        private Panel DataSet2Panel(DataSet ds, int panelId)
        {
            List <IField>  fields   = DataSet2PanelFields(ds, panelId);
            List <Control> controls = DataSet2PanelControls(ds, panelId);
            DataRow        panelRow = ds.Tables["panels"].AsEnumerable().Where(x => (Int32)x["id_panel"] == panelId).First();
            Panel          res      = DeserializePanel(panelRow["content"] as string);

            res.panelId = panelId;

            List <Panel> children = new List <Panel>();

            DataRow[] childRows = panelRow.GetChildRows(CC.SYSDRIVER_FK_PANEL_PARENT);
            foreach (DataRow childRow in childRows)
            {
                children.Add(DataSet2Panel(ds, (int)(childRow["id_panel"])));
            }

            res.AddChildren(children);
            res.AddFields(fields);
            res.AddControls(controls);
            return(res);
        }