Here is the final view
Database
I use Linq to SQL classes
Finally i create simple Quiz manager to insert,update and delete questions for the quiz.I use a detailsview control because its very optimal for such funtionality
Here is the source code for the quiz i made.
using System; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections; public partial class _Default : System.Web.UI.Page { //create variables you will need to use in the application ArrayList quizHistory = new ArrayList(); QuizDataContext qz = new QuizDataContext(); int questionNum = 1; int score = 0; int totalQuestions; Random generator; protected void Page_Load(object sender, EventArgs e) { // Load quiz on page load if (!Page.IsPostBack) { totalQuestions = qz.Quizs.Count(); LoadQuestion(questionNum); } } void LoadQuestion(int questionNum) { Quiz myQuiz; generator = new Random(); int ranHolder; using (QuizDataContext db = new QuizDataContext()) { myQuiz = (from q in db.Quizs where q.QuestionId == questionNum select q).Single(); // only single instance wanted // clear Previos items answers.Items.Clear(); //allocate values to controls Label1.Text = myQuiz.Question; //random template loader ranHolder = generator.Next(1, 4); // Quiz template position is random. switch (ranHolder) { case 1: // template One answers.Items.Add(myQuiz.Answer); answers.Items.Add(myQuiz.Anwer2); answers.Items.Add(myQuiz.CorrectAns); answers.Items.Add(myQuiz.Anwer3); // store key items into the ViewState bag SaveAnswers(myQuiz); break; case 2: answers.Items.Add(myQuiz.Answer); answers.Items.Add(myQuiz.CorrectAns); answers.Items.Add(myQuiz.Anwer2); answers.Items.Add(myQuiz.Anwer3); // store key items into the ViewState bag SaveAnswers(myQuiz); break; case 3: answers.Items.Add(myQuiz.Answer); answers.Items.Add(myQuiz.Anwer2); answers.Items.Add(myQuiz.Anwer3); answers.Items.Add(myQuiz.CorrectAns); // store key items into the ViewState bag SaveAnswers(myQuiz); break; case 4: answers.Items.Add(myQuiz.CorrectAns); answers.Items.Add(myQuiz.Answer); answers.Items.Add(myQuiz.Anwer2); answers.Items.Add(myQuiz.Anwer3); // store key items into the ViewState bag SaveAnswers(myQuiz); break; } } } private void SaveAnswers(Quiz myQuiz) { // save to viewstate ViewState["CorrectAnswer"] = myQuiz.CorrectAns; ViewState["History"] = quizHistory; ViewState["QuestionNum"] = myQuiz.QuestionId; ViewState["Scores"] = score; ViewState["QuestionTotal"] = totalQuestions; } protected void nextBtn_Click(object sender, EventArgs e) { // store essental variables in the viewState bag quizHistory = (ArrayList)ViewState["History"]; questionNum = (int)ViewState["QuestionNum"]; score = (int)ViewState["Scores"]; totalQuestions = (int)ViewState["QuestionTotal"]; // check for correct answer if (answers.SelectedItem.Value == (string)ViewState["CorrectAnswer"]) { score += 1; quizHistory.Add("Correct"); } else { // add to history quizHistory.Add(answers.SelectedItem.Value); } // Check if end of Quiz //if end show results if (totalQuestions == questionNum) { ResultPanel.Visible = true; ShowResult(); } else { //Hide result panel ResultPanel.Visible = false; //Go to next question questionNum += 1; // show next question LoadQuestion(questionNum); } } void ShowResult() { Label2.Text = "Score " + score.ToString() + " / 4 "; LblCongrats.Text = "Happy programmingCongratulations!!!
"; if (score == qz.Quizs.Count()) LblCongrats.Visible = true; for (int i = 1; i <= totalQuestions; i++) { lblHistory.Text += i.ToString() + " Choice made was " + quizHistory[i - 1] + " "; } } protected void LoadBut_Click(object sender, EventArgs e) { totalQuestions = qz.Quizs.Count(); LoadQuestion(questionNum); Response.Redirect("Default.aspx"); } }
In my next post i will write the same application using ASP.net MVC ."The only way to learn a framework is to build an application with it".
Hi i was just wondering what Answers were in your example? you haven't included an example of the controls you used in the aspx file? are they a checkboxlist that you databind to?
ReplyDeleteCheers,
Tom
sorry i meant radiobutton list!
ReplyDeletehi could you expalin the view states to me,and what are all the cases about ?? does this program save the users answer,,i was think bout having a progress tracker,so could i like read the users answer then from the database using this program,thanks
ReplyDeleteThe ViewState is just a temporal storage component in ASP.net web forms It is a Dictionary object(key/value pair) underneath. It works like a Session object and i use it to monitor the state of the application and I can therefore save answers and give results.You could replace ViewState with the Session object if you want. Goodluck
Deleteso the users answerr is stored in the database,,could you send me onn some documentation for this project pls
Deletehi i am new to asp,net and i would like to use this quiz in my web site,,could you give me a little help in setting it up thanks
ReplyDeleteThis comment has been removed by the author.
ReplyDeletewhat is quiz and quizdatacontext class contains ?
ReplyDelete