1

私は自分のプログラムで問題に直面しています。それを実行すると、「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)
        { }
    }
}
4

2 に答える 2

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。また、前に戻って、出力列として StudentName が含まれていることを確認しSelectてください。BusinessLayer.SubjectsController

于 2013-08-27T17:53:02.523 に答える