我遇到了我的程序问题,运行它出现这个错误“DataBinding:'System.Data.DataRowView'不包含名为'StudentName'的属性。”,那怎么可能固定??
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolderSubMenu" Runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolderMainContent" Runat="Server">
<table>
<tr>
<td style="width:150px;">Courses</td>
<td style="width:20px">:</td>
<td>
<asp:DropDownList ID="DropDownListCourses" runat="server"></asp:DropDownList>
</td>
</tr>
<tr>
<td style="width:150px;"></td>
<td style="width:20px"></td>
<td>
<asp:Button ID="ButtonView" runat="server" Text="Veiw"
onclick="ButtonView_Click"/>
</td>
</tr>
</table>
<div style="padding-top:30px"></div>
<table>
<asp:Repeater ID="RepeaterDataVeiw" runat="server">
<HeaderTemplate>
<table>
<tr>
<td>Student Name</td>
<td>Course</td>
<td>Subject</td>
<td>Veiw</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Eval("StudentName")%></td>
<td><%#Eval("CourseName")%></td>
<td><%#Eval("SubjectName")%></td>
<td><a href="ListForum.aspx">Forum</a></td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr>
<td><%#Eval("StudentName")%></td>
<td><%#Eval("CourseName")%></td>
<td><%#Eval("SubjectName")%></td>
<td><a href="ListForum.aspx">Forum</a></td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</table>
</asp:Content>
代码隐藏:
public partial class Student_ListCourses : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!IsPostBack)
{
System.Data.DataTable dt;
BusinessLayer.CoursesController oCourse = new BusinessLayer.CoursesController();
dt = oCourse.Select();
DropDownListCourses.DataSource = dt;
DropDownListCourses.DataValueField = "CourseID";
DropDownListCourses.DataTextField = "CourseName";
DropDownListCourses.DataBind();
}
}
}
protected void ButtonView_Click(object sender, EventArgs e)
{
try
{
System.Data.DataTable dt;
BusinessLayer.SubjectsController oCourse = new BusinessLayer.SubjectsController();
oCourse.CourseID = int.Parse(DropDownListCourses.SelectedValue);
dt = oCourse.Select();
RepeaterDataVeiw.DataSource = dt;
RepeaterDataVeiw.DataBind();
}
catch (Exception ex)
{ }
}
}
答案 0 :(得分:0)
当您设置断点时:
oCourse.CourseID = int.Parse(DropDownListCourses.SelectedValue);
CourseID
是否有有效的整数值?还是0?
当您设置断点时:
RepeaterDataVeiw.DataSource = dt;
dt
是否有任何记录?
您确定StudentName
是dt
中数据行的属性吗?
答案 1 :(得分:0)
dt
返回的oCourse.Select()
很可能没有名为StudentName的DataColumn。
例如,您可以替换:
BusinessLayer.SubjectsController oCourse = new BusinessLayer.SubjectsController();
oCourse.CourseID = int.Parse(DropDownListCourses.SelectedValue);
dt = oCourse.Select();
使用:
dt = new DataTable();
dt.Columns.Add("StudentName");
dt.Columns.Add("CourseName");
dt.Columns.Add("SubjectName");
dt.Rows.Add("Test student name", "Test course name", "Test subject name");
并且您的页面将成功加载(尽管只显示测试数据)。
在RepeaterDataVeiw.DataSource = dt
设置一个断点并检查dt.Columns
的值。另请返回并查看Select
的{{1}}是否包含StudentName作为输出列。