2013-08-27 4 views
1

내 프로그램에 문제가있어이 프로그램을 실행하면이 오류가 나타납니다. "DataBinding : 'System.Data.DataRowView'에 이름이 ' StudentName '. ", 어떻게 수정 될 수 있습니까 ??DataBinding : 'System.Data.DataRowView'오류

<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

중간에 코드가 누락 된 것으로 보입니다. After paqogomez

+0

이제 완료되었습니다. – Rose

답변

0

당신이 브레이크 포인트 넣어 :

oCourse.CourseID = int.Parse(DropDownListCourses.SelectedValue);

CourseID가 유효한 정수 값이 있습니까를? 아니면 0?

RepeaterDataVeiw.DataSource = dt;

dt 어떤 기록이 있는가 : 당신이 중단 점을 넣어

?

StudentName은 데이터 행의 속성이 dt입니다.

0

oCourse.Select()에 의해 반환 된 dt에는 StudentName이라는 DataColumn이 없을 가능성이 큽니다.

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"); 

을하고 (테스트 데이터가 표시 단지로하지만) 페이지가 성공적으로로드 :

BusinessLayer.SubjectsController oCourse = new  BusinessLayer.SubjectsController(); 
oCourse.CourseID = int.Parse(DropDownListCourses.SelectedValue); 
dt = oCourse.Select(); 

로 :

예를 들어, 당신은 대체 할 수 있습니다.

RepeaterDataVeiw.DataSource = dt에 중단 점을 설정하고 dt.Columns 값을 확인하십시오. 또한 BusinessLayer.SubjectsControllerSelect에 StudentName이 출력 열로 포함되어 있는지 검토하십시오.