// Заполнение данных для подключения к бд и подключение private void connectToolStripMenuItem_Click(object sender, EventArgs e) { try { // Оповещение о несохраненных изменениях, если переподключение if (b_Changes == true) { SaveToolStripMenuItem_Click(sender, e); } // Если данные введены, пробуем подключаться DataConnection d_DataConnection = new DataConnection(); if (d_DataConnection.ShowDialog().Equals(DialogResult.OK)) { //Вызов подключения string s_ConnectString = ""; //если проверка подлинности Sql if (d_DataConnection.GetAuthentication.Equals("Authentication SQL Server")) { s_ConnectString = @"Data Source=" + d_DataConnection.GetDataSource + ";Initial Catalog=" + d_DataConnection.GetDatabase + ";Persist Security Info=True;User ID=" + d_DataConnection.GetUsername + ";Password="******"Data Source=" + d_DataConnection.GetDataSource + ";Initial Catalog=" + d_DataConnection.GetDatabase + ";Persist Security Info=True;Integrated Security=true"; } // Очистка ресурсов (если переподключение к другой бд, например) if (d_Database != null) { d_Database.Dispose(); } // Новое подключение d_Database = new Database(s_ConnectString); // Построение дерева t_StructDepartments.Nodes.Clear(); t_StructDepartments.Nodes.Add(StructureTree.BuildTree(d_Database)); t_StructDepartments.SelectedNode = t_StructDepartments.TopNode; // Привязка событий к меню Сохранить и Удалить m_Save.Click += new System.EventHandler(this.SaveToolStripMenuItem_Click); m_Cancel.Click += new System.EventHandler(this.CancelToolStripMenuItem_Click); } } catch (SqlException e_Ex) { new Notification("A connection to the database has not been established; check that the entered data is correct. The server may be inactive or the database does not exist.").ShowDialog(); t_StructDepartments.Nodes.Clear(); if (d_Database != null) { d_Database.Dispose(); } d_Table.Columns.Clear(); l_Element.Text = ""; m_Save.Click -= SaveToolStripMenuItem_Click; m_Cancel.Click -= CancelToolStripMenuItem_Click; m_Add.DropDownItems.Clear(); m_Delete.DropDownItems.Clear(); } catch (Exception e_Ex) { new Notification(e_Ex.Message).ShowDialog(); t_StructDepartments.Nodes.Clear(); if (d_Database != null) { d_Database.Dispose(); } d_Table.Columns.Clear(); l_Element.Text = ""; m_Save.Click -= SaveToolStripMenuItem_Click; m_Cancel.Click -= CancelToolStripMenuItem_Click; m_Add.DropDownItems.Clear(); m_Delete.DropDownItems.Clear(); } }
// Сохранение изменений в БД private void SaveToolStripMenuItem_Click(object sender, EventArgs e) { try { // Если изменений нет, выход if (!b_Changes) { return; } // Если пользователь подтвердил сохранение изменений if (new Verification("Confirmation of saving changes. Yes/No?").ShowDialog() == DialogResult.Yes) { // Удаление столбца Age, если он есть if (d_Table.Columns.Contains("c_Age")) { d_Table.Columns.Remove("c_Age"); } // Сохранение изменений в бд string[] s_Tag = t_StructDepartments.SelectedNode.Tag.ToString().Split('|'); d_Database.CallMethod("1|update", s_Tag[2]); // Изменения сохранены b_Changes = false; //перестроение дерева и открытие нужного узла List <List <string> > s_CopyNodes = new List <List <string> >(); //копирование всей ветки до данного элемента TreeNode t_Node = t_StructDepartments.SelectedNode; do { s_CopyNodes.Add(new List <string>() { t_Node.Name, t_Node.Tag.ToString() }); if (t_Node.Parent != null) { t_Node = t_Node.Parent; } } while (t_Node.Parent != null); //обновление дерева t_StructDepartments.Nodes.Clear(); t_StructDepartments.Nodes.Add(StructureTree.BuildTree(d_Database)); // Выбор того же узла, либо его родителя bool b_Test = false; for (int i = 0; i < s_CopyNodes.Count && !b_Test; i++) { TreeNode[] t_FindNodes = t_StructDepartments.Nodes.Find(s_CopyNodes[i][0], true); for (int j = 0; j < t_FindNodes.Length; j++) { if (t_FindNodes[j].Tag.Equals(s_CopyNodes[i][1])) { t_StructDepartments.SelectedNode = t_FindNodes[j]; b_Test = true; break; } } } } // Если не подтвердил, отмена else { b_Changes = false; // Вывод информации в таблицу string[] s_Tag = t_StructDepartments.SelectedNode.Tag.ToString().Split('|'); Table.OutputInfoInTable(d_Table, s_Tag, d_Database); } } catch (SqlException e_Ex) { new Notification("Delete the children first!").ShowDialog(); b_Changes = false; // Вывод информации в таблицу string[] s_Tag = t_StructDepartments.SelectedNode.Tag.ToString().Split('|'); Table.OutputInfoInTable(d_Table, s_Tag, d_Database); } }