В v4 вам нужно picklist_option
https:// .../?fields=custom_field_values{field_name,value,picklist_option}
Насколько я могу судить, это нигде не задокументировано. Я должен был написать в службу поддержки, чтобы получить это.
Это вернет объект, который выглядит следующим образом:
{
"field_name": "Your Field Name",
"value": 1006006,
"picklist_option": {
"id": 1006006,
"option"=>"No"
}
}
Работает как для списков выбора, так и для списков не-выбора (те, которые не просто пропускают клавишу picklist_option
).
Можно ли использовать Словарь <строка, строка> вместо NameValueCollection. Так как Словарь <T, T> реализует IEnumerable, Вы могли использовать LINQ в качестве так:
resultGV.DataSource = from item in nvpDictionary
select new { Key = item.Key, Value = item.Value };
resultGV.DataBind();
[РЕДАКТИРОВАНИЕ] На самом деле Вы можете использовать Словарь непосредственно как:
resultGV.DataSource = nvpDictionary;
resultGV.DataBind();
Если это не отображает ключ/значение путем, Вы хотите Вас, может всегда возвращаться к LINQ. LINQ также позволил бы Вам переименовывать поля к тому, что Вы хотите.
[РЕДАКТИРОВАНИЕ], Если Вы не можете измениться на Словарь использования <T, T>, делает копию NameValueCollection как Словарь в методе и связывает с ним.
private void BindList(NameValueCollection nvpList)
{
Dictionary<string,string> temp = new Dictionary<string,string>();
foreach (string key in nvpList)
{
temp.Add(key,nvpList[key]);
}
resultGV.DataSource = temp;
resultGV.DataBind();
}
Если Вы делаете это много, Вы могли бы записать дополнительный метод, чтобы преобразовать в Словарь и использовать его так.
public static class NameValueCollectionExtensions
{
public static Dictionary<string,string> ToDictionary( this NameValueCollection collection )
{
Dictionary<string,string> temp = new Dictionary<string,string>();
foreach (string key in collection)
{
temp.Add(key,collection[key]);
}
return temp;
}
}
private void BindList(NameValueCollection nvpList)
{
resultGV.DataSource = nvpList.ToDictionary();
resultGV.DataBind();
}
Это немного хитро, потому что перечислитель возвращает только Ключи. Но, можно получить Значение ключа с Контейнером. DataItem, и затем изучают NameValueCollection для получения значения:
<asp:GridView id="gv" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Key">
<ItemTemplate><%# Container.DataItem %></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Value">
<ItemTemplate>
<%# ((NameValueCollection)gv.DataSource)[(string)Container.DataItem] %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Наконец я использовал решение, предложенное в Вашей дополнительной реализации, но без самого расширения.
private void BindList(NvpList nvpList)
{
IDictionary dict = new Dictionary<string, string>();
foreach (String s in nvpList.AllKeys)
dict.Add(s, nvpList[s]);
resultGV.DataSource = dict;
resultGV.DataBind();
}
возможно, сделайте некоторый класс помощника, который будет статичен и сделает перевод для меня в одном месте вместо многих. Это расширение довольно удобно... :-)
Спасибо. X.
Если у вас есть вложенный Repeater
(или GridView
тоже, я уверен), вам нужно изменить Mark Brackett's answer, чтобы он выглядел так, иначе вы получите ошибку времени выполнения о невозможности найти элемент управления с именем rpt.
<asp:Repeater ID="rpt" runat="server">
<ItemTemplate>
<li>
<%# Container.DataItem %>:
<%# ((NameValueCollection)((Repeater)Container.Parent).DataSource)[(string)Container.DataItem] %>
</li>
</ItemTemplate>
</asp:Repeater>