문제

나는 ilist를 그리드 뷰에 묶고 있습니다. Imyinterface는 모양입니다

public interface IMyInterface: IHasTotalHours, IHasLines
{
    DateTime GoalStartDate { get; set; }
    DateTime GoalEndDate { get; set; }
}

나는 다음과 같은 그리드에 인스턴스를 바인딩합니다.

IList<IMyInterface> instance= GetMyData();

myGrid.DataSource = instance;
myGrid.DataBind();

이것을 그리드에 바인딩 할 때 그리드에 표시되는 유일한 멤버는 imyinterface : GoalStartDate 및 GoalEndDate의 직접 멤버입니다.

왜 그런 겁니까? 그리드가 상속하는 다른 인터페이스의 멤버를 표시하도록하려면 어떻게해야합니까?

업데이트상속 된 인터페이스는 같은 간단한 데이터 속성을 정의합니다

public interface IHasTotalHours
{
    string Description { get; set; }
    int Hours{ get; set; }
}
public interface IHasLines
{
    double TotalLines { get; set; }
    double LinesPerHour { get; set; }
}

iMyinterface를 구현하는 수업이 있습니다.

public class MyClass : IMyInterface
{
    public string Description { get; set; }
    public int Hours { get; set; }
    public double TotalLines { get; set; }
    public double LinesPerHour { get; set; }
    public DateTime GoalStartDate { get; set; }
    public DateTime GoalEndDate { get; set; }

}

이것들은 iMyinterface로 캐스트되어 GridView에 바인딩하는 목록에서 반환되었습니다.

도움이 되었습니까?

해결책

데이터 경계 컨트롤은 반사를 사용하지 않고 타이드 스크립터를 사용하여 데이터 소스에서 속성을 얻습니다. 에서 typedescriptor.getProperties 방법, 다음을 읽을 수 있습니다.

구성 요소의 속성은 구성 요소가 앉으면 사이트가 속성을 추가하거나 제거 할 수 있기 때문에 클래스의 속성과 다를 수 있습니다.

분명히 기본 구현은 상속 된 인터페이스가 아닌 인터페이스에서 직접 속성 만 반환합니다.

운 좋게도이 메커니즘은 확장 가능하며 타이프 콘버터 사용자 정의 속성 정보 구현이 포함 된 클래스. 속성 로직 구현에 대한 TypeConverter 문서의 비고를 참조하십시오.

사용자 정의 typeConverter 클래스의 getProperties 구현은 인터페이스에서 typedescriptor.getProperties (유형)를 호출 할 수 있으며 모든 상속 인터페이스입니다. 그러나 반사를 사용하여 모든 상속 된 특성을 찾을 수있는 일반적인 타입 변호기를 쓸 수도 있습니다.

그런 다음이 사용자 정의 typeconverter를 TypeConverattribute 속성으로 인터페이스에 연결합니다.

그런 다음 Magic과 마찬가지로 데이터 소스는 모든 속성을 찾습니다. ;-)

다른 팁

인터페이스가 계약이기 때문에 객체와 상호 작용하는 유일한 방법은 해당 특정 계약을 통해 이루어집니다. 다른 인터페이스는 가정 할 수 없으며 캐스트가 만들어 질 때까지 사용할 수 없습니다.

따라서 t 목록을 무언가에 바인딩 할 때 Datagrid는 다른 인터페이스에 대해 알지 못합니다. 그리고 Datagrid는 반사를 사용하여 다른 클래스 나 인터페이스가 상속 될 수있는 것을 파악하지 못할 것입니다. Datagrid에서 사용할 수있는 유일한 객체 속성은 t 인터페이스에 의해 노출 된 속성입니다.

Datagrid가 모든 속성에 액세스하려면 목록을 바인딩해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top