일반 데이터 바인딩은 일반적으로 표현식을 허용하지 않습니다. 후드 아래에서 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();
이 내가에만 사용할 포스트 .NET 2.0 생각 LINQ를 사용합니다. 나는 .net 2.0으로 제한되어 있기 때문에 다른 방법이 있습니까? – Dean
이것을 컴파일하려면 C# 3.0 컴파일러가 필요하지만 2.0 프레임 워크에서 결과 코드를 매우 행복하게 실행할 수 있습니다. system.core 어셈블리에있는 LINQ 라이브러리 (System.Linq)는 실제로 .NET Framework 3.5의 일부이지만 위의 코드에서는 필요하지 않습니다. –