0

次の DetailsView セットアップがあります。

                    <asp:DetailsView ID="QuestionDetails" runat="server" AutoGenerateRows="False" DataKeyNames="QuestionID,QuizID" DataSourceID="SqlDataSource_Quiz" OnPageIndexChanged="QuestionDetails_PageIndexChanged">
                    <Fields>
                        <asp:TemplateField HeaderText="Text_Eng" SortExpression="Text_Eng" ShowHeader="False">
                            <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_Eng") %>' GroupName="AnswerOptions" AutoPostBack="true" OnCheckedChanged="Option_CheckedChanged" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField ShowHeader="False">
                            <ItemTemplate>
                                <asp:RadioButton ID="Option2" AccessKey="2" runat="server" Text='<%# Bind("Opt_2_Eng") %>' GroupName="AnswerOptions" AutoPostBack="true" OnCheckedChanged="Option_CheckedChanged"/>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField ShowHeader="False">
                            <ItemTemplate>
                                <asp:RadioButton ID="Option3" AccessKey="3" runat="server" Text='<%# Bind("Opt_3_Eng") %>' GroupName="AnswerOptions" AutoPostBack="true" OnCheckedChanged="Option_CheckedChanged"/>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Fields>
                </asp:DetailsView>

基本的に、動作を確認した sqlDataSource からの 3 つのオプションと共に質問を表示しています。

私がする必要があるのは、ボタンを使用してレコード (質問とオプション) をループすることです。私のコードビハインドでは、いくつかの列の値を取得したいと思います。

これは私のコードビハインドです:

protected void nextButton_Click(object sender, EventArgs e)
{
    //try
    //{
        // 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["QuestionNo"].ToString(); //it breaks here saying "Exception Details: System.NullReferenceException: Object reference not set to an instance of an object."
        a.CorrectAnswer = dr["CorrectAnswer"].ToString();
        a.UserAnswer = answerDropDownList.SelectedValue.ToString();

    //}
    //catch (Exception ex)
    //{
    //    Response.Redirect("default.aspx");
    //}


    if (QuestionDetails.PageIndex == QuestionDetails.PageCount - 1)
    {
        NextButton.Enabled = false;
        //go to evaluate answer page
        //Response.Redirect("About.aspx");
    }
    else
    {
        QuestionDetails.PageIndex += 1;
        NextButton.Enabled = false;
    }

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

}


protected void Option_CheckedChanged(object sender, EventArgs e)
{
    if (NextButton.Enabled == false)
    {
        NextButton.Enabled = true;
    }
    selectedOptionRB = (RadioButton)sender;
}

これが私が問題を抱えている行です: a.QuestionID = dr["QuestionNo"].ToString(); //「例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。」

どんな助けでも大歓迎です!

4

0 に答える 0