コード例 #1
0
        private static Type CreateRowType(GenericParsing.GenericParser parser)
        {
            // create a dynamic assembly and module
            AssemblyName assemblyName = new AssemblyName();

            assemblyName.Name = "tmpAssembly";
            AssemblyBuilder assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
            ModuleBuilder   module          = assemblyBuilder.DefineDynamicModule("tmpModule");

            // create a new type builder
            TypeBuilder typeBuilder = module.DefineType("BindableRowCellCollection", TypeAttributes.Public | TypeAttributes.Class);

            for (int col = 0; col < parser.ColumnCount; col++)
            {
                string propertyName = parser.GetColumnName(col);

                // Generate a private field
                FieldBuilder field = typeBuilder.DefineField("_" + propertyName, typeof(string), FieldAttributes.Private);

                // Generate a public property
                PropertyBuilder property = typeBuilder.DefineProperty(propertyName, PropertyAttributes.None, typeof(string), new Type[] { typeof(string) });

                MethodAttributes GetSetAttr = MethodAttributes.Public | MethodAttributes.HideBySig;

                // Define the "get" accessor method for current private field.
                MethodBuilder currGetPropMthdBldr =
                    typeBuilder.DefineMethod("get_value",
                                             GetSetAttr,
                                             typeof(string),
                                             Type.EmptyTypes);

                // Intermediate Language stuff...
                ILGenerator currGetIL = currGetPropMthdBldr.GetILGenerator();
                currGetIL.Emit(OpCodes.Ldarg_0);
                currGetIL.Emit(OpCodes.Ldfld, field);
                currGetIL.Emit(OpCodes.Ret);

                // Define the "set" accessor method for current private field.
                MethodBuilder currSetPropMthdBldr =
                    typeBuilder.DefineMethod("set_value",
                                             GetSetAttr,
                                             null,
                                             new Type[] { typeof(string) });

                // Again some Intermediate Language stuff...
                ILGenerator currSetIL = currSetPropMthdBldr.GetILGenerator();
                currSetIL.Emit(OpCodes.Ldarg_0);
                currSetIL.Emit(OpCodes.Ldarg_1);
                currSetIL.Emit(OpCodes.Stfld, field);
                currSetIL.Emit(OpCodes.Ret);

                // Last, we must map the two methods created above to our PropertyBuilder to
                // their corresponding behaviors, "get" and "set" respectively.
                property.SetGetMethod(currGetPropMthdBldr);
                property.SetSetMethod(currSetPropMthdBldr);
            }

            return(typeBuilder.CreateType());
        }
コード例 #2
0
        private object UploadFile(string file, bool hasHeader, string delimiter)
        {
            object retVal = null;

            try
            {
                using (GenericParsing.GenericParser rawFileParser = new GenericParsing.GenericParser(file))
                {
                    rawFileParser.SetDataSource(file);
                    rawFileParser.ColumnDelimiter      = delimiter == "Comma" ? ',' : '\t';
                    rawFileParser.FirstRowHasHeader    = hasHeader;
                    rawFileParser.SkipStartingDataRows = 10;
                    rawFileParser.MaxBufferSize        = 4096;
                    rawFileParser.MaxRows       = -1;
                    rawFileParser.TextQualifier = '\"';

                    Type rowType = null;
                    rawFileParser.Read();
                    rowType = CreateRowType(rawFileParser);

                    Type[] types         = new Type[] { rowType };
                    Type   listType      = typeof(List <>);
                    Type   dataTableType = listType.MakeGenericType(types);
                    object allData       = Activator.CreateInstance(dataTableType);

                    do
                    {
                        object row = null;
                        row = Activator.CreateInstance(rowType);

                        for (int col = 0; col < rawFileParser.ColumnCount; col++)
                        {
                            string propertyName = rawFileParser.GetColumnName(col);
                            rowType.GetProperty(propertyName).SetValue(row, rawFileParser[propertyName]);
                        }

                        dataTableType.GetMethod("Add").Invoke(allData, new object[] { row });
                    } while (rawFileParser.Read());

                    retVal = allData;
                }
            }
            catch (Exception ex)
            {
                Odp.Data.ErrorLog.WriteError(ex.Message);
            }

            return(retVal);
        }
コード例 #3
0
        private object UploadFile(string file, bool hasHeader, string delimiter)
        {
            object retVal = null;

            try
            {
                using (GenericParsing.GenericParser rawFileParser = new GenericParsing.GenericParser(file))
                {
                    rawFileParser.SetDataSource(file);
                    rawFileParser.ColumnDelimiter = delimiter == "Comma" ? ',' : '\t';
                    rawFileParser.FirstRowHasHeader = hasHeader;
                    rawFileParser.SkipStartingDataRows = 10;
                    rawFileParser.MaxBufferSize = 4096;
                    rawFileParser.MaxRows = -1;
                    rawFileParser.TextQualifier = '\"';

                    Type rowType = null;
                    rawFileParser.Read();
                    rowType = CreateRowType(rawFileParser);

                    Type[] types = new Type[] { rowType };
                    Type listType = typeof(List<>);
                    Type dataTableType = listType.MakeGenericType(types);
                    object allData = Activator.CreateInstance(dataTableType);

                    do
                    {
                        object row = null;
                        row = Activator.CreateInstance(rowType);

                        for (int col = 0; col < rawFileParser.ColumnCount; col++)
                        {
                            string propertyName = rawFileParser.GetColumnName(col);
                            rowType.GetProperty(propertyName).SetValue(row, rawFileParser[propertyName]);
                        }

                        dataTableType.GetMethod("Add").Invoke(allData, new object[] { row });

                    } while (rawFileParser.Read());

                    retVal = allData;
                }
            }
            catch (Exception ex)
            {
                Odp.Data.ErrorLog.WriteError(ex.Message);
            }

            return retVal;
        }