2012-01-07 4 views
-1

私が今開発しているWebアプリケーションには、クイズエンジンと呼ばれるものがあります。クイズエンジンは、1つの質問以上の短いクイズをユーザに提供します。今、QUIZページに問題があります。クイズは1つの質問以上で構成されます。クイズが1つの質問で構成されている場合、ユーザーがこのクイズに来ると、FINISHEDボタンを表示するのではなく、NEXTボタンが表示されます。ただし、クイズが複数の質問で構成されている場合は、最後の質問が表示されたページの[完了]ボタンが表示されます。なぜ私と一緒に起こっているのか分かりません。助けてください? [次へ]ボタンの代わりに[クイズ]の[終了]ボタンを表示する方法は?

クイズエンジンを作成するために、私は 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) 
    { 
     questionDetails.DataBind(); 
    } 

    protected void nextButton_Click(object sender, EventArgs e) 
    { 
     // Save off previous answers 
     System.Data.DataRowView dr = (System.Data.DataRowView)questionDetails.DataItem; 

     // Create Answer object to save values 
     Answer a = new Answer(); 
     a.QuestionID = dr["QuestionOrder"].ToString(); 
     a.CorrectAnswer = dr["CorrectAnswer"].ToString(); 
     a.UserAnswer = answerDropDownList.SelectedValue.ToString(); 

     ArrayList al = (ArrayList)Session["AnswerList"]; 
     al.Add(a); 

     Session.Add("AnswerList", al); 

     if (questionDetails.PageIndex == questionDetails.PageCount - 1) 
     { 
      // Go to evaluate answers 
      Response.Redirect("Results.aspx"); 
     } 
     else 
     { 
      questionDetails.PageIndex++; 
     } 

     if (questionDetails.PageIndex == questionDetails.PageCount - 1) 
     { 
      nextButton.Text = "Finished"; 
     } 

    } 

ので、どのようにこの問題を解決するには?

+0

なぜダウン投票ですか?私に合理的に言い表わされた質問のようです... – Ryan

答えて

1

nextButton_Clickイベントが発生するまで、ボタンテキストを「Finished」に設定していません。おそらく、デフォルトでは「次へ」というラベルが付けられています。

あなたのPage_Loadで、または他の場所でボタンをクリックする前にこれを試してみてください:

protected void Page_Load(object sender, EventArgs e)  
{  
    questionDetails.DataBind(); 

    if (questionDetails.PageCount == 1)  
    {  
     nextButton.Text = "Finished";  
    } 
}  

これは、1のPAGECOUNTを前提としては、1つの質問がありますを意味します。

+1

はい、あなたは正しいです。ありがとう、本当にありがとうございます。 – user1093651

関連する問題