private void FillTableItems(KeyValuePair <string, string> database, DatabaseTreeViewItem parentItem, IList <string> nameList) { parentItem.Items.Clear(); if (DescriptionCache != null) { var dbdesc = DescriptionCache.Where(dc => dc.Parent == null && dc.Object == null).Select(dc => dc.Description).SingleOrDefault(); if (!string.IsNullOrWhiteSpace(dbdesc)) { if (parentItem.Parent is DatabaseTreeViewItem) { var dbItem = (DatabaseTreeViewItem)parentItem.Parent; dbItem.ToolTip = dbItem.ToolTip.ToString() + Environment.NewLine + dbdesc; } } } using (var _repository = RepoHelper.CreateRepository(database.Value)) { var columns = _repository.GetAllColumns(); foreach (var table in nameList) { if (!Properties.Settings.Default.DisplayDescriptionTable && table.Equals("__ExtendedProperties")) { continue; } var item = TreeViewHelper.CreateTreeViewItemWithImage(table, "../Resources/table.png", true, null, true); item.ContextMenu = new TableContextMenu(new MenuCommandParameters { Connectionstring = database.Value, Name = table, MenuItemType = MenuCommandParameters.MenuType.Table, Caption = database.Key }, this); item.ToolTip = table; if (DescriptionCache != null) { var desc = DescriptionCache.Where(dc => dc.Parent == null && dc.Object == table).Select(dc => dc.Description).SingleOrDefault(); if (!string.IsNullOrWhiteSpace(desc)) { item.ToolTip = desc; } } var tableColumns = (from col in columns where col.TableName == table select col).ToList <Column>(); parentItem.Items.Add(item); item.Expanded += (s, e) => GetTableColumns(s, e, tableColumns, database); } } }
private void GetTableColumns(object sender, RoutedEventArgs args, List <Column> columns, KeyValuePair <string, string> database) { var viewItem = sender as DatabaseTreeViewItem; // Prevent loading again and again if (viewItem != null && (viewItem.Items.Count > 0 && viewItem.Items[0].ToString() == "Loading...")) { var tableName = viewItem.MetaData; viewItem.Items.Clear(); using (var _repository = RepoHelper.CreateRepository(database.Value)) { // If the node is being refreshed by the user, make sure to reload the columns instead of using the cached ones from the // previous load of the entire database tree if (viewItem.IsRefreshing) { columns = _repository.GetAllColumns().Where(x => x.TableName == tableName).ToList(); } var pkList = _repository.GetAllPrimaryKeys().Where(p => p.TableName == tableName); var pks = (from pk in pkList select pk.ColumnName).ToList <string>(); var fkList = _repository.GetAllForeignKeys().Where(fk => fk.ConstraintTableName == tableName).ToList(); foreach (var column in columns) { var display = column.ShortType; var image = "../Resources/column.png"; var constraints = (from fk in fkList where fk.Columns.Contains(column.ColumnName) select fk); if (constraints.Count() > 0) { display = "FK, " + display; image = "../Resources/fk.png"; } if (pks.Contains(column.ColumnName)) { display = "PK, " + display; image = "../Resources/key.png"; } string nullable = " not null)"; if (column.IsNullable == YesNoOption.YES) { nullable = " null)"; } display = column.ColumnName + " (" + display + nullable; var i = TreeViewHelper.CreateTreeViewItemWithImage(display, image, false); i.ContextMenu = new ColumnContextMenu(new MenuCommandParameters { Description = tableName, Connectionstring = database.Value, Name = column.ColumnName, MenuItemType = MenuCommandParameters.MenuType.Table }, this); i.ToolTip = column.ColumnName; if (DescriptionCache != null) { var desc = DescriptionCache.Where(dc => dc.Parent == tableName && dc.Object == column.ColumnName).Select(dc => dc.Description).SingleOrDefault(); if (!string.IsNullOrWhiteSpace(desc)) { i.ToolTip = desc; } } viewItem.Items.Add(i); } var indexesItem = TreeViewHelper.CreateTreeViewItemWithImage("Indexes", "../Resources/folder.png", true); indexesItem.Items.Clear(); string oldName = string.Empty; foreach (var primaryKey in pkList) { if (oldName != primaryKey.KeyName) { var display = primaryKey.KeyName + " (Primary Key)"; var indexItem = TreeViewHelper.CreateTreeViewItemWithImage(display, "../Resources/index.png", false); indexItem.ContextMenu = new IndexContextMenu(new MenuCommandParameters { Connectionstring = database.Value, Name = viewItem.MetaData, MenuItemType = MenuCommandParameters.MenuType.Table, Caption = primaryKey.KeyName }, this); indexItem.ToolTip = primaryKey.KeyName; indexesItem.Items.Add(indexItem); oldName = primaryKey.KeyName; } } oldName = string.Empty; var indexes = _repository.GetIndexesFromTable(viewItem.MetaData); foreach (var index in indexes) { if (oldName != index.IndexName) { var display = string.Empty; if (index.Unique) { display = index.IndexName + " (Unique)"; } else { display = index.IndexName + " (Non-Unique)"; } var indexItem = TreeViewHelper.CreateTreeViewItemWithImage(display, "../Resources/index.png", false); indexItem.ContextMenu = new IndexContextMenu(new MenuCommandParameters { Connectionstring = database.Value, Name = viewItem.MetaData, MenuItemType = MenuCommandParameters.MenuType.Table, Caption = index.IndexName }, this); indexItem.ToolTip = index.IndexName; indexesItem.Items.Add(indexItem); oldName = index.IndexName; } } viewItem.Items.Add(indexesItem); } } args.Handled = true; }