错误: - DataBinding:'System.Data.DataRowView'不包含名称为'Optiont4'的属性

时间:2016-04-29 03:23:14

标签: c# asp.net sql-server data-binding webforms

.aspx 页面中,我采用了Label Control来显示数据库中的问题, 4个单选按钮,以显示与特定问题相关的四个选项,最后但并非最不重要,我使用了隐藏字段,我将在其中存储特定问题的答案。 最后我采用了一个Button Control,为此我创建了onclick事件,我将在其上执行操作以生成分数。

.aspx.cs 页面中,在按钮的onclick事件中,我使用下面提到的代码从aspx页面获取控件,而且我还使用了if语句为了查看哪个单选按钮处于活动状态并将相应的值存储在变量“selans”中,使用此“selans”,我将它与隐藏字段的值进行比较,以便查找选中的单选按钮是否为正确答案或不是,答案是正确的,即“selans”中的值与隐藏字段中的值(实际答案)匹配,变量“count”(最初用值0初始化)相应地递增,并且所有这些代码都放在“for loop”将执行到no。 GridView中的控件(您可以将其与问题编号联系起来,因为每个记录GridView都会生成新控件)。

但是当我运行它时,我收到了这个错误: -

DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'Optiont4'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'Optiont4'.

Source Error: 


Line 115:            <asp:RadioButton ID="rad2" runat="server" Text='<%#Eval("Option2") %>' GroupName="A" />
Line 116:            <asp:RadioButton ID="rad3" runat="server" Text='<%#Eval("Option3") %>' GroupName="A" />
Line 117:            <asp:RadioButton ID="rad4" runat="server" Text='<%#Eval("Optiont4")%>' GroupName="A" />
Line 118:            <asp:HiddenField ID="hf" runat="server" Value='<%#Eval("CorrectAns")%>' />
Line 119:

Source File: e:\Way2Success\Student\Examdemo.aspx    Line: 117 

此处错误行号在.aspx页面中为30

看看我的代码。告诉我,我正在犯错误,解决方案是什么。

.aspx: -

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Examdemo.aspx.cs" Inherits="Student_Examdemo" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
  </head>
<body>
    <form id="form2" runat="server">
        <div>
<div id="tabs">
    <ul>
        <li><a href="#tabs-1">Tab 1</a></li>
        <li><a href="#tabs-2">Tab 2</a></li>
        <li><a href="#tabs-3">Tab 3</a></li>
        <li><a href="#tabs-4">Tab 4</a></li>
        <li><a href="#tabs-5">Tab 5</a></li>
    </ul>
    <div id="tabs-1">
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" >
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%#Eval("Question") %>'></asp:Label>
            <br />
            <br />
            <br />
           <asp:RadioButton ID="rad1" runat="server" Text='<%#Eval("Option1") %>' GroupName="A" />
            <asp:RadioButton ID="rad2" runat="server" Text='<%#Eval("Option2") %>' GroupName="A" />
            <asp:RadioButton ID="rad3" runat="server" Text='<%#Eval("Option3") %>' GroupName="A" />
            <asp:RadioButton ID="rad4" runat="server" Text='<%#Eval("Option4") %>' GroupName="A" />
            <asp:HiddenField ID="hf" runat="server" Value='<%#Eval("CorrectAns") %>' />

        <br />
        <br />

                 </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
   
    </div>
    <div id="tabs-2">
        

        <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false" >
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%#Eval("Question") %>'></asp:Label>
            <br />
            <br />
            <br />
           <asp:RadioButton ID="rad1" runat="server" Text='<%#Eval("Option1") %>' GroupName="A" />
            <asp:RadioButton ID="rad2" runat="server" Text='<%#Eval("Option2") %>' GroupName="A" />
            <asp:RadioButton ID="rad3" runat="server" Text='<%#Eval("Option3") %>' GroupName="A" />
            <asp:RadioButton ID="rad4" runat="server" Text='<%#Eval("Optiont4")%>' GroupName="A" />
            <asp:HiddenField ID="hf" runat="server" Value='<%#Eval("CorrectAns")%>' />

        <br />
        <br />

                 </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

    </div>
    <div id="tabs-3">
        Tab 3 Content
    </div>
     <div id="tabs-4">
        Tab 4 Content
    </div>
     <div id="tabs-5">
        Tab 5 Content
    </div>
</div>
<input type="button" id="btnPrevious" value="Previous" style = "display:none"/>
<input type="button" id="btnNext" value="Next" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
           
            <asp:Button class="panelButton" runat="server" Text="Finish the exam" ClientIDMode="Static" OnClick="btn_Click" />
            <br />
    </div>
    </form>
</body>
</html>

.aspx.cs: -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;


public partial class Student_Examdemo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
    {
        GridView1.DataSource = GetData("SELECT top 2 Question, Option1, Option2, Option3, Option4, CorrectAns, Explanation FROM Questions");
        GridView1.DataBind();
        GridView2.DataSource = GetData("SELECT top 2 Question, Option1, Option2, Option3, Option4, CorrectAns, Explanation FROM Questions WHERE SectionId=2");
        GridView2.DataBind();

private DataSet GetData(string query)
{
    string conString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    SqlCommand cmd = new SqlCommand(query);
    using (SqlConnection con = new SqlConnection(conString))
    {
        using (SqlDataAdapter sda = new SqlDataAdapter())
        {
            cmd.Connection = con;
            sda.SelectCommand = cmd;
            using (DataSet ds = new DataSet())
            {
                sda.Fill(ds);
                return ds;
            }
        }
    }
}

protected void btn_Click(object sender, EventArgs e)
{

            RadioButton r1, r2, r3, r4;
            HiddenField hdn;
            int count = 0;
            int neg = 0;
            int total;
            int totalf=0;
            int totals=0;
            int totalt;
            int totalfo;
            int totalfi;
            string selans = "-1";
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                r1 = (RadioButton)GridView1.Rows[i].Cells[0].FindControl("rad1");
                r2 = (RadioButton)GridView1.Rows[i].Cells[0].FindControl("rad2");
                r3 = (RadioButton)GridView1.Rows[i].Cells[0].FindControl("rad3");
                r4 = (RadioButton)GridView1.Rows[i].Cells[0].FindControl("rad4");
                hdn = (HiddenField)GridView1.Rows[i].Cells[0].FindControl("hf");
                if (r1.Checked)
                {
                    selans = r1.Text;
                }
                else if (r2.Checked)
                {
                    selans = r2.Text;
                }
                else if (r3.Checked)
                {
                    selans = r3.Text;
                }
                else if (r4.Checked)
                {
                    selans = r4.Text;
                }

                if (hdn.Value == selans)
                {
                    count++;
                }
                else
                {
                   neg--;
                }

                totalf = count + neg;


            }

    for (int i = 0; i < GridView2.Rows.Count; i++)
    {
        r1 = (RadioButton)GridView2.Rows[i].Cells[0].FindControl("rad1");
        r2 = (RadioButton)GridView2.Rows[i].Cells[0].FindControl("rad2");
        r3 = (RadioButton)GridView2.Rows[i].Cells[0].FindControl("rad3");
        r4 = (RadioButton)GridView2.Rows[i].Cells[0].FindControl("rad4");
        hdn = (HiddenField)GridView2.Rows[i].Cells[0].FindControl("hf");
        if (r1.Checked)
        {
            selans = r1.Text;
        }
        else if (r2.Checked)
        {
            selans = r2.Text;
        }
        else if (r3.Checked)
        {
            selans = r3.Text;
        }
        else if (r4.Checked)
        {
            selans = r4.Text;
        }

        if (hdn.Value == selans)
        {
            count++;
        }
        else
        {
            neg--;
        }

        totals = count + neg;

    }
    total = totalf + totals;
    Session["score"] = total;

}


}

1 个答案:

答案 0 :(得分:1)

您的GridView2定义中存在输入错误。

<asp:RadioButton ID="rad4" runat="server" Text='<%#Eval("Optiont4")%>' GroupName="A" />

应该是

<asp:RadioButton ID="rad4" runat="server" Text='<%#Eval("Option4")%>' GroupName="A" />