/// <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; } }
/// <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); } }