2010-06-22 6 views
4

e.Row.DataItem 반환 값은 정확히 무엇입니까? MSDN에서 .. 은 GridViewRow 개체가 바인딩되는 기본 데이터 개체를 나타내는 개체를 반환합니다. ... 나는 이것을 시도,다시 그리드보기에서 비즈니스 개체 가져 오기

다음

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" OnRowDataBound="GridView1_RowDataBound"> 
     <Columns> 
      <asp:BoundField DataField="PracticeCode" HeaderText="PracticeCode" SortExpression="PracticeCode" /> 
      <asp:BoundField DataField="AccountNo" HeaderText="AccountNo" SortExpression="AccountNo" /> 
      <asp:BoundField DataField="PatientName" HeaderText="PatientName" SortExpression="PatientName" /> 
      <asp:TemplateField HeaderText="Status"> 
       <ItemTemplate> 
        <asp:Label ID="LblStatus" runat="server"></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

내 데이터 그리드 ... 내가 행 데이터 바인딩 이벤트에서 .. 내 비즈니스 오브젝트 목록 < 환자>와 바인딩

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     Patient p1 = (Patient)e.Row.DataItem; 
     Label lbl = e.Row.FindControl("LblStatus") as Label; 

     if (p1 == null) 
     { 
      throw new Exception("P1 is null"); 
     } 

     if (p1.OpenItems.Count > 0) 
     { 
      lbl.Text = "Has open Items"; 
     } 
     else 
     { 
      lbl.Text = ""; 
     } 
    } 

나는 예외를 얻을 P1은 .. 왜 ... 어떻게 내가 놓친 거지 널입니다 ...

참고 :이 작업을 수행하는 다른 방법이있을 수 있지만 특히 내 p1이 null 인 이유를 찾고 있습니다. 환자 바인딩 후 GridView에서 개체가 다시 나타납니다.

+0

당신이 DataKey을 시도 했습니까? –

답변

7

RowDataBound는 헤더라고하며 또한 바닥 글, 당신은 e.Row.DataItem를 호출하기 전에 실제 DataRow의 현재를 확인해야합니다

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    {     
     if(e.Row.RowType != DataControlRowType.DataRow) 
      return; 

     Patient p1 = (Patient)e.Row.DataItem; 
+0

죄송합니다. 왜 내가 너무 눈이 멀었습니다 ... 감사합니다. mxmissile ... –

+0

그래,이 이벤트가 머리글로 불려지는 것은 명백하지 않습니다. –