2012-01-07 2 views
0

내가 지금 개발하고있는 웹 애플리케이션에는 퀴즈 엔진이라고하는 것이 있습니다.이 퀴즈 엔진은 사용자에게 하나 이상의 질문으로 구성된 짧은 퀴즈를 제공합니다. 이제 GridView에 질문 번호, 사용자 답변 및 결과를 보여주는 RESULTS 페이지에 문제가 있습니다. 또한이 페이지는 DetailsView에 질문, 네 가지 가능한 대답, 정답 및 대답 설명을 표시합니다. 내가 가진 주된 문제는 다음과 같습니다. 데이터베이스의 정답을 nvarchar 데이터 유형으로 설정했습니다. 사용자가 그 중 하나 (예를 들어 C)를 선택할 때 A, B, C 및 D로 possible 해답을 나열하면 GridView는 결과 (사용자 대답)를 문자가 아닌 숫자로 표시하고 DetailsView는 정답을 C로 표시합니다. 그 이유는 모르겠습니다.사용자가 선택한 값을 숫자가 아닌 문자로 표시하는 방법은 무엇입니까?

퀴즈 엔진을 만들 때 나는 그것을 만들기 위해 the Toturial in the ASP.NET website을 사용했습니다.

내 ASP.NET 코드 :

<asp:GridView ID="resultGrid" runat="server" DataKeyNames="QuestionID" SelectedIndex="0" 
        AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateSelectButton="True" OnSelectedIndexChanged="resultGrid_SelectedIndexChanged" Width="555px"> 
         <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
         <RowStyle BackColor="#F7F6F3" ForeColor="#333333" CssClass="generaltext" HorizontalAlign="Center" /> 
         <Columns> 
          <asp:BoundField DataField="QuestionID" HeaderText="Question" /> 
          <%--<asp:BoundField DataField="CorrectAnswer" HeaderText="Correct Answer" />--%> 
          <asp:BoundField DataField="UserAnswer" HeaderText="Your Answer" /> 
          <asp:BoundField DataField="Result" HeaderText="Result" /> 
         </Columns> 
         <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
         <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
         <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" CssClass="boldtext" /> 
         <EditRowStyle BackColor="#999999" /> 
         <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
        </asp:GridView> 

        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
         SelectCommand="SELECT [Question], [Answer1], [Answer2], [Answer3], [QuestionID], [QuestionOrder], [Answer4], [CorrectAnswer], [AnswerExplanation], [QuizID] FROM [Question] WHERE ([QuizID] = @QuizID) ORDER BY [QuestionOrder]"> 
         <SelectParameters> 
          <asp:SessionParameter Name="QuizID" SessionField="QuizID" Type="Int32" /> 
         </SelectParameters> 
        </asp:SqlDataSource> 

<asp:DetailsView ID="answerDetails" runat="server" CellPadding="4" ForeColor="#333333" 
         GridLines="None" Height="45px" Width="552px" DataSourceID="SqlDataSource1" 
         AutoGenerateRows="False" DataKeyNames="QuestionID"> 

         <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
         <CommandRowStyle BackColor="#E2DED6" Font-Bold="True" /> 
         <RowStyle BackColor="#F7F6F3" ForeColor="#333333" CssClass="generaltext" /> 
         <FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" CssClass="boldtext" Width="100px" /> 
         <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
         <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
         <EditRowStyle BackColor="#999999" /> 
         <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
         <Fields> 
          <asp:BoundField DataField="Question" HeaderText="Question" 
           SortExpression="Question" /> 
          <asp:BoundField DataField="Answer1" HeaderText="A" 
           SortExpression="Answer1" /> 
          <asp:BoundField DataField="Answer2" HeaderText="B" 
           SortExpression="Answer2" /> 
          <asp:BoundField DataField="Answer3" HeaderText="C" 
           SortExpression="Answer3" /> 
          <asp:BoundField DataField="Answer4" HeaderText="D" 
           SortExpression="Answer4" /> 
          <asp:BoundField DataField="CorrectAnswer" HeaderText="Correct Answer" 
           SortExpression="CorrectAnswer" HeaderStyle-BackColor="lightgreen" /> 
          <asp:BoundField DataField="AnswerExplanation" HeaderText="Explanation" 
           SortExpression="AnswerExplanation" HeaderStyle-BackColor="lightgreen" /> 
         </Fields> 
        </asp:DetailsView> 

내 코드 숨김 :

protected void Page_Load(object sender, EventArgs e) 
    { 
     ArrayList al = (ArrayList)Session["AnswerList"]; 

     if (al == null) 
     { 
      Response.Redirect("default.aspx"); 
     } 

     resultGrid.DataSource = al; 
     resultGrid.DataBind(); 

     // Save the results into the database. 
     if (IsPostBack == false) 
     { 
      // Calculate score 
      double questions = al.Count; 
      double correct = 0.0; 


      for (int i = 0; i < al.Count; i++) 
      { 
       Answer a = (Answer)al[i]; 
       if (a.Result == Answer.ResultValue.Correct) 
        correct++; 
      } 

      double score = (correct/questions) * 100; 
      string username = HttpContext.Current.User.Identity.Name.ToString().Replace("ARAMCO\\", ""); 
      SqlDataSource userQuizDataSource = new SqlDataSource(); 
      userQuizDataSource.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ToString(); 
      userQuizDataSource.InsertCommand = "INSERT INTO [UserQuiz] ([QuizID], [DateTimeComplete], [Score], [Username]) VALUES (@QuizID, @DateTimeComplete, @Score, @Username)"; 

      userQuizDataSource.InsertParameters.Add("QuizID", Session["QuizID"].ToString()); 
      userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now.ToString()); 
      userQuizDataSource.InsertParameters.Add("Score", score.ToString()); 
      userQuizDataSource.InsertParameters.Add("Username", username); 

      int rowsAffected = userQuizDataSource.Insert(); 
      if (rowsAffected == 0) 
      { 
       // Let's just notify that the insertion didn't 
       // work, but let' s continue on ... 
       errorLabel.Text = "There was a problem saving your quiz results into our database. Therefore, the results from this quiz will not be displayed on the list on the main menu."; 


      } 

     } 


    } 

    protected void resultGrid_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     SqlDataSource1.FilterExpression = "QuestionOrder=" + resultGrid.SelectedValue; 
    } 

어떻게이 문제를 해결하려면?

+0

Answer.CorrectAnswer 속성의 실제 값은 무엇입니까? 숫자 나 문자입니까? – alexm

+0

A, B, C, D와 같은 글자 – user1093651

+0

죄송합니다. 데이터베이스에 5 개의 열이 있습니다 : Answer1, Answer2, Answer3, Answer4 및 Correct Answer. 첫 번째 네 가지 대답에 텍스트를 넣을 수 있습니다. 정답은 A, B, C 또는 D를 넣으면됩니다. 위에 설명 된대로 GridView의 User Answer 필드 아래에 표시되어야합니다. – user1093651

답변

2

당신은이 하나의 데이터 테이블/배열 목록에서 모든 질문과 답변을 가져옵니다. 그런 다음 양식을 하나씩 바인딩하십시오. 당신이 첫 번째 질문에 있고 그것이 맞다면 대답은 D이고 사용자가 B를 선택하면 첫 번째 질문에 대한 시간 플래그는 거짓입니다. 그리고 대답이 맞다면 flag를 true로 설정하십시오. 모든 질문에이 과정을 수행하십시오. 시험을 마친 후 해당 플래그를 사용하여 결과를 만들 수 있습니다.

0

질문 및 답변을 위해 배열을 유지해야한다고 생각합니다. 질문, 답변 및 선택된 답변 배열을 만들어야합니다. 사용자가 옵션을 변경하고 해당 시간을 제출하면 선택한 옵션이 올 바르거나 틀립니다. Answer를 선택한 경우 플래그 (Selected Answer)를 true로 설정합니다. 그리고 시험을 마친 후에는 그 배열을 사용하여 결과를 생성해야합니다. 나는 또한이 방법을 사용하여이 응용 프로그램을 수행 한

.... 당신이 어떤 쿼리가 다음 나 한테 물어 경우

이 ... 당신이 도움이 될 수 있습니다 .....

+0

사용자 응답에 A, B, C 및 D 표시 필드는 위에서 언급 한 모든 것을 수행 할 필요가 없습니다. – user1093651

+0

기본 False 인 Flag에 하나 이상의 열을 추가하고 응답 제출 후 변경하십시오. –

+0

자세한 정보를 제공해 주시겠습니까? – user1093651

관련 문제