2011-11-04 2 views
0

GridView와 같은 일부 작업을 수행하는 클래스를 System.Web.UI.WebControls.WebControl에서 상속 받았습니다.asp.net의 DataBinder.Eval 오류

public class IHGridView : System.Web.UI.WebControls.WebControl 
{ 
    // inside here, actually return Repeater class. 


    protected override void OnInit(EventArgs e) 
    { 
     _repeater.ItemTemplate = new IHGridItemTemplate(ListItemType.Item, this.Columns); 
     this.Controls.Add(_repeater); 
    } 
} 

또한 IHGridView에서 내 리피터 용 ItemTemplate을 만들었습니다.

public class IHGridItemTemplate : ITemplate 
{ 
} 

IHGridView 클래스는 리피터와 일부 HTML 코드를 돌려줍니다 만, 편리 성에서 나는 몇 가지 물건을 만든 deveop 할 수 있습니다.

public class Columns : StateManagedCollection 
{ 
} 

public class IHBoundFieldBase : IStateManager 
{ 
} 

public class IHLabelField : IHBoundFieldBase 
{ 
} 

지금 내 영문, 나는 아래처럼 이것을 사용할 수 있습니다 :

<cc1:IHGridView ID="IHGridView1" runat="server" EditMode="View"> 
    <Columns> 
     <cc1:IHLabelField ID="IHLabelField7" DataField="PERSON_NAME" HeaderText="PersonName" /> 
    </Columns> 
</cc1:IHGridView> 

지금 내가 문제가 함께 제공됩니다. aspx에서 DataBinder.Eval을 사용할 수 없습니다.

<cc1:IHLabelField ID="IHLabelField7" HeaderText="PersonName" Text='<%# DataBinder.Eval(Container.DataItem, "PERSON_NAME") %>' /> 

이렇게하면 오류가 발생합니다. 오류 메시지는 아래와 같습니다. CS1061 : 'System.Web.UI.Control'에 'DataItem'의 정의가 없습니다. 'System.Web.UI.Control'의 첫 번째 인수에는 확장 가능한 메서드 'DataItem'이 없습니다. 루 브릭 또는 어셈블리 참조를 사용하고 있는지 확인하십시오. 이것은 한국어로 작성되었지만 영어로 번역되었습니다. 누구나이 문제를 해결할 수있는 단서를 줄 수 있습니까?

답변

1

템플릿 컨트롤에서 템플릿은 컨테이너에서 인스턴스화됩니다. 템플릿 기반 필드에서 데이터 바인딩이 작동하려면 컨테이너가 IDataItemContainer 인터페이스를 구현해야한다고 권장합니다. 인터페이스 구현은 데이터 항목을 제공해야합니다.

AFAIK는 데이터 바인딩 식을 지원하기 위해 컨트롤의 속성 (이 식을 사용하는)에 대해 DataBinding 이벤트에 대한 처리기를 삽입 한 다음 처리기에서 컨테이너의 데이터 항목을 찾는 코드를 생성합니다.

IHLabelField.Text 속성에서 데이터 바인딩 식을 사용하려면 컨트롤의 명명 컨테이너가 IDataItemContainer이거나 DataItem 속성이어야합니다. 따라서이 경우에는 이 IHGridView 컨트롤에 필요하며 원하는 방식으로 작동하지 않습니다.

+0

감사합니다 도움이되기를 바랍니다. 나는 마침내 해결할 단서를 얻었다. –

0

여기에 사용한 예가 나와 있습니다. 나는 그것을 아주 많이

<asp:HyperLink ID="phoneManagementHyperLink" runat="server" Text='<%# (Container.DataItem as WcfUser).firstName + " " + (Container.DataItem as WcfUser).lastName%>'