public List <string> GetTableOrderByDependencies() { //Chứa cặp các table và các dependency của chúng Dictionary <string, Item> existedAdj = new Dictionary <string, Item>(); List <Item> graphTableDependency = new List <Item>(); List <string> tables = _dbUtilities.GetAllTable(); foreach (var table in tables) { List <Item> adjTableDenpendencies = new List <Item>(); //List các table dependency của table var dependencies = _dbUtilities.GetAllTableDependOn(table).ToArray(); foreach (var dependency in dependencies) { if (!table.Equals(dependency)) //Kiểm tra có phải là chính nó { if (!existedAdj.ContainsKey(dependency)) //Kiểm tra là đã tạo Item này chưa { var item = new Item(dependency); existedAdj.Add(item.Name, item); } adjTableDenpendencies.Add(existedAdj[dependency]); //Tạo mới cạnh } } //Tạo mới đỉnh là table các cạch là adjTableDenpendencies graphTableDependency.Add(new Item(table, adjTableDenpendencies.ToArray())); } return(TopologicalSort.Sort(graphTableDependency.ToArray(), x => x.Dependencies)); }
private void chklistboxTable_ItemCheck(object sender, ItemCheckEventArgs e) { if (needItemCheck) { if (updatingCheckList) { return; } try { updatingCheckList = true; var result = ""; string item = chklistboxTable.SelectedItem.ToString(); int indexOfItemCheck = chklistboxTable.Items.IndexOf(item); if (chklistboxTable.GetItemCheckState(indexOfItemCheck) == CheckState.Unchecked) { var dependtables = _dbUtilities.GetAllTableDependOn(item); foreach (var dependtable in dependtables) { result += dependtable + "\n"; } for (int i = 0; i < dependtables.Count; i++) { var index = chklistboxTable.Items.IndexOf(dependtables[i]); chklistboxTable.SetItemChecked(index, true); } if (result != null && result.Length != 0) { MessageBox.Show(result); } } } finally { updatingCheckList = false; } } }