2012-01-07 59 views
0

我現在正在開發的Web應用程序有一些名爲測驗引擎,它爲用戶提供包含一個或多個問題的短測驗。現在,我在結果頁面出現問題,在GridView中顯示 問題編號,用戶的答案和結果。此頁面在DetailsView中顯示問題,四個可能的答案,正確答案和答案解釋。我的主要問題如下: 我將數據庫中的Correct Answer設置爲nvarchar數據類型。並且當用戶選擇其中一個(例如C)時,我列出了可能的答案爲A,B,C和D,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 2012-01-07 08:43:16

+0

字母A,B,C,D – user1093651 2012-01-07 09:44:06

+0

對不起,我可能弄錯了:在數據庫中,我有五欄,分別是:Answer1,Answer2,Answer3,Answer4和Correct Answer。在前四個答案中,你可以放任何文字。對於正確的答案,您只需要放置A,B,C或D.並且這應該顯示在GridView的用戶應答字段下,如上所述 – user1093651 2012-01-07 09:46:28

回答

2

你有在一個數據表/數組列表中獲取所有問題和答案。 然後將它綁定在一個表格中。假設你在第一個問題,它的正確答案是D然後用戶選擇B,那麼第一個問題的時間標記是假的。如果答案是正確的,那麼將flag設置爲true。在所有問題上做這個過程。完成考試後,您可以使用該標誌創建結果。

0

我認爲你必須維護數組的問題和答案。例如。你必須爲問題,答案和選定答案創建數組。當用戶更改選項並提交時間時,選中的選項是正確的還是錯誤的。如果選擇的答案是正確的,則將標誌(選定答案)設置爲true。完成考試後,您必須使用該數組生成結果。

我也做用這種方式該應用....

可能是這對您有所幫助...... 如果你有那麼任何查詢問我.....

+0

在用戶的答案中顯示A,B,C和D字段不需要完成上面提到的所有內容。 – user1093651 2012-01-07 09:55:39

+0

爲標誌添加一個默認爲False的列,並在提交答案後更改它。 – 2012-01-07 10:04:49

+0

你能否提供更多的信息給我? – user1093651 2012-01-07 10:25:10

相關問題