public void BindData() { if (CurrentMember != null) { try { MembershipManager mgr = new MembershipManager(); CurrentMember = mgr.QuizResults_FillMember(CurrentMember); savedQuiz = CurrentMember.CompletedQuizes.Where(i => i.QuizID == Sitecore.Context.Item.ID.ToGuid()).FirstOrDefault<Quiz>(); } catch { } } ObjChecklistArticle = new ChecklistArticlePageItem(Sitecore.Context.Item); if (ObjChecklistArticle != null) { PageUrl = ObjChecklistArticle.GetUrl(); if (ObjChecklistArticle.ShowPromotionalControl.Checked == true) { sbSidebarPromo.Visible = true; } else { sbSidebarPromo.Visible = false; } // Create the checklist from base object if (ObjChecklistArticle.InnerItem.GetChildren() != null) { //Get HeaderItems for Header Repeater List<HeaderCheckboxItem> AllHeaders = ChecklistArticlePageItem.GetAllHeaderItem(ObjChecklistArticle); if (AllHeaders != null) { rptHeaderChkbox.DataSource = AllHeaders; rptHeaderChkbox.DataBind(); } } } }
private void SaveQuiz() { Guid thisGuid = Sitecore.Context.Item.ID.ToGuid(); Quiz quiz = new Quiz(); quiz.QuizID = thisGuid; Dictionary<string, QuestionAnswer> AnswerTracker = (Dictionary<string, QuestionAnswer>)Session["AnsweredQuestions"]; foreach (KeyValuePair<string, QuestionAnswer> question in AnswerTracker) { quiz.MemberAnswers.Add(new QuizItem(new Guid(question.Key), question.Value.Answer)); } try { MembershipManager mgr = new MembershipManager(); mgr.QuizResults_SaveToDb(CurrentMember.MemberId, quiz); } catch { } }
/// <summary> /// Used to inflate a member's quiz items and the responses that the user has saved to the db so far /// </summary> /// <param name="member">An inflated website Member</param> /// <returns>The same member, but now with quiz results.</returns> public Member QuizResults_FillMember(Member member) { string sql = "SELECT QuizId, QuestionId, AnswerValue " + " FROM QuizResults " + " WHERE (MemberId = @MemberId) " + " ORDER BY QuizId"; //ordering by QuizId will let us loop through rows and know when to make a new Quiz object. //each time we encounter a new quizid we need to populate a new set of quiz answers //default guid is a throw away Quiz quiz = new Quiz(); quiz.QuizID = Guid.NewGuid(); try { using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["membership"].ConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@MemberId", member.MemberId); SqlDataReader reader = cmd.ExecuteReader(); if (reader.HasRows) { //first thing first. Clear out any existing items in the current member. if (member.CompletedQuizes.Any()) { member.CompletedQuizes.Clear(); } bool firstrow = true; while (reader.Read()) { //see if we need a new quiz or of the existing quiz we are working with is still good. if (quiz.QuizID != reader.GetGuid(0))// 0=QuizId. True when a new quiz is found. Always true for the first row. { if (!firstrow)//dont add a filled quiz if this is the first read from the reader. New quiz id, but first quiz { //save the last quiz to the member member.CompletedQuizes.Add(quiz);//save the quiz that we were filling to the list. } else { firstrow = false;//this was the first row, now its not } quiz = new Quiz();//A new set of quiz answers was found. Setup a new quiz container quiz.QuizID = reader.GetGuid(0);// (0)=QuizId. } //every single row is always a new QuizItem QuizItem quizItem = new QuizItem(); quizItem.QuestionId = reader.GetGuid(1);//(1)=QuestionId //always check for nulls from a reader or it *will* eventually break. if (!reader.IsDBNull(2))//(2)=AnswerValue { quizItem.AnswerValue = reader.GetString(2);//(2)=AnswerValue } else { quizItem.AnswerValue = string.Empty; } quiz.MemberAnswers.Add(quizItem); }// * no matter what now, there is still a quiz that needs to still be added to member // * reader stops when there are no more rows to read, but we still haven't added the last quiz member.CompletedQuizes.Add(quiz); } } } } catch (Exception ex) { throw ex; } return member; //if the member had any quiz results in the db, it is now inflated with them }
/// <summary> /// We can come back to this later but right now we are going to blow out /// </summary> /// <param name="member"></param> /// <returns></returns> public bool QuizResults_SaveToDb(Guid MemberId, Quiz quiz) { bool success = false; //clear out the existing quiz if (!DeleteQuizResults(MemberId, quiz.QuizID)) { throw new Exception("An error occured when trying to clear existing quiz data."); } //save the member's results string sql = " INSERT INTO QuizResults " + " (MemberId, QuizId, QuestionId, AnswerValue) " + " VALUES (@MemberId, @QuizId, @QuestionId, @AnswerValue) "; Guid QuizId = quiz.QuizID; try { using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["membership"].ConnectionString)) { conn.Open(); foreach (QuizItem memberAnswer in quiz.MemberAnswers) { //insert an answer row using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@MemberId", MemberId); cmd.Parameters.AddWithValue("@QuizId", QuizId); cmd.Parameters.AddWithValue("@QuestionId", memberAnswer.QuestionId); cmd.Parameters.AddWithValue("@AnswerValue", memberAnswer.AnswerValue); cmd.ExecuteNonQuery(); success = true; cmd.Parameters.Clear();//clear out the existing params for the next iteration } } } } catch (Exception ex) { throw ex; } success = true; return success; }
protected void btnQuizReader_Click(object sender, EventArgs e) { Member m = new Member(); m.MemberId = Guid.Parse("93e4c02c-3d3d-4ccd-95a3-180bb513e543"); //throw away user MembershipManager mgr = new MembershipManager(); //to load up quizes and all of their answer values m = mgr.QuizResults_FillMember(m); Quiz quiz = new Quiz(); quiz.QuizID = Guid.NewGuid(); quiz.MemberAnswers.Add(new QuizItem(Guid.Parse("93e4c02c-3d3d-4ccd-95a3-180bb513e333"),"JUNKANSWER1")); quiz.MemberAnswers.Add(new QuizItem(Guid.Parse("93e4c02c-3d3d-4ccd-95a3-180bb513e444"), "JUNKANSWER2")); //to save a quiz to the db mgr.QuizResults_SaveToDb(m.MemberId, quiz); }