나는 프로젝트에서 Sql 쿼리의 결과를 DataTable s로로드하고 있습니다.런타임에 사용자 지정 비즈니스 개체에 동적 바인딩
이러한 DataTable은 Repeater 웹 컨트롤에 바인딩하는 프런트 엔드로 전달됩니다.
위대한 작품입니다. 그러나 이제 우리는 DataTable
대신 사용자 정의 클래스에 바인딩하려고합니다. 불행히도, 내가 생각한 것은 확실한 대답이 작동하지 않았다는 것이 었습니다 (우리 클래스에 IDictionary<string, object>
구현).
모든 바인딩에 대해 구체적인 속성을 만들지 않고 Eval을 Datum에 바인딩해야 할 필요가 있습니까? 분명히 DataRow는 우리가 바인딩하는 모든 속성을 구체적으로 구현할 필요가 없습니다. 그래서 어떻게 든 Eval은 DataRow에서 이름으로 속성 값을 조회 할 수 있습니다. 여기
는 데이터 소스가rptTags.DataSource = new[] { new Datum { {"Count", 1} }, new Datum { {"Count", 2 } };
을 파일 aspx.cs에서 설정
다음public class Datum: IDictionary<string, object>
{
private Dictionary<string, object> _entries;
public Datum()
{
_entries = new Dictionary<string, object>();
}
public object this[string s]
{
get
{
return this._entries[s];
}
}
...
}
는 사용자 정의 클래스입니다 그리고 여기에 영문 파일에 구속력
<asp:Repeater ID="rptTags" runat="server">
<ItemTemplate>
<%# (int)Eval("Count") >
</ItemTemplate>
</asp:Repeater>
위 예제를 사용하면 문제의 속성이 존재하지 않는다는 오류가 발생하지만 이는 사실이지만 d DataRow에도 존재하지 않습니다. System.Data.DataRow와 같이 바인딩 할 수 있습니까?
당신이 당신에게 데이터 모델 클래스와 평가 식을 공유 할 수있는 WebControl의 데이터 소스로 (3-5 단계에서 만든) 당신의 CustomTypeDescriptor 개체를 설정하고 그것에 바인딩 평가()를 사용 도움을 쉽게하십시오. –
"이것은 무엇이든 시도하고 시험하는 것은 악몽이됩니다." 예를 들면? –
@mark Okay 나는 그것을 얻은 것 같아 ... – Aristos