Ejemplo n.º 1
0
        /// <summary>
        /// Método para adicionar dados a tabela
        /// </summary>
        /// <param name="data">Lista de dados</param>
        /// <param name="titles">Linha com os Titulos</param>
        /// <param name="autoTitle">se true, auto gerar títulos para a coleção de dados</param>
        /// <param name="useDefaultStyle">se true, usa os styles padrões para os tipos de dados</param>
        public void AddData(IEnumerable <Object> data, Row titles, bool autoTitle, bool useDefaultStyle)
        {
            try
            {
                // adiciona os titulos a tabela
                if (titles != null)
                {
                    AddRow(titles);
                }

                if (data != null && data.Count() > 0)
                {
                    object obj = data.First();

                    // adiciona o estilo padrao para o titulo
                    if (useDefaultStyle)
                    {
                        var ps = obj.GetType().GetProperties();
                        foreach (PropertyInfo p in ps)
                        {
                            string styleId = null;
                            if (p.PropertyType.FullName.ToLower().Contains("int") ||
                                p.PropertyType.FullName.ToLower().Contains("decimal") ||
                                p.PropertyType.FullName.ToLower().Contains("double") ||
                                p.PropertyType.FullName.ToLower().Contains("float") ||
                                p.PropertyType.FullName.ToLower().Contains("long"))
                            {
                                styleId = "sDefaultNumber";
                            }
                            else if (p.PropertyType.FullName.ToLower().Contains("string"))
                            {
                                styleId = "sDefaultText";
                            }
                            else if (p.PropertyType.FullName.ToLower().Contains("datetime"))
                            {
                                styleId = "sDefaultDate";
                            }
                            else
                            {
                                styleId = "sDefaultText";
                            }

                            if (styleId != null)
                            {
                                AddColumn(new Column(null, styleId));
                            }
                        }
                    }

                    // cria os titulos automaticamente na tabela
                    if (autoTitle)
                    {
                        // titulos da tabela
                        Row rAutoTitles = new Row();
                        var pObj        = obj.GetType().GetProperties();
                        foreach (PropertyInfo p in pObj)
                        {
                            string styleId = null;
                            if (useDefaultStyle)
                            {
                                styleId = "sDefaultTitle";
                            }
                            Data d = new Data("String", p.Name);
                            rAutoTitles.AddCell(new Cell(null, styleId, new List <Element>()
                            {
                                d
                            }));
                        }
                        AddRow(rAutoTitles);
                    }


                    // adiciona os dados na tabela
                    foreach (Object o in data)
                    {
                        Row nRow       = new Row();
                        var properties = o.GetType().GetProperties();
                        foreach (PropertyInfo prop in properties)
                        {
                            Cell c = new Cell();
                            if (prop.Name.Equals("Value") || prop.PropertyType.IsInterface)
                            {
                                continue;
                            }
                            MethodInfo getter = prop.GetGetMethod();
                            Object     val    = getter.Invoke(o, null);

                            Data d = new Data();
                            if (prop.PropertyType.FullName.ToLower().Contains("int") ||
                                prop.PropertyType.FullName.ToLower().Contains("decimal") ||
                                prop.PropertyType.FullName.ToLower().Contains("double") ||
                                prop.PropertyType.FullName.ToLower().Contains("float") ||
                                prop.PropertyType.FullName.ToLower().Contains("long"))
                            {
                                d.Type  = "Number";
                                d.Value = (val != null) ? Convert.ToString(val).Replace(',', '.') : null;
                            }
                            else if (prop.PropertyType.FullName.ToLower().Contains("string"))
                            {
                                d.Type  = "String";
                                d.Value = (val != null) ? val.ToString() : null;
                            }
                            else if (prop.PropertyType.FullName.ToLower().Contains("datetime"))
                            {
                                d.Type  = "DateTime";
                                d.Value = (val != null) ? ((DateTime)val).ToString("s") : null;
                            }

                            else if (prop.PropertyType.FullName.ToLower().Contains("boolean"))
                            {
                                d.Type  = "Boolean";
                                d.Value = (val != null) ? Convert.ToString((bool)val) : null;
                            }
                            else
                            {
                                d.Type  = "String";
                                d.Value = (val != null) ? Convert.ToString(val).Replace(',', '.') : null;
                            }

                            if (val != null)
                            {
                                c.AddElement(d);
                            }
                            nRow.AddCell(c);
                        }
                        AddRow(nRow);
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Método para adicionar conjunto de dados a tabela a partir de um ou mais dataReader
        /// </summary>
        /// <param name="dataReaders">tabela de dados</param>
        /// <param name="autoTitles">Se true, automaticamente cria os titulos para as colunas</param>
        /// /// <param name="useDefaultStyle">Se true, automaticamente utiliza os estilos padrões para as colunas</param>
        public void AddDataReader(IEnumerable <DbDataReader> dataReaders, bool autoTitle, bool useDefaultStyle)
        {
            try
            {
                int count = 0;
                foreach (DbDataReader dt in dataReaders)
                {
                    while (dt.Read())
                    {
                        // cria a a ligação com os estilos padrão
                        if (count == 0 && useDefaultStyle)
                        {
                            for (int i = 0; i < dt.FieldCount; i++)
                            {
                                string styleId = null;

                                switch (dt[i].GetType().ToString().ToLower())
                                {
                                case "datetime":
                                    styleId = "sDefaultDate";
                                    break;

                                case "number":
                                    styleId = "sDefaultNumber";
                                    break;

                                case "string":
                                case "dbnull":
                                default:
                                    styleId = "sDefaultText";
                                    break;
                                }
                                if (styleId != null)
                                {
                                    AddColumn(new Column(i + 1, styleId));
                                }
                            }
                        }

                        // cria os titulos para as colunas
                        if (autoTitle)
                        {
                            // titulos da tabela
                            Row rTitles = new Row();
                            for (int i = 0; i < dt.FieldCount; i++)
                            {
                                Data d = new Data("String", dt.GetName(i));
                                rTitles.AddCell(new Cell(new List <Element>()
                                {
                                    d
                                }));
                            }
                            AddRow(rTitles);
                        }

                        // dados da tabela
                        Row novaLilha = new Row();
                        for (int col = 0; col < dt.FieldCount; col++)
                        {
                            Data d = new Data();
                            switch (dt[col].GetType().Name.ToLower())
                            {
                            case "datetime":
                                d.Type  = "DateTime";
                                d.Value = dt.GetDateTime(col).ToString("s");
                                break;

                            case "string":
                                d.Type  = "String";
                                d.Value = dt.GetString(col);
                                break;

                            case "boolean":
                                d.Type  = "Boolean";
                                d.Value = Convert.ToString(dt.GetBoolean(col));
                                break;

                            case "int":
                            case "decimal":
                            case "double":
                            case "float":
                            case "long":
                                d.Type  = "Number";
                                d.Value = Convert.ToString(dt[col]);
                                break;

                            default:
                                d.Type  = "Number";
                                d.Value = dt.GetString(col).ToString().Replace(',', '.');
                                break;
                            }
                            Cell c = new Cell();
                            c.AddElement(d);
                            novaLilha.AddCell(c);
                        }
                        AddRow(novaLilha);
                        count++;
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao criar tabela: " + e.Message);
            }
        }