.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 件のコメント :
コメントを投稿