2009-07-09 74 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

偉大的答案,我想知道如何控制數據綁定知道哪些IEnumerable列表利用時,對象綁定到它?意思是,如果我想讓自己的控件成爲數據綁定的話。是否有某種組合屬性使某個IEnumable成員成爲數據綁定的「默認」? – 2012-07-25 19:19:35

相關問題