0

オンラインクイズの作成を開始しました。sqlDataSource にリンクされた DetailsView を使用しています。これが私のコードです:

                    <asp:DetailsView ID="QuestionDetails" runat="server" AutoGenerateRows="False" DataKeyNames="QuestionID,QuizID" DataSourceID="SqlDataSource_Quiz">
                    <Fields>
                        <asp:TemplateField HeaderText="Text_Eng" SortExpression="Text_Eng" ShowHeader="False">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Text_Eng") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <InsertItemTemplate>
                                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Text_Eng") %>'></asp:TextBox>
                            </InsertItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Bind("Text_Eng") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField ShowHeader="False">
                            <ItemTemplate>
                                <asp:RadioButton ID="Option1" AccessKey="1" runat="server" Text='<%# Bind("Opt_1") %>' GroupName="AnswerOptions" AutoPostBack="true" OnCheckedChanged="Option_CheckedChanged" />
                                <br />
                                <asp:RadioButton ID="Option2" AccessKey="2" runat="server" Text='<%# Bind("Opt_2") %>' GroupName="AnswerOptions" AutoPostBack="true" OnCheckedChanged="Option_CheckedChanged"/>
                                <br />
                                <asp:RadioButton ID="Option3" AccessKey="3" runat="server" Text='<%# Bind("Opt_3") %>' GroupName="AnswerOptions" AutoPostBack="true" OnCheckedChanged="Option_CheckedChanged"/>
                                <br />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Fields>
                </asp:DetailsView>

sqlDataSource から取得したすべてのデータを DetailsView に表示しているわけではないことに注意してください (他のフィールド/列もあります)。

今、私のコード ビハインドでは、ボタン (NextButton) をクリックすると DetailsView の PageIndex を変更して次のレコードを表示していますが、同時に、現在表示されているレコードのデータを取得する必要があるため、ボタンのクリック ハンドラーで次のようにします。

protected void NextButton_Click(object sender, EventArgs e)
{
    try
    {
        // Save off previous answers
        DataRowView dr = (DataRowView)QuestionDetails.DataItem;

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

        ArrayList al = (ArrayList)Session["userAnswers"];
        al.Add(a);
        Session.Add("userAnswers", al);
    }
    catch (Exception ex)
    {
        Label2.Text = "Exception!";
    }

    if (QuestionDetails.PageIndex == QuestionDetails.PageCount - 1)
    {
        NextButton.Enabled = false;
    }
    else
    {
        QuestionDetails.PageIndex += 1;
        NextButton.Enabled = false;
    }

    if (QuestionDetails.PageIndex == QuestionDetails.PageCount - 1)
    {
        NextButton.Text = "Finish the Quiz";
    }

}

そのため、コードを実行すると、「例外!」が表示されます。テスト用にセットアップしたLabel2に表示されます。

私は何を間違っていますか?

4

0 に答える 0