2009-07-09 3 views
2

저는 메모리 집약적 인 DataView에서 SortedDictionary를 메모리 효율적인 정렬 가능한 데이터 구조로 전환하는 것이 현명하다고 생각했습니다. 이제 나는 < % 또는 Eval() 표현식에서 데이터 소스의 키와 값을 얻는 방법을 모릅니다.Eval()을 사용하여 ASP Repeater에서 SortedDictionary의 값을 참조하는 방법은 무엇입니까?

SortedDictionary<int, string> data = RetrieveNames(); 
rCurrentTeam.DataSource = data; 
rCurrentTeam.DataBind(); 

<asp:Repeater ID="rNames" runat="server"> 
<ItemTemplate> 
    <asp:Label ID="lblName" runat="server" Text='<%# Eval("what?") %>' /> 
</ItemTemplate> 
</asp:Repeater> 

의견이 있으십니까?

답변

7

를 사용하여이 두 가지 옵션 중 하나를 당신이 키 또는 사전에서 값을 필요 여부에 따라

<%# Eval("Key") %> 
<!-- or --> 
<%# Eval("Value") %> 

.

데이터 바인딩이 어떻게 작동하는지 생각하면 의미가 있습니다. 데이터 바인딩은 컨트롤이 열거 가능한 시퀀스를 가져 와서 해당 시퀀스를 반복하고 리플렉션을 사용하여 항목이 노출하는 속성을 기반으로 시퀀스의 각 항목에서 값을 추출하는 프로세스입니다.

SortedDictionary<TKey,TValue>IEnumerable<KeyValuePair<TKey, TValue>> 인터페이스를 구현하므로 반복기가 KeyValuePair<TKey, TValue> 개체의 시퀀스를 차례로 열거하고 각 개체를 차례로 바인딩한다는 것을 알고 있습니다.

KeyValuePair<TKey,TValue> 클래스에 의해 공개되는 속성을 보면 KeyValue의 두 개만 표시됩니다. 공용 속성이므로 Eval 수 있으며 컨트롤은 캡슐화 된 값을 추출 할 수 있습니다.

+0

위대한 대답, 어떻게 databind 컨트롤에 개체를 바인딩 할 때 활용 IEnumerable 목록을 알고 궁금하네요? 의미, 만약 내가 자신의 컨트롤을 databound 수 있도록 만들고 싶습니다. 특정 IEnumable 멤버를 데이터 바인딩을위한 '기본값'으로 만드는 어셈블리 속성이 있습니까? –

관련 문제