Привязка выпадающего списка со словарем - PullRequest
2 голосов
/ 25 марта 2011

Я привязываю словарь к выпадающему списку.

Скажем, например, у меня есть следующие элементы в словаре:

{"Test1", 123}, {"Test2", 321} 

Я бы хотел, чтобы выпадающий текстВозьмите следующий формат:

Test1 - Count: 123
Test2 - Count: 321

Я шел по следующему пути без удачи:

MyDropDown.DataTextFormatString = string.Format("{0} - Count: {1}", Key, Value);

Спасибо :)) 1012 *

Ответы [ 3 ]

5 голосов
/ 25 марта 2011

Вы можете создать проекционное представление с помощью LINQ в своем словаре и создать анонимный тип для хранения вашего пользовательского форматирования.

Dictionary<string, int> values = new Dictionary<string, int>();
values.Add("First", 321);
values.Add("Second", 456);
values.Add("Third", 908);


var displayView = from display in values
                    select new { DisplayText = display.Key + " Count: " + display.Value };

DropDownList1.DataSource = displayView;
DropDownList1.DataTextField = "DisplayText";
DropDownList1.DataBind();
1 голос
/ 25 марта 2011

Нельзя использовать строку. Формат в

DataTextFormatString

Попробуйте следующий код.

Dictionary<string, int> s = new Dictionary<string, int>();
        s.Add("Test1", 123);
        s.Add("Test2", 321);

        foreach(KeyValuePair<string,int> temp in s)
        {
            DropDownList1.Items.Add(new ListItem(string.Format("{0} - Count: {1}", temp.Key, temp.Value),temp.Value.ToString()));
        }
1 голос
/ 25 марта 2011

Я не думаю, что DropDownList поддерживает DataTextFormatString s, которые объединяют строку так, как вы хотите это сделать. Насколько я знаю, вы можете использовать только строки формата для чисел и дат. (Примеры см. Здесь: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.datatextformatstring.aspx)

Вы можете сделать это так, как предлагает ChristiaanV (анонимный тип), или использовать свой собственный POCO class (класс, содержащий только свойства).
Помните, что использование анонимных типов ограничено. Вы не можете использовать их в BusinessLayer-Assembly, и GUI-Assembly может использовать результат, потому что возможность возврата анонимного типа из метода очень ограничена.

Я бы посоветовал вам сделать что-то вроде этого:

public class MyPOCO
{
  public int MyPrimaryKey {get;set;}
  public String DisplayString {get;set;}
}

Создайте List<MyPOCO> в своем коде и привяжите его к свойству DataSource. Установите DataValueField для MyPrimaryKey и DataTextField для DisplayString

Если у вас возникли проблемы с привязкой данных на обратных передач , вы можете сделать следующее:

  1. Создать метод, который возвращает List<MyPOCO>
  2. Создайте ObjectDataSource и используйте мастер для выбора методов, которые вы создали в 1.
  3. Назначьте идентификатор ObjectDataSource для DataSourceID из DropDownList.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...