Пример #1
0
        /// <summary>
        /// Transforma os dados em uma tabela (DataTable)
        /// </summary>
        /// <param name="tp">Tipo de dados a ser obtido (filtrado)</param>
        /// <returns>DataBable co mos dados de um determinado tipo</returns>
        public DataTable Table(Type tp)
        {
            LayoutType lt = type.Find(t => t.type == tp);

            if (lt.type == null)
            {
                throw new Exception("Tipo não existe no layout: " + tp.FullName);
            }

            DataTable tb = new DataTable(tp.Name);
            RegFormat rf;

            foreach (FieldInfo fi in lt.type.GetFields())
            {
                if (!fi.IsSpecialName)
                {
                    rf = (RegFormat)Attribute.GetCustomAttribute(fi, typeof(RegFormat));
                    switch (rf._type)
                    {
                    case RegType.P9:
                        //Para evitar qualquer problema de conversão
                        //if (rf._length < 10)
                        //    tb.Columns.Add(fi.Name, typeof(int));
                        //else
                        tb.Columns.Add(fi.Name, typeof(string));
                        break;

                    case RegType.PD:
                        tb.Columns.Add(fi.Name, typeof(DateTime));
                        break;

                    default:
                        tb.Columns.Add(fi.Name, typeof(string));
                        break;
                    }
                }
            }
            IReg reg;

//            int n = 0;
            foreach (object obj in itens)
            {
                if (obj.GetType().GetInterface("IReg") != null)
                {
                    reg = (IReg)obj;
                    if (reg.NameType == tp)
                    {
                        tb.Rows.Add(reg.Values);
                        //if (++n % 100 == 0)
                        //    Thread.CurrentThread.MonitorStatus(100,"Layout {0}: {1}/{2}", reg.NameType, n, itens.Count);
                    }
                }
            }
            return(tb);
        }
Пример #2
0
        /// <summary>
        /// Define um modelo de layout
        /// </summary>
        /// <param name="eTypes">Tipos de enumeradores de estruturra</param>
        public Layout(params Type[] eTypes)
        {
            Data  = new SortedList <string, object>();
            type  = new List <LayoutType>();
            itens = new List <IReg>();

            AddTypes(eTypes);

            if (type.Count > 0)
            {
                LastRegType = type[0];
            }
        }
Пример #3
0
 /// <summary>
 /// Achar o tipo de registro de acordo com o tipo de linha
 /// </summary>
 protected bool FindReg(ref IReg reg, string cLine)
 {
     if (reg == null || !LastRegType.layout.IsThis(cLine))
     {
         foreach (LayoutType lt in type)
         {
             if (lt.layout.IsThis(cLine))
             {
                 // Define o ultimo tipo, como o atual encontrado
                 LastRegType = lt;
                 reg         = (IReg)Activator.CreateInstance(LastRegType.reg);
                 return(true);
             }
         }
         // Não Achou
         return(false);
     }
     reg = reg.Copy();
     // É igual ao ultimo tipo (LastRegType)
     return(true);
 }