public string Save(string path, cfLangType clt, KeelKit.Generators.BaseGengerator.DGetFileNames getfilename) { CodeDomProvider provider = BaseGengerator.GetProvider(clt); string filename = getfilename != null?getfilename(path, provider.FileExtension) : GetFileNames(path, provider.FileExtension); IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(filename, false, Encoding.UTF8), " "); provider.GenerateCodeFromCompileUnit(ccu, tw, new CodeGeneratorOptions()); tw.Close(); string context = System.IO.File.ReadAllText(filename, Encoding.UTF8); if (!context.Contains("<auto-generated>") && ccu.Namespaces.Count > 0) { ccu.Namespaces[0].Comments.Clear(); ccu.Namespaces[0].Comments.Add(new CodeCommentStatement(BaseGengerator.AddKeelKitInfo())); tw = new IndentedTextWriter(new StreamWriter(filename, false, Encoding.UTF8), " "); provider.GenerateCodeFromCompileUnit(ccu, tw, new CodeGeneratorOptions()); tw.Close(); } return(filename); }
public string AddMapping(SQLTableInfo item) { if (item != null) { Type t = Keel.DB.Common.NowDataBase.PasteType(item.t_fieldtype); string fieldname = BaseGengerator.ClearBadChars(item.t_fieldname); string m = ""; #region 类型映射 string ext = ""; switch (Type.GetTypeCode(t)) { case TypeCode.Boolean: m = Mapping_Boolean; bool b = item.t_fielddefaultvalue.Contains("1"); m = m.Replace("_defaultvalue_", b.ToString()); ext = "chk"; break; case TypeCode.DBNull: break; case TypeCode.DateTime: m = Mapping_DateTime; string strxdt = item.t_fielddefaultvalue; if (strxdt.StartsWith("(") && strxdt.EndsWith(")")) { string[] ffdt = strxdt.Split("'".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (ffdt.Length >= 2) { strxdt = ffdt[1]; } } m = m.Replace("_defaultvalue_", strxdt); ext = "dte"; break; case TypeCode.Empty: break; case TypeCode.Char: case TypeCode.String: m = Mapping_String; string strx = item.t_fielddefaultvalue; if (strx.StartsWith("(") && strx.EndsWith(")")) { string[] ff = strx.Split("'".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (ff.Length >= 2) { strx = ff[1]; } } m = m.Replace("_defaultvalue_", strx); ext = "txt"; break; case TypeCode.Decimal: case TypeCode.Byte: case TypeCode.Double: case TypeCode.Int16: case TypeCode.Int32: case TypeCode.Int64: case TypeCode.SByte: case TypeCode.Single: case TypeCode.UInt16: case TypeCode.UInt32: case TypeCode.UInt64: m = Mapping_Decimal; decimal d; string bxf = ""; if (item.t_fielddefaultvalue != "" && decimal.TryParse(item.t_fielddefaultvalue.Replace("(", "").Replace(")", ""), out d)) { bxf = d.ToString(); } m = m.Replace("_defaultvalue_", bxf); ext = "dec"; break; case TypeCode.Object: default: m = Mapping_Unknow; m = m.Replace("_defaultvalue_", item.t_fielddefaultvalue); ext = "ukw"; break; } #endregion string _name_ = "keelctl_" + ext + "_" + fieldname; m = m.Replace("_name_", _name_); m = m.Replace("_desc_", item.t_fielddesc.Trim() != "" ? item.t_fielddesc : item.t_fieldname); m = m.Replace("_lenght_", item.t_fieldlenght.ToString()); m = m.Replace("_bitcount_", item.t_fieldbitcount.ToString()); CtlHtml.AppendLine(m); return(_name_); } else { return(null); } }
public void Gengerator(string cfNameSpace, string[] tables) { #region 生成命名空间引用 cns = new CodeNamespace(cfNameSpace); cns.Imports.Add(new CodeNamespaceImport("System")); cns.Imports.Add(new CodeNamespaceImport("System.Collections.Generic")); cns.Imports.Add(new CodeNamespaceImport("System.ComponentModel")); cns.Imports.Add(new CodeNamespaceImport("System.Data")); cns.Imports.Add(new CodeNamespaceImport("System.Text")); cns.Imports.Add(new CodeNamespaceImport("Keel")); cns.Comments.Add(new CodeCommentStatement(BaseGengerator.AddKeelKitInfo(false))); #endregion #region 生成类头部 ctd = new CodeTypeDeclaration("KeelEntities"); ctd.IsClass = true; ctd.Attributes = (ctd.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Private; ctd.IsClass = true; CodeTypeReference _KeelContext_type1 = new CodeTypeReference(typeof(Keel.KeelContext)); ctd.BaseTypes.Add(_KeelContext_type1); #endregion #region 生成类的实例化部分 // // Field idb // CodeMemberField _idb_field1 = new CodeMemberField(); _idb_field1.Attributes = (_idb_field1.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Private; _idb_field1.Name = "idb"; CodeTypeReference _IDatabase_type1 = new CodeTypeReference("IDatabase"); _idb_field1.Type = _IDatabase_type1; ctd.Members.Add(_idb_field1); // // Field dbo // CodeMemberField _dbo_field1 = new CodeMemberField(); _dbo_field1.Attributes = (_dbo_field1.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Private; _dbo_field1.Name = "dbo"; CodeTypeReference _DBOperator1_type1 = new CodeTypeReference("DBOperator"); _DBOperator1_type1.TypeArguments.Add(typeof(Keel.IDatabase)); _dbo_field1.Type = _DBOperator1_type1; ctd.Members.Add(_dbo_field1); // // Constructor() // CodeConstructor __ctor_ctor1 = new CodeConstructor(); __ctor_ctor1.Attributes = (__ctor_ctor1.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Public; CodePropertyReferenceExpression _prop1 = new CodePropertyReferenceExpression(); _prop1.PropertyName = "NowDataBase"; CodeTypeReferenceExpression _ref1 = new CodeTypeReferenceExpression(); CodeTypeReference _Keel_DB_Common_type1 = new CodeTypeReference(typeof(Keel.DB.Common)); _ref1.Type = _Keel_DB_Common_type1; _prop1.TargetObject = _ref1; __ctor_ctor1.ChainedConstructorArgs.Add(_prop1); ctd.Members.Add(__ctor_ctor1); // // Constructor(IDatabase _idb) // CodeConstructor __ctor_ctor2 = new CodeConstructor(); __ctor_ctor2.Attributes = (__ctor_ctor2.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Public; CodeTypeReference _IDatabase_type2 = new CodeTypeReference(typeof(Keel.IDatabase)); CodeParameterDeclarationExpression __idb_arg1 = new CodeParameterDeclarationExpression(_IDatabase_type2, "_idb"); __idb_arg1.Direction = FieldDirection.In; __idb_arg1.Name = "_idb"; CodeTypeReference _IDatabase_type3 = new CodeTypeReference(typeof(Keel.IDatabase)); __idb_arg1.Type = _IDatabase_type3; __ctor_ctor2.Parameters.Add(__idb_arg1); CodeAssignStatement _assign1 = new CodeAssignStatement(); CodeFieldReferenceExpression _field1 = new CodeFieldReferenceExpression(); _field1.FieldName = "idb"; CodeThisReferenceExpression _this1 = new CodeThisReferenceExpression(); _field1.TargetObject = _this1; _assign1.Left = _field1; CodeVariableReferenceExpression _arg1 = new CodeVariableReferenceExpression(); _arg1.VariableName = "_idb"; _assign1.Right = _arg1; __ctor_ctor2.Statements.Add(_assign1); ctd.Members.Add(__ctor_ctor2); // // Constructor(DBOperator`1 _odb) // CodeConstructor __ctor_ctor3 = new CodeConstructor(); __ctor_ctor3.Attributes = (__ctor_ctor3.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Public; CodeTypeReference _DBOperator1_type2 = new CodeTypeReference("DBOperator"); _DBOperator1_type2.TypeArguments.Add(typeof(Keel.IDatabase)); CodeParameterDeclarationExpression __odb_arg1 = new CodeParameterDeclarationExpression(_DBOperator1_type2, "_odb"); __odb_arg1.Direction = FieldDirection.In; __odb_arg1.Name = "_odb"; CodeTypeReference _DBOperator1_type3 = new CodeTypeReference("DBOperator"); _DBOperator1_type3.TypeArguments.Add(typeof(Keel.IDatabase)); __odb_arg1.Type = _DBOperator1_type3; __ctor_ctor3.Parameters.Add(__odb_arg1); CodeAssignStatement _assign2 = new CodeAssignStatement(); CodeFieldReferenceExpression _field2 = new CodeFieldReferenceExpression(); _field2.FieldName = "dbo"; CodeThisReferenceExpression _this2 = new CodeThisReferenceExpression(); _field2.TargetObject = _this2; _assign2.Left = _field2; CodeVariableReferenceExpression _arg2 = new CodeVariableReferenceExpression(); _arg2.VariableName = "_odb"; _assign2.Right = _arg2; __ctor_ctor3.Statements.Add(_assign2); ctd.Members.Add(__ctor_ctor3); #endregion foreach (var item in tables) { AddItem(item); } cns.Types.Add(ctd); ccu.Namespaces.Add(cns); }
public static void DevXC(WinFormBaseGengerator wf, int dis, ref bool lr, ref int sum, ref int maxwinwidth, ref int maxwinheight, SQLTableInfo item) { sum++; IComponent iclbl = wf.AddControl(typeof( #if ENABLEDevExpress LabelControl #else Label #endif ), "lbl" + BaseGengerator.ClearBadChars(item.t_fieldname)); (iclbl as #if ENABLEDevExpress LabelControl #else Label #endif ).Text = ((item.t_fielddesc != null && item.t_fielddesc as string != "") ? item.t_fielddesc : item.t_fieldname) as string; IComponent ictxt; Type t = Keel.DB.Common.NowDataBase.PasteType(item.t_fieldtype); if (t.Equals(typeof(string))) { ictxt = wf.AddControl(typeof( #if ENABLEDevExpress TextEdit #else TextBox #endif ), "txt" + BaseGengerator.ClearBadChars(item.t_fieldname)); } else if (t.Equals(typeof(DateTime))) { ictxt = wf.AddControl(typeof( #if ENABLEDevExpress DateEdit #else DateTimePicker #endif ), "dtp" + BaseGengerator.ClearBadChars(item.t_fieldname)); } else if (t.Equals(typeof(decimal)) || t.Equals(typeof(Int32)) || t.Equals(typeof(float)) || t.Equals(typeof(double)) || t.Equals(typeof(byte)) || t.Equals(typeof(int)) || t.Equals(typeof(Int16)) || t.Equals(typeof(Int64)) ) { ictxt = wf.AddControl(typeof( #if ENABLEDevExpress SpinEdit #else NumericUpDown #endif ), "nud" + BaseGengerator.ClearBadChars(item.t_fieldname)); } else { ictxt = wf.AddControl(typeof( #if ENABLEDevExpress TextEdit #else TextBox #endif ), "txt_unsupport_type_" + BaseGengerator.ClearBadChars(item.t_fieldname)); } int y; int xxx = Math.DivRem(sum, 2, out y) + y; // (ictxt as Control).Tag = item.t_fieldname; (ictxt as Control).TabIndex = (int)item.t_fieldindex; switch (lr) { default: case true: (iclbl as #if ENABLEDevExpress LabelControl #else Label #endif ).Location = new Point(20 + 300, dis * xxx); (ictxt as Control).Location = new Point(20 + 300 + (iclbl as #if ENABLEDevExpress LabelControl #else Label #endif ).Width + dis, dis * xxx); int fw = (ictxt as Control).Left + (ictxt as Control).Width; int fh = (ictxt as Control).Top + (ictxt as Control).Height; maxwinwidth = maxwinwidth > fw ? maxwinwidth : fw; maxwinheight = maxwinheight > fh ? maxwinheight : fh; lr = false; break; case false: (iclbl as #if ENABLEDevExpress LabelControl #else Label #endif ).Location = new Point(20, dis * xxx); (ictxt as Control).Location = new Point(20 + (iclbl as #if ENABLEDevExpress LabelControl #else Label #endif ).Width + dis, dis * xxx); lr = true; break; } }