Winform, ListBox источник данных в словарьпреобразование? - PullRequest
0 голосов
/ 17 августа 2011

В приложении winform связывание Listbox со словарем через свойство BindingSource.

Как мне вернуть этот BindingSource в исходный словарь путем приведения типа?

Например:

Dictionary<string, string> objDic = getData();
OrderedDictionry ord = GetOrderedDict(objDic)
listBox.DataSource = new BindingSource(ord , null);
listBox.DisplayMember = "Value";
listBox.ValueMember = "Key";

Теперь я хочу получить то же значение типа словаря от listBox.DataSource для запроса Linq !!.

Например:

var r = from t in (listBox.DataSource as Dictionary<string, string>).AsEnumaerable()
        select t;

выдает ошибку?

Как печататьприведение к словарю?

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Вы пытаетесь привести BindingSource к словарю.Вам нужно разыграть DataSource .

BindingSource. Я не думаю, что вы можете Cast из OrderedDictionary в Dictionary<>, но это было бы простовосстановить Dictionary<string, string>:

    BindingSource bs = (BindingSource)listBox1.DataSource;
    OrderedDictionary ord = (OrderedDictionary)bs.DataSource;
    Dictionary<string, string> dict = new Dictionary<string, string>();

    foreach (DictionaryEntry item in ord)
        dict.Add(item.Key.ToString(), item.Value.ToString());

Если вы хотите версию LINQ, вы можете сделать:

   BindingSource bs = (BindingSource)listBox1.DataSource;
   OrderedDictionary ord = (OrderedDictionary)bs.DataSource;        

   var dict = ord.Cast<DictionaryEntry>().ToDictionary(d => d.Key, d => d.Value);
1 голос
/ 17 августа 2011

РЕДАКТИРОВАТЬ 2 - после дальнейшего обсуждения / проверки :

Dictionary<string, string> A = (from t in ((OrderedDictionary)(((BindingSource)listBox1.DataSource).DataSource)).Cast<KeyValuePair<string, string>>() select t).ToDictionary(d => d.Key, d => d.Value);
...