Visual C # 2008, чтение файла XML и заполнение списка. - PullRequest
1 голос
/ 10 июля 2009

Вот моя конечная цель ... взять этот XML-файл ..

<?xml version="1.0"?>
<Songs>
   <Song>
      <Name>Star Spangled Banner</Name>
      <Artist>Francis Scott Key</Artist>
      <Genre>Patriotic</Genre>      
   </Song>
   <Song>
      <Name>Blankity Blank Blank</Name>
      <Artist>Something Something</Artist>
      <Genre>Here here</Genre>
   </Song>
</Songs>

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

Я новичок в Visual C #, но некоторое время программировал, так что я просто ищу кого-то, кто укажет мне правильное направление ...

Глядя на Google, похоже, что люди, кажется, читают файлы XML и перебирают содержимое, чтобы заполнить компонент представления списка. Что кажется непрактичным в том, что есть все эти «наборы данных» и «источник привязки». Похоже, должен быть способ, которым я загружаю XML-файл в набор данных, затем связываю источник привязки с набором данных и, наконец, связываю представление списка с источником привязки (или чем-то в этом роде). Хотя я могу Похоже, что ни в одном из этих компонентов не найдено никаких методов «установки», которые бы это делали, я также безуспешно просматривал окно «свойств» этих компонентов.

Ответы [ 4 ]

3 голосов
/ 10 июля 2009

С Linq to XML вы можете сделать что-то вроде следующего:

XDocument loaded = XDocument.Load("myfile.xml");

var songs = from x in loaded.Descendants( "Song" )
select new
{
    Name = x.Descendants( "name" ).First().Value,
    Category = x.Descendants( "artist" ).First().Value,
    Genre = x.Descendants( "genre" ).First().Value,
}; //Returns an anonymous custom type

MyListView.DataSource = songs;  MyListView.DataBind();

Теперь вы можете использовать три поля (из анонимного типа, который вы только что вернули) в шаблоне ListView, и ваши данные будут отображены.

1 голос
/ 10 июля 2009

Нет проблем - см. System.Data.DataSet.ReadXml(), который загрузит ваши данные XML в DataSet.

Быстрая проверка:

DataSet mySet = new DataSet();
mySet.LoadXml("myfile.xml");
myTable = mySet.Tables[0];
myCols = myTable.Columns;
Console.Writeline("Column Names: {0}, {1}, {2}",
    myCols[0].ColumnName, myCols[1].ColumnName, myCols[2].ColumnName);

... result ...
Column Names: Name, Artist, Genre

Вы должны присвоить myTable свойству .DataSource некоторого элемента управления.

1 голос
/ 10 июля 2009

Вы можете использовать LINQ to XML - http://msdn.microsoft.com/en-us/library/bb387098.aspx.

0 голосов
/ 14 июля 2009

ObjectListView имеет DataListView, который является привязываемой к данным версией .NET ListView (WinForms). ObjectListView также автоматически обрабатывает категоризацию по группам, по исполнителю или жанру или любой другой информации, отображаемой в списке.

Программа с открытым исходным кодом, LyricsFetcher , считывает всю библиотеку iTunes из XML и использует ObjectListView для отображения песен. Загрузка 10000+ и показ их таким образом занимает меньше одной секунды на моем ноутбуке среднего класса.

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