Не могу добавить элементы в ListView из моих XML-файлов в WPF - PullRequest
0 голосов
/ 13 марта 2012

Основная проблема в этом.

У меня есть 2 XML-файла, содержащие информацию о том, что делает моя компания.Один считается шаблоном XML, в котором вы можете найти общую информацию, а другой - каталог, содержащий информацию о каждом отдельном оборудовании, содержащую ссылку на шаблон XML.

Они похожи на этот каталог XML

<list>
   <A>
      <B>
        <c>reference to template</c>
        <d>info 2</d>
        <e>info 3</e>
        <f>info 4</f>
        <g>
            <h>info5</h>
            <i>info5</i>
        </g>
      </B>
      <B>
        <c>reference to template</c>
        <d>info a</d>
        <e>info s</e>
        <f>info d</f>
        <g>
            <h>infof</h>
            <i>infog</i>
        </g>
      </B>
      <B>
        <c>reference to template</c>
        <d>info h</d>
        <e>info j</e>
        <f>info k</f>
        <g>
            <h>infot</h>
            <i>infoy</i>
        </g>
      </B>
   </A>
</list>

Шаблон

<list>
   <R>
      <S>
        <t>info 7</t>
        <u>info 8</u>
        <v>info 9</v>
        <w>info 10</w>
      </S>
   </R>
</list>

Что мне нужно сделать, это отобразить все оборудование, каталогизированное в listView, которое будетвыкладывает информацию из обоих XML.

Я пробовал это, но безуспешно, все, что я могу отобразить, - это одно оборудование, хотя на самом деле оно не отображается, все, что появляется, - это невидимая информация.Я бегу по обоим XML-файлам, используя это:

xDocument load = xDocument.load("Myxml.xml");
var run = (from x in load.Descendants("A")
           where x.Element("c").Value == comboBox1.SelectedItems.ToString()
           select new
           {
             a = x.Element("d").Valuye.ToString(),
             //here I gather the rest of the information
           }).ToList();
listView.Items.Add(run);
//after that I tried listview.Items.Add(run.a) ... but the code which I use to run through
//ends with FirstorDefault(), instead of ToList() and I try adding all the components manually

Единственное, что появляется, это невидимое оборудование, что означает, что когда я нажимаю на него, я вижу, что там что-то есть, но я просто не вижуИнформация.

Поэтому я попытался добавить строки, используя ту же методологию, но получил тот же результат.

Может кто-нибудь сказать мне, где моя ошибка?Я не вижу этого

PS: После того, как мне удастся сделать это, я собираюсь реализовать функцию, которая, дважды щелкнув по информации, клиент сможет изменить информацию.Если кто-то знает, с чего начать, пожалуйста, укажите мне правильное направление

Ответы [ 4 ]

1 голос
/ 13 марта 2012

Я считаю, что ваш запрос linq нуждается в некоторой доработке, например:

xDocument load = xDocument.load("Myxml.xml");
var run = (from x in load.Descendants("B")
       where x.Element("c") == comboBox1.SelectedItems.ToString()
       select new
       {
         a = x.Element("d").Valuye.ToString(),
         //here I gather the rest of the information
       }).ToList();

Кроме того, вы должны попробовать использовать цикл for в списке и добавлять строки одну за другой

foreach (var item in run)
    listView.Items.Add(item.a);

Вы можете взглянуть на различные перегрузки метода Add на этой странице MSDN:

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.listviewitemcollection.aspx

0 голосов
/ 14 марта 2012

Я выяснил, что не так, мне нужно было добавить наблюдаемую коллекцию, в которую я добавил контент, который хотел поместить в список просмотра, а затем я поместил информацию в наблюдаемую коллекцию в список просмотра.

Спасибо всем за помощь.

0 голосов
/ 13 марта 2012

Если вы используете режим Detail представления списка, вам нужно добавить columns в список и subitems в элементах, соответствующих каждому столбцу, иначе ваши элементы будут "невидимыми".

Подробнее см. ListView.Columns и ListViewItem.SubItems.

0 голосов
/ 13 марта 2012

Если честно, я не совсем уверен, в чем вопрос. Я сделаю попытку по запросу XDocument.

При выполнении сравнений необходимо сравнивать правильные типы. Сравнение из примера даже не скомпилируется, потому что есть сравнение XElement с String:

where x.Element("c") == comboBox1.SelectedItems.ToString()

Должно быть:

where x.Element("c").Value == comboBox1.SelectedItems.ToString()

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

string match = comboBox1.SelectedItems.ToString();

var doc = XDocument.Load( "MyXml.xml" );

var query = doc.Descendants( "B" )
    .Where( x => x.Element( "c" ).Value == match )
    .Select( x => x.Element( "d" ).Value )
    .ToList();

Обратите внимание, что запрос начинается с элемента "B". Начиная с элемента «A», в предложении where будет найдено 0 элементов.

Кроме того, легче разбить эти типы проблем, используя дополнительные переменные для разбиения оператора, то есть переменные для критериев соответствия, для XDocument, для запроса и т. Д. Даже запрос может быть при необходимости разбиваются на дополнительные подзапросы.

Это должно помочь вам начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...