public Assembly DynamicAssembly(DataSet dataSet) { //创建编译器实例。 CSharpCodeProvider provider = new CSharpCodeProvider(); //设置编译参数。 CompilerParameters paras = new CompilerParameters(); paras.GenerateExecutable = false; paras.GenerateInMemory = true; //添加引用 paras.ReferencedAssemblies.Add("System.dll"); //创建动态代码。 StringBuilder classSource = new StringBuilder(); classSource.Append("public class DynamicClass/r/n"); classSource.Append("{/r/n"); //创建属性。 for (int i = 0; i < dataSet.Tables["Common"].Rows.Count; i++) { classSource.Append(propertyString(dataSet.Tables["Common"].Rows[i])); } classSource.Append("}/r/n"); //显示下拉框 classSource.Append(ChoiceString()); //编译代码。 CompilerResults result = provider.CompileAssemblyFromSource(paras, classSource.ToString()); //是否出现错误 if (result.Errors.Count > 0) { foreach (CompilerError ce in result.Errors) { throw new Exception(ce.ToString()); } } //获取编译后的程序集。 return result.CompiledAssembly; } #region 属性生成 /// <summary> /// 根据字段的属性生成相应的程序代码,从数据库获取字段 /// </summary> /// <param name="dataRow">字段的属性</param> /// <returns>程序代码</returns> private string propertyString(System.Data.DataRow dataRow) { StringBuilder sbProperty = new StringBuilder(); string property1, property2, property3, property4, property5, property6, property7; propertyZDMC = dataRow["1"].ToString(); propertyZDLX = dataRow["2"].ToString(); propertySFZD = dataRow["3"].ToString(); propertyFZMC = dataRow["4"].ToString(); propertyKXZ = dataRow["5"].ToString(); propertyMRZ = dataRow["6"].ToString(); propertyZS = dataRow["7"].ToString(); if (propertyZDLX == "字符串" || propertyZDLX == "VARCHAR2") { //变量定义 sbProperty.Append(" private string _" + propertyZDMC + ";/r/n"); sbProperty.Append(" [/r/n"); //可选值 if (propertyKXZ != "") { propertyKXZ = propertyKXZ.Replace(",", "/",/""); sbProperty.Append(" StrList(new string[] { /"" + propertyKXZ + "/" }),/r/n"); sbProperty.Append(" System.ComponentModel.TypeConverter(typeof(StrChoice)),/r/n"); } //分组设置 if (propertyFZMC != "") { sbProperty.Append(" System.ComponentModel.CategoryAttribute(/"" + propertyFZMC + "/"),/r/n"); } //是否只读 if (propertySFZD == "0") { sbProperty.Append(" System.ComponentModel.ReadOnlyAttribute(false),/r/n"); } else { sbProperty.Append(" System.ComponentModel.ReadOnlyAttribute(true),/r/n"); } //默认值 if (propertyMRZ != "") { sbProperty.Append(" System.ComponentModel.DefaultValueAttribute(/"" + propertyMRZ + "/"),/r/n"); } //注释 sbProperty.Append(" System.ComponentModel.DescriptionAttribute(/"" + propertyZS + "/")/r/n"); sbProperty.Append(" ]/r/n"); //属性定义 sbProperty.Append(" public string " + propertyZDMC + "/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" get/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" return _" + propertyZDMC + ";/r/n"); sbProperty.Append(" }/r/n"); sbProperty.Append(" set/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" _" + propertyZDMC + "=value;/r/n"); sbProperty.Append(" }/r/n"); sbProperty.Append(" }/r/n/r/n"); } else if (propertyZDLX == "数字" || propertyZDLX == "NUMBER") { //变量定义 sbProperty.Append(" private double _" + propertyZDMC + ";/r/n"); sbProperty.Append(" [/r/n"); //可选值 if (propertyKXZ != "") { sbProperty.Append(" DoubleList(new double[] { " + propertyKXZ + " }),/r/n"); sbProperty.Append(" System.ComponentModel.TypeConverter(typeof(DoubleChoice)),/r/n"); } //分组设置 if (propertyFZMC != "") { sbProperty.Append(" System.ComponentModel.CategoryAttribute(/"" + propertyFZMC + "/"),/r/n"); } //是否只读 if (propertySFZD == "0") { sbProperty.Append(" System.ComponentModel.ReadOnlyAttribute(false),/r/n"); } else { sbProperty.Append(" System.ComponentModel.ReadOnlyAttribute(true),/r/n"); } //默认值 if (propertyMRZ != "") { sbProperty.Append(" System.ComponentModel.DefaultValueAttribute(" + propertyMRZ + "),/r/n"); } //注释 sbProperty.Append(" System.ComponentModel.DescriptionAttribute(/"" + propertyZS + "/")/r/n"); sbProperty.Append(" ]/r/n"); //属性定义 sbProperty.Append(" public double " + propertyZDMC + "/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" get/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" return _" + propertyZDMC + ";/r/n"); sbProperty.Append(" }/r/n"); sbProperty.Append(" set/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" _" + propertyZDMC + "=value;/r/n"); sbProperty.Append(" }/r/n"); sbProperty.Append(" }/r/n/r/n"); } else if (propertyZDLX == "日期" || propertyZDLX == "DATE") { //变量定义 sbProperty.Append(" private System.DateTime _" + propertyZDMC + ";/r/n"); sbProperty.Append(" [/r/n"); //分组设置 if (propertyFZMC != "") { sbProperty.Append(" System.ComponentModel.CategoryAttribute(/"" + propertyFZMC + "/"),/r/n"); } //是否只读 if (propertySFZD == "0") { sbProperty.Append(" System.ComponentModel.ReadOnlyAttribute(false),/r/n"); } else { sbProperty.Append(" System.ComponentModel.ReadOnlyAttribute(true),/r/n"); } //注释 sbProperty.Append(" System.ComponentModel.DescriptionAttribute(/"" + propertyZS + "/")/r/n"); sbProperty.Append(" ]/r/n"); //属性定义 sbProperty.Append(" public System.DateTime " + propertyZDMC + "/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" get/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" return _" + propertyZDMC + ";/r/n"); sbProperty.Append(" }/r/n"); sbProperty.Append(" set/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" _" + propertyZDMC + "=value;/r/n"); sbProperty.Append(" }/r/n"); sbProperty.Append(" }/r/n/r/n"); } else if (propertyZDLX == "布尔" || propertyZDLX == "BOOL") { //变量定义 sbProperty.Append(" private bool _" + propertyZDMC + ";/r/n"); sbProperty.Append(" [/r/n"); //分组设置 if (propertyFZMC != "") { sbProperty.Append(" System.ComponentModel.CategoryAttribute(/"" + propertyFZMC + "/"),/r/n"); } //是否只读 if (propertySFZD == "0") { sbProperty.Append(" System.ComponentModel.ReadOnlyAttribute(false),/r/n"); } else { sbProperty.Append(" System.ComponentModel.ReadOnlyAttribute(true),/r/n"); } //默认值 if (propertyMRZ != "") { sbProperty.Append(" System.ComponentModel.DefaultValueAttribute(" + propertyMRZ + "),/r/n"); } //注释 sbProperty.Append(" System.ComponentModel.DescriptionAttribute(/"" + propertyZS + "/")/r/n"); sbProperty.Append(" ]/r/n"); //属性定义 sbProperty.Append(" public bool " + propertyZDMC + "/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" get/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" return _" + propertyZDMC + ";/r/n"); sbProperty.Append(" }/r/n"); sbProperty.Append(" set/r/n"); sbProperty.Append(" {/r/n"); sbProperty.Append(" _" + propertyZDMC + "=value;/r/n"); sbProperty.Append(" }/r/n"); sbProperty.Append(" }/r/n/r/n"); } return sbProperty.ToString(); } #endregion