Как читать XML с помощью XLinq и привязать его к Combo Box? - PullRequest
0 голосов
/ 09 июня 2011

Привет. Я пытаюсь прочитать XML-файл, используя XLinq и привязав значения в поле со списком: -

 XDocument xmlDoc = XDocument.Load("abc.xml");
 var res = from c in xmlDoc.Element("Clients").Descendants("Client")
           select c;

 cmb1.BindingContext = new BindingContext();
 cmb1.DataSource = res;
 cmb1.DisplayMember = "Name";
 cmb1.ValueMember = "ID";

Моя структура XMl выглядит примерно так: -

<Clients>
    <Client>
        <ID>-1</ID>
        <Name>--Select--</Name>
    </Client>
    <Client>
        <ID>1</ID>
        <Name>A</Name>
    </Client>
    <Client>
        <ID>2</ID>
        <Name>B</Name>
    </Client>
    <Client>
        <ID>3</ID>
        <Name>C</Name>
    </Client>
    <Client>
        <ID>4</ID>
        <Name>D</Name>
    </Client>
</Clients>

Нопочему-то я получаю ошибки.Пожалуйста, помогите

Ошибка: -

System.ArgumentException: Complex DataBinding accepts as a data source either an IList or an IListSource.
   at System.Windows.Forms.ListControl.set_DataSource(Object value)

1 Ответ

1 голос
/ 10 июня 2011

Ваш текущий запрос выдает IEnumerable<XElement>, который не дает желаемых свойств.

   // not tested
   var res = from c in xmlDoc.Element("Clients").Descendants("Client")
   select new { Name=c.Element("Name").Value, ID = c.Element("ID").Value };

   ...
   cmb1.DataSource = res.ToList();

Идентификатор будет строкой.

...