void LoadTables(Database db, SourceGrid.Grid grid, string title, string nameTitle, NodeBase tableViewNode) { var tc = new TimerCount("LoadTables"); grid.BorderStyle = BorderStyle.FixedSingle; grid.SelectionMode = SourceGrid.GridSelectionMode.Cell; grid.ClipboardMode = SourceGrid.ClipboardMode.All; grid.Rows.Clear(); grid.Columns.Clear(); grid.ColumnsCount = 11; grid.FixedRows = 1; grid.FixedColumns = 2; //int r = 0; SourceGrid.Cells.Views.Cell categoryView = new SourceGrid.Cells.Views.Cell(); categoryView.Background = new DevAge.Drawing.VisualElements.BackgroundLinearGradient(Color.Gainsboro, Color.WhiteSmoke, 0); categoryView.ForeColor = Color.Black; categoryView.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter; categoryView.Border = DevAge.Drawing.RectangleBorder.NoBorder; categoryView.Font = new Font(Font, FontStyle.Bold); //grid.Rows.Insert(r); //grid[r, 0] = new SourceGrid.Cells.Cell(title); //grid[r, 0].View = categoryView; //grid[r, 0].ColumnSpan = grid.ColumnsCount; //r++; int r = 0; grid.Rows.Insert(r); headerView = new SourceGrid.Cells.Views.Cell(); //headerView.Background = new DevAge.Drawing.VisualElements.BackgroundLinearGradient(Color.Gainsboro, Color.WhiteSmoke, 0); headerView.ForeColor = Color.FromKnownColor(KnownColor.Black); headerView.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter; headerView.Border = DevAge.Drawing.RectangleBorder.NoBorder; headerView.Font = new Font(Font, FontStyle.Bold); addHeader(grid, Col.SchemaName, "Schema Name", 100); addHeader(grid, Col.TableName, "Table Name", 150); addHeader(grid, Col.DataClassName, "DataClass Name", 150); addHeader(grid, Col.BusinessClassName, "BusinessClass Name", 150); addHeader(grid, Col.EnumColumnName, "Enum Column Name", 150); addHeader(grid, Col.EnumColumnId, "Enum Column Id", 150); addHeader(grid, Col.EnumName, "Enum Name", 150); addHeader(grid, Col.EnumAttributes, "Enum Attributes", 150); addHeader(grid, Col.SequenceColumn, "Sequence Column", 150); addHeader(grid, Col.SequenceName, "Sequence Name", 150); addHeader(grid, Col.Attributes, "Attributes", 300); //addHeader(grid, 5, "Sub-directory", 150); for (int c = 0; c < grid.ColumnsCount; c++) { grid[r, c].View = categoryView; } Dictionary <string, GenTable> objects = new Dictionary <string, GenTable>(); tc.Next("GetSequences"); var sequences = db.Provider.GetSequences(); r++; foreach (NodeTable node in tableViewNode.Nodes) { progress.SetProgress(); //progress.SetProgress("Processing table" + node.Text + " ..."); var gtb = node.Item; if (gtb.TableName == "status") { ToString(); } objects.Add(gtb.FullName, null); tc.Next(gtb.TableName); try { //tc.Next("GetTableInfo"); //var tb = db.GetTableInfo(gtb.SchemaName, gtb.TableName); var tbCols = db.GetColumnsInfo(gtb.SchemaName, gtb.TableName); if (tbCols == null) // objeto inválido { continue; } Dictionary <string, GenColumn> dict = new Dictionary <string, GenColumn>(StringComparer.InvariantCultureIgnoreCase); foreach (var col in gtb.Columns) { if (!dict.ContainsKey(col.ColumnName)) { dict.Add(col.ColumnName, col); } } foreach (var col in tbCols) { GenColumn gcol; if (dict.TryGetValue(col.ColumnName, out gcol)) { dict.Remove(col.ColumnName); // remove as existentes // se existe, mas o banco é required, força required; if (!col.IsNullable) { gcol.IsRequired = true; } // o tipo sempre vem do banco gcol.DataType = col.DataTypeDotNet; } else { gcol = new GenColumn(); gcol.ColumnName = col.ColumnName; gcol.PropertyName = null; gcol.Description = null; gcol.IsRequired = !col.IsNullable; gcol.DataType = col.DataTypeDotNet; gtb.Columns.Add(gcol); } } // se sobrou no dict, é pq as colunas foram apagadas da table, ou renomedas foreach (var pair in dict) { gtb.Columns.RemoveAll(p => p.ColumnName.EqualsICIC(pair.Key)); } grid.Rows.Insert(r); //grid.Rows.SetHeight(r, 40); //grid.Rows.AutoSizeRow(r); SourceGrid.GridRow row = grid.Rows[r]; // tags row.AutoSizeMode = SourceGrid.AutoSizeMode.EnableAutoSize | SourceGrid.AutoSizeMode.EnableStretch; row.Tag = node; gtb.Tag = tbCols; node.Tag = row; grid[r, Col.SchemaName] = new SourceGrid.Cells.Cell(gtb.SchemaName); grid[r, Col.TableName] = new SourceGrid.Cells.Cell(gtb.TableName); SourceGrid.Cells.Editors.EditorBase ed; ed = SourceGrid.Cells.Editors.Factory.Create(typeof(string)); ed.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey; grid[r, Col.DataClassName] = new SourceGrid.Cells.Cell(gtb.DataClassName, ed); ed = SourceGrid.Cells.Editors.Factory.Create(typeof(string)); ed.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey; grid[r, Col.BusinessClassName] = new SourceGrid.Cells.Cell(gtb.BusinessClassName, ed); // EnumColumnName SourceGrid.Cells.Editors.ComboBox cbEditor = new SourceGrid.Cells.Editors.ComboBox(typeof(string)); var cols = (from c in tbCols where c.DataTypeDotNet.ToLower().Contains("string") orderby c.ColumnName select c.ColumnName).ToList(); if (!string.IsNullOrWhiteSpace(gtb.EnumColumnName)) { if (cols.FirstOrDefault(p => p.ToUpper() == gtb.EnumColumnName) == null) { gtb.EnumColumnName = gtb.EnumColumnId = gtb.EnumName = null; } } else { gtb.EnumColumnName = gtb.EnumColumnId = gtb.EnumName = null; } if (cols.Count > 0) { cols.Insert(0, ""); cbEditor.StandardValues = cols; cbEditor.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey; } else { cbEditor.EditableMode = SourceGrid.EditableMode.None; } grid[r, Col.EnumColumnName] = new SourceGrid.Cells.Cell(gtb.EnumColumnName, cbEditor); // EnumColumnId cbEditor = new SourceGrid.Cells.Editors.ComboBox(typeof(string)); cols = (from c in tbCols where numericTypes.ContainsKey(c.DataTypeDotNet.Replace("?", "")) orderby c.ColumnName select c.ColumnName).ToList(); if (cols.Count > 0) { cols.Insert(0, ""); cbEditor.StandardValues = cols; cbEditor.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey; } else { cbEditor.EditableMode = SourceGrid.EditableMode.None; } grid[r, Col.EnumColumnId] = new SourceGrid.Cells.Cell(gtb.EnumColumnId, cbEditor); // EnumName ed = SourceGrid.Cells.Editors.Factory.Create(typeof(string)); ed.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey; grid[r, Col.EnumName] = new SourceGrid.Cells.Cell(gtb.EnumName, ed); // EnumAttributes ed = SourceGrid.Cells.Editors.Factory.Create(typeof(string)); ed.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey; grid[r, Col.EnumAttributes] = new SourceGrid.Cells.Cell(gtb.EnumAttributes, ed); // SequenceColumn cbEditor = new SourceGrid.Cells.Editors.ComboBox(typeof(string)); cols = (from c in tbCols where numericTypes.ContainsKey(c.DataTypeDotNet.Replace("?", "")) orderby c.ColumnName select c.ColumnName).ToList(); if (cols.Count > 0) { cols.Insert(0, ""); cbEditor.StandardValues = cols; cbEditor.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey; } else { cbEditor.EditableMode = SourceGrid.EditableMode.None; } grid[r, Col.SequenceColumn] = new SourceGrid.Cells.Cell(gtb.SequenceColumn, cbEditor); // SequenceName cbEditor = new SourceGrid.Cells.Editors.ComboBox(typeof(string)); if (sequences.Count > 0) { cols.Insert(0, ""); cbEditor.StandardValues = (from c in sequences select c.FullName).ToList(); cbEditor.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey; } else { cbEditor.EditableMode = SourceGrid.EditableMode.None; } grid[r, Col.SequenceName] = new SourceGrid.Cells.Cell(gtb.SequenceName, cbEditor); var ed2 = SourceGrid.Cells.Editors.Factory.Create(typeof(string)); var txt = (SourceGrid.Cells.Editors.TextBox)ed2; txt.Control.Multiline = true; txt.Control.AcceptsReturn = true; //txt.Control.ScrollBars = ScrollBars.Both; //txt.Control.ImeMode = ImeMode.Disable; ed2.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey; //if (gtb.Attributes != null) //{ // gtb.Attributes = gtb.Attributes.Replace("\r\n", "\n"); // gtb.Attributes = gtb.Attributes.Replace("\n", "\r\n\r\n"); //} grid[r, Col.Attributes] = new SourceGrid.Cells.Cell(gtb.Attributes, ed2); //ed = SourceGrid.Cells.Editors.Factory.Create(typeof(string)); //ed.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey; //grid[r, 5] = new SourceGrid.Cells.Cell(gtb.SubDirectory, ed); r++; //string time = tc.ToString(); } catch (Exception ex) { //Program.ShowError(ex); } } // remove objetos não mais existentes na base de dados var objs = tableViewNode is NodeTables ? file.Parameters.Tables : file.Parameters.Views; foreach (var obj in objs.ToList()) { if (!objects.ContainsKey(obj.FullName)) { objs.Remove(obj); } } grid.Selection.FocusRowEntered += Selection_FocusRowEntered; grid.Selection.FocusRowLeaving += Selection_FocusRowLeaving; grid.AutoSizeCells(); string time = tc.ToString(); }
public static IDictionary <string, StringBuilder> GeneratorCode(GenConfig genConfig, DataRow table, DataTable genColumns, string tablePrefix = "mod_", string provider = DbProviderNames.Oracle_Managed_ODP) { IDictionary <string, StringBuilder> classDetails = new Dictionary <string, StringBuilder>(); var comments = table["tableComment"].ToString(); GenTable genTable = new GenTable(); if (comments.IsNullOrEmpty()) { genTable.Comments = genConfig.Comments; } else { genTable.Comments = comments; } if (genConfig.TablePrefix.IsNullOrEmpty()) { genConfig.TablePrefix = tablePrefix; } else { if (!genConfig.TablePrefix.EndsWith("_")) { genConfig.TablePrefix = genConfig.TablePrefix + "_"; } } genTable.TableName = table["tableName"].ToString(); string className = genTable.TableName.Replace(genConfig.TablePrefix, "").ToCamelCase(); genTable.CaseClassName = className; genTable.LowerClassName = className.Replace(className.Substring(0, 1), className.Substring(0, 1).ToLower()); IList <GenColumn> columns = new List <GenColumn>(); foreach (DataRow item in genColumns.Rows) { var column = new GenColumn(); var columnName = item["columnName"].ToString(); column.CaseAttrName = columnName.ToCamelCase(); column.LowerAttrName = column.CaseAttrName.Substring(0, 1).ToLower() + column.CaseAttrName.Substring(1); //是否主键 if ("PRI".IsCaseInsensitiveEqual(item["columnKey"].ToString()) && genTable.PrimaryKey == null) { genTable.PrimaryKey = column; } column.ColumnName = columnName; column.Comments = item["columnComment"].ToString(); column.DataType = item["dataType"].ToString(); column.AttrType = ConvertType(column.DataType, item["nullable"].ToString()); column.DataType = ConvertDbType(column.DataType, provider); column.Extra = item["extra"].ToString(); columns.Add(column); } classDetails.Add("Entity_" + genTable.CaseClassName, GeneratorEntity(genConfig, genTable, columns)); classDetails.Add("Service.Interface_I" + genTable.CaseClassName + "Service", GeneratorServiceInterface(genConfig, genTable)); classDetails.Add("Service_" + genTable.CaseClassName + "Service", GeneratorService(genConfig, genTable)); classDetails.Add("Repository_" + genTable.CaseClassName + "Repository", GeneratorRepository(genConfig, genTable)); if (genConfig.IsGeneratorMapping) { classDetails.Add("xml_mapping", GeneratorMapping(genTable, columns)); } return(classDetails); }