XMLファイルからDataGridにデータを読み込む方法


.NET Framework 4.0からDataGridが搭載されました。
便利なので使ってみたのですが、XMLファイルからのデータの読み込み方法がよく分からなかったのでまとめてみました。
以下の手順で行うようです。サンプルコードも合わせて記載しますので参考にしてください。
1.)手順
 1.DataGrid内にカラム(列)を準備する
 書式は以下です。

 <DataGridTextColumn Header="<列名>" Binding="{Binding XPath=<データ元のXMLファイルのXPath>}"/>

 2.C#のコードを書く
   //XMLファイルを読み込む
   XmlDocument xmldoc = new XmlDocument();
   xmldoc.Load(dlg.FileName);
   //割当先のノードを設定する
   XmlNodeList node;
   node = xmldoc.SelectNodes("<読み込みノードのXPath");
   //データグリッドにXMLファイルを設定する
   dataGrid1.ItemsSource = node;
2.)サンプルコード
XMLファイルのサンプル

<?xml version="1.0" encoding="Shift_JIS"?>
<tv generator-info-name="tsEPG2xml" generator-info-url="http://localhost/">
 <programme start="20100503210000 +0900" stop="20100503220000 +0900" channel="12">
  <title lang="ja_JP">[二][字]ニュースウオッチ9</title>
  <desc lang="ja_JP">▽上海万博を青山祐子が現地から! 人気No1は?急速発展の光と影 ▽井上戯曲との28年間 渡辺美佐子さんと化粧【キャスター】大越健介,青山祐子ほか</desc>
  <category lang="ja_JP">ニュース・報道</category>
  <category lang="en">news</category>
  <event_id>3d52</event_id>
  <table_id>50</table_id>
  <section_number>56</section_number>
 </programme>
</tv>

XAMLのサンプル

<Window x:Class="EpgView.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
  <DockPanel FlowDirection="LeftToRight">
    <DataGrid AutoGenerateColumns="False" Name="dataGrid1" DockPanel.Dock="Bottom" VerticalGridLinesBrush="#FFB9C9F8" Background="#17000000">
     <DataGrid.Columns>
       <DataGridTextColumn Header="開始日時" Binding="{Binding XPath=@start}"/>
       <DataGridTextColumn Header="終了日時" Binding="{Binding XPath=@stop}"/>
       <DataGridTextColumn Header="番組名" Binding="{Binding XPath=title}"/>
       <DataGridTextColumn Header="ジャンル" Binding="{Binding XPath=category}"/>
       <DataGridTextColumn Header="内容" Binding="{Binding XPath=desc}"/>
     </DataGrid.Columns>
    </DataGrid>
  </DockPanel>
</Window>

C#のコード

//XMLファイルを読み込む
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(dlg.FileName);
//割当先のノードを設定する
XmlNodeList node;
node = xmldoc.SelectNodes("//programme");
//データグリッドにXMLファイルを設定する
dataGrid1.ItemsSource = node;


0 件のコメント :

コメントを投稿