private void AddDb_Click(object sender, RoutedEventArgs e) { try { NpgsqlConnectionStringBuilder connectionBuilder; var addDbWindow = new AddDbWindow(); if (addDbWindow.ShowDialog() == true) { connectionBuilder = NpgsqlCommunication.CreateConnectionStringBuilder( addDbWindow.Server, addDbWindow.Port, addDbWindow.Database, addDbWindow.User, addDbWindow.Password); var connection = new NpgsqlConnection(connectionBuilder.ConnectionString); connection.Open(); if (connection.State == ConnectionState.Open) { MessageBox.Show("The connection to " + addDbWindow.Database + " was successful. Database saved", "Connected", MessageBoxButton.OK, MessageBoxImage.Information); } else { MessageBox.Show("Failed to connect to database, maybe server is closed or your input is wrong.", "Failure", MessageBoxButton.OK, MessageBoxImage.Warning); return; } connection.Close(); } else { return; } var communication = new NpgsqlCommunication(addDbWindow.Database, addDbWindow.User, addDbWindow.Server, addDbWindow.Port, addDbWindow.Password); // Create recording in the DbCourseWork.exe.Config var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var settings = configFile.ConnectionStrings.ConnectionStrings; if (settings[addDbWindow.Database] == null) { settings.Add(new ConnectionStringSettings(addDbWindow.Database, connectionBuilder.ConnectionString)); settings[addDbWindow.Database].ProviderName = "PostgreSQL"; PostgreCommunications.Add(addDbWindow.Database, communication); PostgreCommunications[addDbWindow.Database].FillDs(); BuildTreeView(DatabasesTreeView, communication); } else { settings[addDbWindow.Database].Name = addDbWindow.Database; settings[addDbWindow.Database].ConnectionString = connectionBuilder.ConnectionString; settings[addDbWindow.Database].ProviderName = "PostgreSQL"; PostgreCommunications.Remove(addDbWindow.Database); PostgreCommunications.Add(addDbWindow.Database, communication); PostgreCommunications[addDbWindow.Database].FillDs(); RemoveTreeView(DatabasesTreeView, addDbWindow.Database); BuildTreeView(DatabasesTreeView, communication); } configFile.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("connectionStrings"); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } }
private void BuildTreeView(TreeView treeView, NpgsqlCommunication communication) { var dbContextMenu = new ContextMenu(); var dbRefreshItem = new MenuItem { Header = "Refresh" }; dbRefreshItem.Click += DbMenuItem_Refresh; dbContextMenu.Items.Add(dbRefreshItem); var dbDisconnectItem = new MenuItem { Header = "Disconnect" }; dbDisconnectItem.Click += DbMenuItem_Disconnect; dbContextMenu.Items.Add(dbDisconnectItem); var dbView = new TreeViewItem { Header = communication.Ds.DataSetName, ContextMenu = dbContextMenu }; dbView.ContextMenu.PlacementTarget = dbView; dbView.Header = CreateHeaderWithIcon("Database", dbView.Header.ToString(), new Thickness(0, 0, 0, 3), new Thickness(5, 0, 0, 0)); treeView.Items.Add(dbView); foreach (DataTable table in communication.Ds.Tables) { var tableContextMenu = new ContextMenu(); var tableViewAllItem = new MenuItem { Header = "View all rows" }; tableViewAllItem.Click += ViewAll_Click; tableContextMenu.Items.Add(tableViewAllItem); var tableViewFirstItem = new MenuItem { Header = "View first 100 rows" }; tableViewFirstItem.Click += ViewFirst_Click; tableContextMenu.Items.Add(tableViewFirstItem); var tableViewLastItem = new MenuItem { Header = "View last 100 rows" }; tableViewLastItem.Click += ViewLast_Click; tableContextMenu.Items.Add(tableViewLastItem); var tableView = new TreeViewItem { Header = table.TableName, ContextMenu = tableContextMenu }; tableView.ContextMenu.PlacementTarget = tableView; tableView.Header = CreateHeaderWithIcon("Table", tableView.Header.ToString(), new Thickness(0), new Thickness(5, 0, 0, 5)); dbView.Items.Add(tableView); foreach (DataColumn column in table.Columns) { var columnView = new TreeViewItem { Header = column.ColumnName }; columnView.Header = CreateHeaderWithIcon("Column", columnView.Header.ToString(), new Thickness(0), new Thickness(0, 0, 0, 2)); tableView.Items.Add(columnView); } } }