我认为我很聪明地从内存密集型DataView切换到SortedDictionary作为内存高效的可排序数据结构。现在我不知道如何从<%#或Eval()表达式中获取数据源的键和值。
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>
有什么建议吗?
答案 0 :(得分:7)
使用以下两个选项之一:
<%# Eval("Key") %>
<!-- or -->
<%# Eval("Value") %>
取决于您是否需要密钥或字典中的值。
如果您考虑数据绑定的工作原理,这是有道理的。数据绑定是一个过程,控件采用可枚举的序列,迭代该序列,并使用反射根据项目公开的属性从序列中的每个项目中提取值。
由于SortedDictionary<TKey,TValue>
实现了IEnumerable<KeyValuePair<TKey, TValue>>
接口,您知道转发器将枚举一系列KeyValuePair<TKey, TValue>
个对象,并依次绑定到每个对象。
如果您查看KeyValuePair<TKey,TValue>
课程所展示的属性,您只会看到两个:Key
和Value
。由于它们是公共属性,因此您可以Eval
它们,并且控件将能够提取它们封装的值。