public string GetValue(Control ctrl, XmlNode renderingDocument) { /*if, once here, the getWebControl created a RepeaterPanel*/ if (referredElement.MaxOccurs > 1) { string rs = ""; RepeaterPanel rp = ((ctrl as UpdatePanel).ContentTemplateContainer.Controls[1] as RepeaterPanel); XmlSchemaElement newElm = new XmlSchemaElement(); newElm.Name = referredElement.Name; newElm.SchemaType = referredElement.SchemaType; newElm.SchemaTypeName = referredElement.SchemaTypeName; newElm.IsNillable = referredElement.IsNillable; foreach (Control ct in rp.RepeatedItems()) { rs += FieldsManager.GetInstance(renderingDocument, newElm, schemas).GetValue(ct, renderingDocument); } return(rs); } /*else there was just a standard complexType inside the <element> */ else { Panel pn = ctrl as Panel; /*i create a node with the element name with inside the value of my child (complexType)*/ return("<" + referredElement.Name + ">" + FieldsManager.GetInstance(renderingDocument.FirstChild, referredElement.SchemaType, schemas).GetValue(pn.Controls[0], renderingDocument.FirstChild) + "</" + referredElement.Name + ">"); } }
public Control GetWebControl(HttpServerUtility server, System.Xml.XmlNode renderingDocument) { /* if it is a repeatable element, of any type, complexType or our base types*/ if (referredElement.MaxOccurs > 1) { XmlSchemaElement newElm = new XmlSchemaElement(); /*I copy the schema element omitting min e max Occurs*/ newElm.Name = referredElement.Name; newElm.SchemaType = referredElement.SchemaType; newElm.SchemaTypeName = referredElement.SchemaTypeName; /*and i create a repeater panel that manages the repetition of that single element (without the max e min occurs)*/ RepeaterPanel rp = new RepeaterPanel(schemas, renderingDocument, newElm, value, (int)referredElement.MinOccurs, (int)referredElement.MaxOccurs); rp.ID = referredElement.Name + "_Repeating"; UpdatePanel up = new UpdatePanel(); up.ContentTemplateContainer.Controls.Add(new LiteralControl("<BR>")); up.ContentTemplateContainer.Controls.Add(rp); return(up); } else /*if it is just an element with an inline complex type*/ { NamingPanel pn = new NamingPanel(); string name; if (renderingDocument.Attributes["renderedLabel"] != null) { name = renderingDocument.Attributes["renderedLabel"].Value.FromXmlValue2Render(server); } else { name = referredElement.Name.FromXmlName2Render(server); } pn.GroupingText = name; pn.ID = referredElement.Name; /*This field should be a ComplexType*/ var field = FieldsManager.GetInstance(renderingDocument.FirstChild, referredElement.SchemaType, schemas); /*I set the value to the ComplexType inside the element*/ if (value != null) { ((IField)field).SetValue(value[0].ChildNodes.ToList()); } pn.Controls.Add(field.GetWebControl(server, renderingDocument.FirstChild)); return(pn); } }