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

次の 2 つのオプションのいずれかを使用します。

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

キーが必要か辞書の値が必要かによって異なります。

これは、データ バインディングがどのように機能するかを考えると理にかなっています。データ バインディングは、コントロールが列挙可能なシーケンスを受け取り、そのシーケンスを反復し、リフレクションを使用して、項目が公開するプロパティに基づいてシーケンス内の各項目から値を抽出するプロセスです。

SortedDictionary<TKey,TValue>インターフェースを実装しているためIEnumerable<KeyValuePair<TKey, TValue>>、リピーターが一連のKeyValuePair<TKey, TValue>オブジェクトを列挙し、それぞれに順番にバインドすることがわかります。

KeyValuePair<TKey,TValue>クラスによって公開されるプロパティを見ると、Keyとの 2 つだけが表示されますValue。これらはパブリック プロパティEvalであるため、カプセル化された値をコントロールで抽出できます。

于 2009-07-09T14:07:53.950 に答える