2008-10-08 7 views
0

나는 cureently A가 제가하고 싶은 것은 열 중 하나가 ClassB._someProperty에 바인딩되는으로있는 gridview에 객체 A를 데이터 바인딩하는 것입니다 는 속성 내에서 속성을 데이터 바인딩하는 방법

Public ClassA 

property _classB as ClassB 

End Class 

Public ClassB 

property _someProperty as someProperty 

End Class 

아래처럼 설정되어 . 내가 Classb._someProperty로 databind하려고하면 "선택한 데이터 소스에서 찾을 수없는 필드 또는 속성"오류가 발생합니다.

나는 objectContainerDataSource를 사용하려고 시도했으나 성공하지 못한 채로 직접 gridview에 바인딩하려고했습니다.

누구나 과거에이 문제가 발생 했습니까?

답변

0

처럼 뭔가를 할 수 있도록 확장 방법에 투사를 넣어 (이 많이 할 경우) 템플릿 필드와 평가를 사용하는 것입니다

후 재산 ClassB가하고 데이터 필드를 설정합니다 (아래 참조) :

<asp:TemplateField HeaderText="_someProperty"> 
<ItemTemplate>  
          <%#Eval("classB._someProperty")%> 

</ItemTemplate> 
</asp:TemplateField> 
2

일반 데이터 바인딩은 일반적으로 표현식을 허용하지 않습니다. 후드 아래에서 DataGrid는 열에 바인딩하기 위해 지정한 속성을 찾기 위해 리플렉션 (대신 ASP.NET 페이지에서 DataBinder.Eval이 수행하는 실행 코드)을 사용합니다. 바인딩을 표현식으로 평가해야 할 필요가있는 일을하려면 부모 -> 하위 관계를 찾고 그 수준까지 반영하도록 노력하십시오. 눈금에 붙어있는 inbuilt 데이터 바인딩 작업을 수행하는 방법을 알고 너무 바보입니다.

나는 최근에 같은 문제가 있었고, 해결책은 LINQ 프로젝션을 수행하고 대신 그리드에 바인딩하는 것이 었습니다. 같은 뭔가 (내가 VB에서 LINQ 구문이 어려우니까 C#으로) 다음

IList<ClassA> listOfClassAObjects = GetMyListOfClassAObjectsFromSomewhere(); 
var projection = from ClassA a in listOfClassAObjects 
       select new { SomeProperty = a.SomeProperty, 
           SomeOtherProperty = a.SomeOtherProperty, 
           SomePropertyFromB = a.ClassB.SomeProperty }; 
datagrid.DataSource = projection; 
datagrid.DataBind(); 

당신은 그 돌출부를 포함하는 익명 형식의 목록을 다시 얻을 것이다, 당신은에 적절한 열을 바인딩 할 수 있습니다 SomePropertyFromB. 여분의 캡슐화를 들어

당신은 내가이 작업을 수행 할 수있는 방법을 발견

var data = GetMyListOfClassAObjectsFromSomewhere().ProjectionForDataGrid(); 
datagrid.DataSource = data; 
datagrid.DataBind(); 
+0

이 내가에만 사용할 포스트 .NET 2.0 생각 LINQ를 사용합니다. 나는 .net 2.0으로 제한되어 있기 때문에 다른 방법이 있습니까? – Dean

+1

이것을 컴파일하려면 C# 3.0 컴파일러가 필요하지만 2.0 프레임 워크에서 결과 코드를 매우 행복하게 실행할 수 있습니다. system.core 어셈블리에있는 LINQ 라이브러리 (System.Linq)는 실제로 .NET Framework 3.5의 일부이지만 위의 코드에서는 필요하지 않습니다. –

관련 문제