private static void ReSortControls() { MetadataDocumentManagement metaDataDocMgt = MetadataDocumentManagement.Instance; XmlNode cntrlNode = metaDataDocMgt.XmlCurrentFormNode.SelectSingleNode(@"./a:Controls/a:ContentArea", metaDataDocMgt.XmlNamespaceMgt); XmlNode currCntrlContainer = null; if (cntrlNode != null) { XmlNode currNode = cntrlNode.SelectSingleNode(@"./a:Properties", metaDataDocMgt.XmlNamespaceMgt); foreach (KeyValuePair <string, ControlType1> control in controlsSequence) { XmlNode controlNode; switch (control.Value) { case ControlType1.OptionButton: controlNode = cntrlNode.SelectSingleNode(@"./a:Control[./a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt); if (controlNode == null) { break; } String optionCaptionML = GetProperty(controlNode, "OptionCaptionML"); if (!string.IsNullOrEmpty(optionCaptionML)) { bool breakWork = false; ResortControlsForTrendscape(ref currCntrlContainer, cntrlNode, currNode, controlNode, ref breakWork, optionCaptionML); if (breakWork) { break; } } currCntrlContainer = null; currNode = cntrlNode.InsertAfter(controlNode.ParentNode.RemoveChild(controlNode), currNode); break; case ControlType1.TextBox: case ControlType1.CheckBox: controlNode = cntrlNode.SelectSingleNode(@"./a:Control[./a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt); // to avoid sorting problems with new groups. if (controlNode == null) { XmlNode groupControl = cntrlNode.SelectSingleNode(@"./a:Group[./a:Control/a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt); if (groupControl == null) { break; } if (currNode.Equals(groupControl)) { break; } XmlNode controlForCheck = cntrlNode.SelectSingleNode(@".//a:Control[./a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt); if ((groupControl.ChildNodes.Count > 2) && (!groupControl.ChildNodes[1].Equals(controlForCheck))) // so it's the first control in the group { break; } controlNode = groupControl; } XmlNode removedTempNode = controlNode.ParentNode.RemoveChild(controlNode); currNode = cntrlNode.InsertAfter(removedTempNode, currNode); break; case ControlType1.Frame: case ControlType1.TabControl: case ControlType1.TableBox: controlNode = cntrlNode.SelectSingleNode(@"./a:Group[./a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt); if (controlNode == null) { break; } currCntrlContainer = null; currNode = cntrlNode.InsertAfter(controlNode.ParentNode.RemoveChild(controlNode), currNode); break; case ControlType1.Subform: controlNode = cntrlNode.SelectSingleNode(@"./a:Control[./a:Properties/a:ID='" + control.Key + "']", metaDataDocMgt.XmlNamespaceMgt); if (controlNode == null) { break; } currCntrlContainer = null; currNode = cntrlNode.InsertAfter(controlNode.ParentNode.RemoveChild(controlNode), currNode); break; case ControlType1.Label: if (PageControls.IsObjectHasIndentation(metaDataDocMgt.GetCurrentPageId)) { goto case ControlType1.TableBox; } break; default: break; } } } }