Ejemplo n.º 1
0
 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();
 }
Ejemplo n.º 2
0
        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();
        }