public C1TrueDBGrid(XElement xElemGrid) { this.Splits = new List <Split>(); AssignDefaultValues(); IEnumerable <XElement> datacols = xElemGrid.Element("DataCols")?.Elements(); if (datacols != null) { foreach (XElement column in datacols) { this.DataCols.Add(C1DataColumn.ParseXML(column)); } } XElement splits = xElemGrid.Element("Splits"); foreach (XElement split in splits.Elements()) { this.Splits.Add(Split.ParseXML(split)); } IEnumerable <XElement> childNodes = xElemGrid.Elements().Where(x => x.Name.ToString() != "DataCols" && x.Name.ToString() != "Styles" && x.Name.ToString() != "Splits" && x.Name.ToString() != "NamedStyles" && x.Attribute("me") == null && x.Attribute("parent") == null); foreach (XElement prop in childNodes) { this.Properties[prop.Name.ToString()] = prop.Value; } IEnumerable <XElement> namedStylesXML = xElemGrid.Element("NamedStyles").Elements(); foreach (XElement style in namedStylesXML) { string name = style.Attribute("me").Value; if (name == "Normal") { name = "Style"; } else if (name == "HighlightRow") { name = "HighLightRowStyle"; } else { name = $"{name}Style"; } this.Styles["PrintPageHeaderStyle"] = Style.ParseXML(xElemGrid.Element("PrintPageHeaderStyle")); this.Styles["PrintPageFooterStyle"] = Style.ParseXML(xElemGrid.Element("PrintPageFooterStyle")); this.Styles[name] = Style.ParseXML(style); this.namedStyles.Add(this.Styles[name]); } this.GenerateAllStylesDictionary(); this.ParseStylesString(xElemGrid.Element("Styles").Element("Data").Value); this.ParsedFromXML = true; this.PropertyBagAlreadyExists = true; }
public static void ProcessGridProperty(Dictionary <string, C1TrueDBGrid> grids, Dictionary <string, C1DataColumn> columns, Dictionary <string, ValueItem> valueItemsDict, string line) { //Verify if the line is the assignment of a known grid GroupCollection groups = RegularExpressions.ComplexProperty.Matches(line)[0].Groups; C1TrueDBGrid grid = grids[groups[1].Value]; int index = -1; if (groups[4].Value != "") { index = int.Parse(groups[4].Value); } string value = groups[15].Value; string subLine = groups[5].Value; string property = groups[2].Value; switch (property.ToUpper()) { case nameof(SplitProperties.ALTERNATINGROWS): grid.Splits[0].Properties["AlternatingRowStyle"] = Utilities.FirstCharToUpper(value); break; case nameof(GridProperties.CAPTION): grid.Properties["Caption"] = Utilities.RemoveBeginEndQuotes(value); break; case nameof(GridProperties.BACKCOLOR): grid.TimesReadBackColor++; grid.Properties["BackColor"] = value; break; case nameof(StyleProperties.FONT): grid.Styles["Style"].Properties["Font"] = Utilities.ProcessFontProperty(value); break; case nameof(GridProperties.HEIGHT): grid.Height = Utilities.PropertyValueTwipsToPixels(value); break; case nameof(SplitProperties.HSCROLLBAR): if (groups[5].Value.Equals("Style")) { grid.Splits[0].Properties["HBarStyle"] = Utilities.EnumValueToString(value); } break; case nameof(GridProperties.IMAGES): string imageName = RegularExpressions.GetObject.Matches(groups[12].Value)[0].Groups[1].Value; ResourceImage image = new ResourceImage(); image.Name = imageName; grid.Images[imageName] = image; break; case nameof(GridProperties.NAME): grid.Properties["Name"] = value; grid.TimesReadName++; break; case nameof(GridProperties.PREVIEWINFO): PreviewInfoPropertyReader.ProcessPreviewInfoProperty(grid.PreviewInfo, subLine, value); break; case nameof(GridProperties.PRINTINFO): PrintInfoPropertyReader.ProcessPrintInfoProperty(grid.PrintInfo, subLine, value); break; case nameof(GridProperties.ROWDIVIDER): GridLinesPropertyReader.ProcessGridLinesProperty(grid.RowDivider, subLine, value); break; case nameof(GridProperties.SIZE): GroupCollection groupsSize = RegularExpressions.Size.Matches(line)[0].Groups; grid.Width = Int32.Parse(groupsSize[1].Value); grid.Height = Int32.Parse(groupsSize[2].Value); break; case nameof(GridProperties.STYLES): grid.IncorrectPropertiesInDesigner = true; break; case nameof(SplitProperties.VSCROLLBAR): if (groups[5].Value.Equals("Style")) { grid.Splits[0].Properties["VBarStyle"] = Utilities.EnumValueToString(value); } break; case nameof(GridProperties.COLUMNS): grid.IncorrectPropertiesInDesigner = true; if (groups[7].Value == "Add") { string argument = groups[12].Value; if (!argument.StartsWith("new ")) { string columnName = argument.Split('.')[1]; grid.DataCols.Add(columns[columnName]); } } else { int columnIndex = Utilities.StringToIndex(groups[4].Value); C1DataColumn column = Utilities.GetCreateListElement <C1DataColumn>(grid.DataCols, columnIndex); ColumnPropertyReader.ProcessColumnProperty(column, valueItemsDict, subLine, value); } break; case nameof(GridProperties.WIDTH): grid.Width = Int32.Parse(value); break; case nameof(GridProperties.SPLITS): grid.IncorrectPropertiesInDesigner = true; int splitIndex = Utilities.StringToIndex(groups[4].Value); Split split = Utilities.GetCreateListElement <Split>(grid.Splits, splitIndex); SplitPropertyReader.ProcessSplitProperty(split, subLine, value); break; default: if (grid.Splits[0].Properties.ContainsKey(property) && !grid.Properties.ContainsKey(property)) { grid.Splits[0].Properties[property] = Utilities.CleanXMLProperty(value); } else if (grid.Styles.ContainsKey(property)) { grid.IncorrectPropertiesInDesigner = true; StylePropertyReader.ProcessStyleProperty(grid.Styles[property], subLine, value); } else if (groups[11].Value == "") // if it isn't a method call from the grid { grid.Properties[property] = Utilities.CleanGridProperty(value); } break; } }