コード例 #1
0
        /// <summary>
        /// Obtém html que representa uma tabela a partir de um leitor <see cref="IDataReader"/>.
        /// </summary>
        /// <param name="datareader">O leitor.</param>
        /// <returns>O html como texto.</returns>
        public string GetHtmlFromDataReader(
            IDataReader datareader)
        {
            if (datareader == null)
            {
                throw new ArgumentNullException("dataReader");
            }
            else
            {
                var tableDocument   = new XmlDocument();
                var attributeSetter = new AttributeSetter();
                var elementSetter   = new ElementSetter();

                // Inicializa a tabela
                var table = tableDocument.CreateElement("table");
                attributeSetter.CurrentElement = table;
                this.tableAttributes.Invoke(attributeSetter);
                tableDocument.AppendChild(table);

                // Cabeçalho
                var tableHeader = tableDocument.CreateElement("thead");
                attributeSetter.CurrentElement = tableHeader;
                this.tableHeaderAttributes.Invoke(attributeSetter);
                table.AppendChild(tableHeader);

                // Linhas do cabeçalho
                var tableRow = tableDocument.CreateElement("tr");
                attributeSetter.CurrentElement = tableRow;
                this.headerRowAttributes.Invoke(attributeSetter);
                tableHeader.AppendChild(tableRow);

                // Colunas do cabeçalho
                var fieldCount = datareader.FieldCount;
                for (int i = 0; i < fieldCount; ++i)
                {
                    var columnName = datareader.GetName(i);
                    var tableCell  = tableDocument.CreateElement("th");
                    elementSetter.CurrentElement = tableCell;
                    this.headerCellElement.Invoke(i, columnName, elementSetter);
                    tableRow.AppendChild(tableCell);
                }

                // Corpo
                var tableBody = tableDocument.CreateElement("tbody");
                attributeSetter.CurrentElement = tableBody;
                this.tableBodyAttributes.Invoke(attributeSetter);
                table.AppendChild(tableBody);

                // Linhas da tabela
                var line = 0;
                while (datareader.Read())
                {
                    tableRow = tableDocument.CreateElement("tr");
                    attributeSetter.CurrentElement = tableRow;
                    this.bodyRowAttributesSetter.Invoke(line, attributeSetter);
                    tableBody.AppendChild(tableRow);

                    for (int i = 0; i < fieldCount; ++i)
                    {
                        var tableCell = tableDocument.CreateElement("td");
                        elementSetter.CurrentElement = tableCell;
                        this.bodyCellElement.Invoke(
                            line,
                            i,
                            datareader.GetValue(i),
                            elementSetter);
                        tableRow.AppendChild(tableCell);
                    }

                    ++line;
                }

                // Escreve o xml
                var resultBuilder          = new StringBuilder();
                XmlWriterSettings settings = new XmlWriterSettings
                {
                    Indent             = this.indent,
                    IndentChars        = "  ",
                    NewLineChars       = "\r\n",
                    NewLineHandling    = NewLineHandling.Replace,
                    OmitXmlDeclaration = true
                };

                using (var writer = XmlWriter.Create(resultBuilder, settings))
                {
                    tableDocument.Save(writer);
                }

                return(resultBuilder.ToString());
            }
        }
コード例 #2
0
        /// <summary>
        /// Obtém o html que representa uma tabela a partir de um leitor <see cref="ITabularItem"/>.
        /// </summary>
        /// <typeparam name="R">O tipo dos objectos que constituem as linhas.</typeparam>
        /// <typeparam name="L">O tipo dos objectos que constituem as células.</typeparam>
        /// <param name="tabularItemHeader">O item tabular que contém o cabeçalho.</param>
        /// <param name="tabularItemBody">O item tabular que constitui o corpo.</param>
        /// <returns>O html como texto.</returns>
        public string GetHtmlFromTableItem <R, L>(
            IGeneralTabularItem <R> tabularItemHeader,
            IGeneralTabularItem <R> tabularItemBody)
            where R : IGeneralTabularRow <L>
            where L : IGeneralTabularCell
        {
            if (tabularItemHeader == null)
            {
                throw new ArgumentNullException("tabularItemHeader");
            }
            else if (headerMergingRegions == null)
            {
                throw new ArgumentNullException("tabularBody");
            }
            else
            {
                var columnsNumber = Math.Max(
                    this.GetMaxLastColumnNumber <R, L>(tabularItemHeader),
                    this.GetMaxLastColumnNumber <R, L>(tabularItemBody)) + 1;
                var tableDocument   = new XmlDocument();
                var attributeSetter = new AttributeSetter();
                var elementSetter   = new ElementSetter();

                // Inicializa a tabela
                var table = tableDocument.CreateElement("table");
                attributeSetter.CurrentElement = table;
                this.tableAttributes.Invoke(attributeSetter);
                tableDocument.AppendChild(table);

                // Cabeçalho
                var tableHeader = tableDocument.CreateElement("thead");
                attributeSetter.CurrentElement = tableHeader;
                this.tableHeaderAttributes.Invoke(attributeSetter);
                table.AppendChild(tableHeader);

                this.PrintTabularItem <R, L>(
                    "th",
                    tableHeader,
                    columnsNumber,
                    tabularItemHeader,
                    this.headerMergingRegions,
                    this.headerRowAttributesSetter,
                    this.headerCellElement);

                // Corpo
                var tableBody = tableDocument.CreateElement("tbody");
                attributeSetter.CurrentElement = tableBody;
                this.tableBodyAttributes.Invoke(attributeSetter);
                table.AppendChild(tableBody);

                this.PrintTabularItem <R, L>(
                    "td",
                    tableBody,
                    columnsNumber,
                    tabularItemBody,
                    this.bodyMergingRegions,
                    this.bodyRowAttributesSetter,
                    this.bodyCellElement);

                // Escreve o xml
                var resultBuilder          = new StringBuilder();
                XmlWriterSettings settings = new XmlWriterSettings
                {
                    Indent             = this.indent,
                    IndentChars        = "  ",
                    NewLineChars       = "\r\n",
                    NewLineHandling    = NewLineHandling.Replace,
                    OmitXmlDeclaration = true
                };

                using (var writer = XmlWriter.Create(resultBuilder, settings))
                {
                    tableDocument.Save(writer);
                }

                return(resultBuilder.ToString());
            }
        }
コード例 #3
0
        /// <summary>
        /// Obtém a table corresponde ao enumerável de objectos.
        /// </summary>
        /// <param name="enumerable">O enumerável.</param>
        /// <returns>A representação da tabela.</returns>
        public string GetHtmlTableFromEnumerable(IEnumerable <ObjType> enumerable)
        {
            if (enumerable == null)
            {
                throw new ArgumentNullException("enumerable");
            }
            else
            {
                var tableDocument   = new XmlDocument();
                var attributeSetter = new AttributeSetter();
                var elementSetter   = new ElementSetter();

                // Inicializa a tabela
                var table = tableDocument.CreateElement("table");
                attributeSetter.CurrentElement = table;
                this.tableAttributes.Invoke(attributeSetter);
                tableDocument.AppendChild(table);

                // Cabeçalho
                var tableHeader = tableDocument.CreateElement("thead");
                attributeSetter.CurrentElement = tableHeader;
                this.tableHeaderAttributes.Invoke(attributeSetter);
                table.AppendChild(tableHeader);

                // Linhas do cabeçalho
                var tableRow = tableDocument.CreateElement("tr");
                attributeSetter.CurrentElement = tableRow;
                this.headerRowAttributesSetter.Invoke(attributeSetter);
                tableHeader.AppendChild(tableRow);

                // Colunas do cabeçalho
                var fieldCount = this.columns.Count;
                for (int i = 0; i < fieldCount; ++i)
                {
                    var columnName = this.columns[i].Item1;
                    var tableCell  = tableDocument.CreateElement("th");
                    elementSetter.CurrentElement = tableCell;
                    this.headerCellElement.Invoke(i, columnName, elementSetter);
                    tableRow.AppendChild(tableCell);
                }

                // Corpo
                var tableBody = tableDocument.CreateElement("tbody");
                attributeSetter.CurrentElement = tableBody;
                this.tableBodyAttributes.Invoke(attributeSetter);
                table.AppendChild(tableBody);

                // Linhas da tabela
                var line       = 0;
                var enumerator = enumerable.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    var currentObj = enumerator.Current;

                    tableRow = tableDocument.CreateElement("tr");
                    attributeSetter.CurrentElement = tableRow;
                    this.bodyRowAttributesSetter.Invoke(line, attributeSetter);
                    tableBody.AppendChild(tableRow);

                    var length = this.columns.Count;
                    for (int i = 0; i < length; ++i)
                    {
                        var currentAction = this.columns[i].Item2;

                        var tableCell = tableDocument.CreateElement("td");
                        elementSetter.CurrentElement = tableCell;
                        currentAction.Invoke(line, i, currentObj, elementSetter);

                        tableRow.AppendChild(tableCell);
                    }

                    ++line;
                }

                // Escreve o xml
                var resultBuilder          = new StringBuilder();
                XmlWriterSettings settings = new XmlWriterSettings
                {
                    Indent             = this.indent,
                    IndentChars        = "  ",
                    NewLineChars       = "\r\n",
                    NewLineHandling    = NewLineHandling.Replace,
                    OmitXmlDeclaration = true
                };

                using (var writer = XmlWriter.Create(resultBuilder, settings))
                {
                    tableDocument.Save(writer);
                }

                return(resultBuilder.ToString());
            }
        }