private static void TestGroup() { //build a form! IReportElement testGroup = BuildTestGroup(); Console.WriteLine(testGroup); Console.WriteLine("\n >saving to XML"); string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "testXML"); Console.WriteLine(" >saving into " + dir); XmlSerializer ser = new XmlSerializer(testGroup.GetType()); using (TextWriter writer = new StreamWriter(dir + @"\groupTest.xml")) { ser.Serialize(writer, testGroup); } Console.WriteLine("\n >done!"); Console.WriteLine(" >Now reading from file!"); IReportElement readField; using (TextReader reader = new StreamReader(dir + @"\groupTest.xml")) { readField = (IReportElement)ser.Deserialize(reader); } Console.WriteLine(" >done!\n\n"); Console.WriteLine(readField.ToString()); }
//--save/load--// public virtual void ReadXml(XmlReader reader) { reader.ReadStartElement(); this.name = reader.ReadElementContentAsString(); try { this.description = reader.ReadElementContentAsString(); } catch (Exception) { } //now we're into fields reader.ReadStartElement(); reader.MoveToContent(); while (reader.NodeType != XmlNodeType.EndElement) { Type type = Type.GetType(reader.GetAttribute("type")); XmlSerializer ser = new XmlSerializer(type); IReportElement element = (IReportElement)ser.Deserialize(reader); reader.MoveToContent(); this.AddElementInternal(element); } reader.ReadEndElement(); //now we're done with the fields. }
//--setters--// /// <summary> /// adds a field to this report, if its ID isn't already in use. /// </summary> /// <param name="field"></param> protected virtual void AddElementInternal(IReportElement field) { if (Array.Exists(elements, item => item.name.Equals(field.name))) { throw new ArgumentException("Cannot add element " + field.name + " to form " + this.name + ". A element with that name already exists in the form!"); } IReportElement[] temp = new IReportElement[this.elements.Length + 1]; for (int i = 0; i < this.elements.Length; i++) { temp[i] = this.elements[i]; } temp[this.elements.Length] = field; this.elements = temp; }
//--data management--// private void DataChangedHandler(IReportElement sender, object data) { //if this radiobutton switched to false, do nothing! bool boolData = (bool)data; if (!boolData) { return; } for (int i = 0; i < this.elements.Length; i++) { if (elements[i] != sender) { (elements[i] as FieldBoolean).SetData(false); } } }
public override void ReadXml(XmlReader reader) { reader.ReadStartElement(); this.name = reader.ReadElementContentAsString(); try { this.description = reader.ReadElementContentAsString(); } catch (Exception) { } reader.MoveToContent(); //now read the row template Type rowType = Type.GetType(reader.GetAttribute("type")); XmlSerializer rowSer = new XmlSerializer(rowType); this.rowTemplate = (ElementGroup)rowSer.Deserialize(reader); reader.MoveToContent(); reader.ReadEndElement(); int i = 0; //now we're into fields reader.ReadStartElement(); reader.MoveToContent(); while (reader.NodeType != XmlNodeType.EndElement) { Type type = Type.GetType(reader.GetAttribute("type")); XmlSerializer ser = new XmlSerializer(type); IReportElement element = (IReportElement)ser.Deserialize(reader); reader.ReadEndElement(); reader.MoveToContent(); this.AddElementInternal(element); } reader.ReadEndElement(); reader.MoveToContent(); reader.ReadEndElement(); //now we're done with the fields. Console.WriteLine("~" + reader.Name); }
//--setters--// /// <summary> /// adds a field to this report, if its ID isn't already in use. /// </summary> /// <param name="field"></param> public void AddElement(IReportElement field) { this.AddElementInternal(field); }
private static object _EvaluateExpression(IReportElement element) { return(element.Expression.Evaluate(element.Data)); }