private void ButtonTaskSetting_Click(object sender, EventArgs e) { this.Enabled = false; this.Hide(); formTaskSetting = new FormTaskSetting(this.accountMenu.accountID, this.accountMenu.username, this.accountMenu.labelAccountName.Text, true); formTaskSetting.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OtherForms_FormClosed); formTaskSetting.Show(); }
private void EditQuestion(string questionID) { int accountID = this.accountMenu.accountID; string userName = this.accountMenu.username; string accountName = this.accountMenu.labelAccountName.Text; formTaskSetting = new FormTaskSetting(accountID, userName, accountName, false); formTaskSetting.labelQuestionID.Text = questionID; formTaskSetting.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OtherForms_FormClosed); // Cross-table parameterised SQL (Group A) is implemented here. using (SQLiteConnection database = new SQLiteConnection("Data Source = Database.sqlite; Version = 3;")) { database.Open(); int graphID; string graphFormat; // Query and show general information and the graph of the question sql = "SELECT QuestionName, ProblemDescription, GraphID FROM QUESTIONBANK " + "WHERE QuestionID = @questionID;"; using (SQLiteCommand command = new SQLiteCommand(sql, database)) { command.Parameters.Add(new SQLiteParameter("@QuestionID", DbType.Int32) { Value = questionID }); using (SQLiteDataReader reader = command.ExecuteReader()) { reader.Read(); formTaskSetting.textBoxQuestionName.Text = reader["QuestionName"].ToString(); formTaskSetting.textBoxProblemDescription.Text = reader["ProblemDescription"].ToString(); graphID = Convert.ToInt32(reader["GraphID"]); formTaskSetting.labelGraphID.Text = graphID.ToString(); } } // Query the correct representation for the graph sql = "SELECT GraphFormat FROM GRAPHS " + "WHERE GraphID = @GraphID;"; using (SQLiteCommand command = new SQLiteCommand(sql, database)) { command.Parameters.Add(new SQLiteParameter("@GraphID", DbType.Int32) { Value = graphID }); using (SQLiteDataReader reader = command.ExecuteReader()) { reader.Read(); graphFormat = reader["GraphFormat"].ToString(); } } // Query the graph in the form of an adjacency matrix sql = "SELECT * FROM ADJACENCYMATRICES " + "WHERE GraphID = @GraphID;"; using (SQLiteCommand command = new SQLiteCommand(sql, database)) { command.Parameters.Add(new SQLiteParameter("@GraphID", DbType.Int32) { Value = graphID }); using (SQLiteDataReader reader = command.ExecuteReader()) { reader.Read(); formTaskSetting.taskMatrix = new AdjacencyMatrix(); for (int v1 = 0; v1 < formTaskSetting.taskMatrix.GetSize(); v1++) { for (int v2 = 0; v2 < formTaskSetting.taskMatrix.GetSize(); v2++) { string fieldName = "Edge" + formTaskSetting.taskMatrix.GetVertexName(v1).Trim("vertex".ToCharArray()) + formTaskSetting.taskMatrix.GetVertexName(v2).Trim("vertex".ToCharArray()); formTaskSetting.taskMatrix.SetDirectedEdge(v1, v2, Convert.ToDouble(reader[fieldName])); } } } } // Show the graph on the window if (graphFormat == "AdjacencyMatrix") { formTaskSetting.pictureBoxGraph.Visible = false; formTaskSetting.dataGridViewGraph.Visible = true; formTaskSetting.dataGridViewGraph.Columns.Clear(); DataGridViewColumn newColumn = new DataGridViewColumn { CellTemplate = new DataGridViewTextBoxCell(), SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable, Width = 41 }; formTaskSetting.dataGridViewGraph.Columns.Add(newColumn); int count = 1; for (int i = 0; i < formTaskSetting.taskMatrix.GetSize(); i++) { if (formTaskSetting.taskMatrix.IsVertexExisting(i)) { newColumn = new DataGridViewColumn { CellTemplate = new DataGridViewTextBoxCell(), SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable, }; formTaskSetting.dataGridViewGraph.Columns.Add(newColumn); formTaskSetting.dataGridViewGraph.Columns[count].HeaderText = Convert.ToChar('A' + i).ToString(); formTaskSetting.dataGridViewGraph.Columns[count].Name = "Column" + formTaskSetting.dataGridViewGraph.Columns[count].HeaderText; count++; } } count = 0; formTaskSetting.dataGridViewGraph.RowCount = formTaskSetting.taskMatrix.Count(); for (int i = 0; i < formTaskSetting.taskMatrix.GetSize(); i++) { if (formTaskSetting.taskMatrix.IsVertexExisting(i)) { formTaskSetting.dataGridViewGraph[0, count++].Value = (Convert.ToChar('A' + i)).ToString(); } } for (int col = 1; col <= formTaskSetting.taskMatrix.Count(); col++) { for (int row = 0; row < formTaskSetting.taskMatrix.Count(); row++) { int vStartIndex = formTaskSetting.taskMatrix.GetVertexIndex(formTaskSetting.dataGridViewGraph.Columns[col].HeaderText); int vFinishIndex = formTaskSetting.taskMatrix.GetVertexIndex(formTaskSetting.dataGridViewGraph[0, row].Value.ToString()); formTaskSetting.dataGridViewGraph[col, row].Value = formTaskSetting.taskMatrix.GetEdge(vStartIndex, vFinishIndex); } } } else if (graphFormat == "AdjacencyList") { formTaskSetting.pictureBoxGraph.Visible = false; formTaskSetting.dataGridViewGraph.Visible = true; formTaskSetting.dataGridViewGraph.ColumnCount = 2; formTaskSetting.dataGridViewGraph.Columns[0].HeaderText = "Vertex"; formTaskSetting.dataGridViewGraph.Columns[0].Name = "ColumnVertex"; formTaskSetting.dataGridViewGraph.Columns[0].Width = 100; formTaskSetting.dataGridViewGraph.Columns[1].HeaderText = "Adjacent Edges"; formTaskSetting.dataGridViewGraph.Columns[1].Name = "ColumnAdjacentEdges"; formTaskSetting.dataGridViewGraph.Columns[1].Width = formTaskSetting.dataGridViewGraph.Width - 103; int count = 0; formTaskSetting.dataGridViewGraph.RowCount = formTaskSetting.taskMatrix.Count(); for (int i = 0; i < formTaskSetting.taskMatrix.GetSize(); i++) { if (formTaskSetting.taskMatrix.IsVertexExisting(i)) { formTaskSetting.dataGridViewGraph[0, count++].Value = (Convert.ToChar('A' + i)).ToString(); } } for (int vStart = 0; vStart < formTaskSetting.taskMatrix.Count(); vStart++) { formTaskSetting.dataGridViewGraph[1, vStart].Value = ""; for (int vFinish = 0; vFinish < formTaskSetting.taskMatrix.Count(); vFinish++) { int vStartIndex = formTaskSetting.taskMatrix.GetVertexIndex(formTaskSetting.dataGridViewGraph[0, vStart].Value.ToString()); int vFinishIndex = formTaskSetting.taskMatrix.GetVertexIndex(formTaskSetting.dataGridViewGraph[0, vFinish].Value.ToString()); if (formTaskSetting.taskMatrix.ContainsEdge(vStartIndex, vFinishIndex)) { formTaskSetting.dataGridViewGraph[1, vStart].Value = formTaskSetting.dataGridViewGraph[1, vStart].Value.ToString() + "," + Convert.ToChar('A' + vFinishIndex).ToString() + "," + formTaskSetting.taskMatrix.GetEdge(vStartIndex, vFinishIndex); } } if (formTaskSetting.dataGridViewGraph[1, vStart].Value.ToString() != "") { formTaskSetting.dataGridViewGraph[1, vStart].Value = formTaskSetting.dataGridViewGraph[1, vStart].Value.ToString().Remove(0, 1); } } } else // if (graphFormat == "SketchBoard") { formTaskSetting.pictureBoxGraph.Visible = true; formTaskSetting.dataGridViewGraph.Visible = false; sql = "SELECT ImageFileName FROM GRAPHIMAGES " + "WHERE GraphID = @GraphID;"; using (SQLiteCommand command = new SQLiteCommand(sql, database)) { command.Parameters.Add(new SQLiteParameter("@GraphID", DbType.Int32) { Value = graphID }); using (SQLiteDataReader reader = command.ExecuteReader()) { reader.Read(); string imageFileName = reader["ImageFileName"].ToString(); try { Bitmap image; using (Image imageFile = Image.FromFile(imageFileName, true)) { image = new Bitmap(imageFile); formTaskSetting.pictureBoxGraph.Image = image; } } catch (System.IO.FileNotFoundException) { MessageBox.Show("Error opening the image!\n"); } } } } // Query and show the subtasks sql = "SELECT TaskDescription, StartingVertex, FinishingVertex FROM TASKS " + "WHERE QuestionID = @QuestionID;"; using (SQLiteCommand command = new SQLiteCommand(sql, database)) { command.Parameters.Add(new SQLiteParameter("@QuestionID", DbType.Int32) { Value = questionID }); using (SQLiteDataReader reader = command.ExecuteReader()) { int count = 0; while (reader.Read()) { if (count != 0) { formTaskSetting.AddTaskControls(); } int index = count; formTaskSetting.taskControls[index].GetComboBoxTask().Text = reader["TaskDescription"].ToString(); formTaskSetting.taskControls[index].GetComboBoxStartingVertex().Text = reader["StartingVertex"].ToString(); formTaskSetting.taskControls[index].GetComboBoxFinishingVertex().Text = reader["FinishingVertex"].ToString(); count++; } } } } formTaskSetting.edited = false; formTaskSetting.saved = false; formTaskSetting.Show(); this.Enabled = false; this.Hide(); }