/// <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 }); } }
/// <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); }