2

我认为我很聪明地从内存密集型 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>

有什么建议么?

4

1 回答 1

7

使用以下两个选项之一:

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

取决于您是否需要字典中的键或值。

如果您考虑数据绑定的工作原理,这是有道理的。数据绑定是一个过程,通过该过程,控件获取可枚举序列,迭代该序列,并使用反射根据项公开的属性从序列中的每个项中提取值。

由于SortedDictionary<TKey,TValue>实现了IEnumerable<KeyValuePair<TKey, TValue>>接口,您知道中继器将枚举一系列KeyValuePair<TKey, TValue>对象,依次绑定到每个对象。

如果您查看KeyValuePair<TKey,TValue>该类公开的属性,您只会看到两个:KeyValue. 由于它们是公共属性,因此您可以Eval使用它们,并且控件将能够提取它们封装的值。

于 2009-07-09T14:07:53.950 回答