예제 #1
0
        /// <summary>
        /// Overridden.
        /// </summary>
        /// <param name="element"></param>
        /// <param name="doc"></param>
        /// <param name="level"></param>
        protected override void OnWriteElement(ICompositionElement element, IGenerationContext context, IDocument doc, int level)
        {
            IScalarValueProducer singleValue = element as IScalarValueProducer;

            if (singleValue != null)
            {
                CreateAddSimpleText(doc, doc.Content, singleValue.GetValue(context));
            }
            else
            {
                IMultipleRowsProducer rp = element as IMultipleRowsProducer;
                if (rp != null)
                {
                    WriteTable(rp, context, doc);
                }
            }
        }
예제 #2
0
        private void WriteElement(ICompositionElement element, XElement parent, IGenerationContext context)
        {
            XElement el = CreateTag(TagType.Div);

            if (element.ChildrenSupported)
            {
                foreach (ICompositionElement child in element.Children)
                {
                    WriteElement(child, el, context);
                }
            }

            IScalarValueProducer singleValue = element as IScalarValueProducer;

            if (singleValue != null)
            {
                XElement elValue = CreateTag(TagType.Span);
                elValue.Add(new XAttribute("class", "value"));
                elValue.Add(singleValue.GetValue(context));

                el.Add(elValue);
            }
            else
            {
                IMultipleRowsProducer rows = element as IMultipleRowsProducer;
                if (rows != null)
                {
                    XElement elTable       = CreateTag(TagType.Table);
                    XElement elTableHeader = null;

                    foreach (DataRow row in rows.GetValue(context))
                    {
                        if (elTableHeader == null)
                        {
                            elTableHeader = CreateTag(TagType.TableHeader);
                            XElement elTableHeaderRow = CreateTag(TagType.TableRow);

                            foreach (DataColumn col in row.Table.Columns)
                            {
                                elTableHeaderRow.Add(new XElement(GetTagName(TagType.TableColumn), new XText(col.ColumnName)));
                            }

                            elTableHeader.Add(elTableHeaderRow);

                            elTable.Add(elTableHeader);
                        }

                        XElement elRow = CreateTag(TagType.TableRow);

                        foreach (object colValue in row.ItemArray)
                        {
                            XElement elColValue = CreateTag(TagType.Span);
                            elColValue.Add(new XAttribute("class", "value"));
                            elColValue.Add(colValue);

                            elRow.Add(new XElement(GetTagName(TagType.TableColumn), elColValue));
                        }

                        elTable.Add(elRow);
                    }

                    el.Add(elTable);
                }
                else
                {
                    if (element.Classification.HasFlag(ElementClassifications.Separator))
                    {
                        el.Name = GetTagName(TagType.HorizontalRule);
                    }

                    double height = element.GetProperty("height", double.NaN);
                    if (!double.IsNaN(height))
                    {
                        ApplyClass(el, "height-" + height.ToString());
                    }
                }
            }

            parent.Add(el);
        }