views:

957

answers:

3

Hey,

I have a dictionary object <string, string> and would like to bind it to a repeater. However, I'm not sure what to put in the aspx markup to actually display the key-value pair. There are no errors thrown and I can get it to work with a List. How do I get a dictionary to display in a repeater?

Thanks

Answer: I used this code in the markup to display the key and value individually:

<%# DataBinder.Eval((System.Collections.Generic.KeyValuePair<string, string>)Container.DataItem,"Key") %>
<%# DataBinder.Eval((System.Collections.Generic.KeyValuePair<string, string>)Container.DataItem,"Value") %>
A: 

Bind to the values collection of the dictionary.

myRepeater.DataSource = myDictionary.Values
myRepeater.DataBind()
Jason Berkan
Thanks. I'd like to display the Keys and Values, so I just used `myDictionary`. In the markup, I used `<%# Container.DataItem.ToString() %>`. This works, but it shows both, the key and value as one 'item'. Is there a way to get the `key` and `value` individually, so they can be formatted separately?
SSL
Yes. The objects in a dictionary are KeyValuePairs, so you can cast the DataItem as Joe shows in his answer.
Jason Berkan
+5  A: 

An IDictionary<TKey,TValue> is also an ICollection<KeyValuePair<TKey, TValue>>.

You need to bind to something like (untested):

((KeyValuePair<string,string>)Container.DataItem).Key
((KeyValuePair<string,string>)Container.DataItem).Value

Note that the order in which the items are returned is undefined. They may well be returned in the insertion order for small dictionaries, but this is not guaranteed. If you need a guaranteed order, SortedDictionary<TKey, TValue> sorts by key.

Or if you need a different sort order (e.g. by value), you could create a List<KeyValuePair<string,string>> of your key-value pairs, then sort it, and bind to the sorted list.

Joe
Thanks, that did the trick! I'll update my question with my code.
SSL
Is there a way to return the items in a certain order? In my (very short test) list of 4 items, they are returned in the order they've been placed.
SSL
+1,cool way of doing.
Srinivas Reddy Thatiparthy
+3  A: 

<%# Eval("key")%> worked for me.

Arun Krish