将字典绑定到中继器
我有一个字典对象<string, string>
并希望将其绑定到一个中继器。 不过,我不确定要在aspx
标记中放置什么来实际显示键值对。 没有错误抛出,我可以得到它与List
工作。 我如何得到一个字典显示在中继器?
IDictionary<TKey,TValue>
也是一个ICollection<KeyValuePair<TKey, TValue>>
。
你需要绑定到像(未经testing)的东西:
((KeyValuePair<string,string>)Container.DataItem).Key ((KeyValuePair<string,string>)Container.DataItem).Value
请注意,项目返回的顺序是未定义的。 他们可能会在小字典的插入顺序中返回,但这并不能保证。 如果您需要保证订单, SortedDictionary<TKey, TValue>
按键sorting。
或者,如果您需要不同的sorting顺序(例如按值),则可以创build键值对的List<KeyValuePair<string,string>>
,然后对其进行sorting并绑定到sorting列表。
答 :我在标记中使用这个代码分别显示键和值:
<%# DataBinder.Eval((System.Collections.Generic.KeyValuePair<string, string>)Container.DataItem,"Key") %> <%# DataBinder.Eval((System.Collections.Generic.KeyValuePair<string, string>)Container.DataItem,"Value") %>
<%# Eval("key")%>
为我工作。
绑定到字典的值集合。
myRepeater.DataSource = myDictionary.Values myRepeater.DataBind()
在你的绑定字典中的条目types的后面写一个属性。 所以说,例如,我将一个Dictionary<Person, int>
绑定到我的Repeater。 我会写(在C#中)这样的属性在我的代码隐藏:
protected KeyValuePair<Person, int> Item { get { return (KeyValuePair<Person, int>)this.GetDataItem(); } }
然后,在我看来,我可以使用这样的代码段:
<span><%# this.Item.Key.FirstName %></span> <span><%# this.Item.Key.LastName %></span> <span><%# this.Item.Value %></span>
这使得更清洁的标记。 虽然我更喜欢被引用的值的通用名称较less,但我知道Item.Key
是一个Person
, Item.Value
是一个int
types,它们是强types的。
你可以(阅读: 应该 ),当然,重新命名Item
更多的象征性的字典中的条目。 这一点将有助于减less在我的示例使用命名模糊不清。
当然没有什么可以阻止你定义一个额外的属性,如下所示:
protected Person CurrentPerson { get { return ((KeyValuePair<Person, int>)this.GetDataItem()).Key; } }
然后在你的标记中使用它:
<span><%# this.CurrentPerson.FirstName %></span>
…没有一个阻止您访问相应的字典条目的.Value
。