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

相关问题