SpreadGridデザイナでの作業
SpreadGridデザイナでの基本的な流れの一つとして、列単位に設定を行った後に必要に応じて特別な行を追加していきます。今回は特別な行はありませんが、まずは列の設定を行ってから、複数行対応を行うという手順を取りたいと思います。
列の設定
今回のサンプルでは、JSONで取得したデータを設定したリストをSPREADに連結します。
そこでSpreadGridデザイナを使って、列に対するDataFieldに対してリストの要素名を設定します。同時にHeaderプロパティに列名をいれておくと良いでしょう。
一通り列の設定が終わったら[適用して終了]すれば、SpreadGridデザイナでの設定内容がVisual Studio側に反映されます。
ウィンドウデザイナでの確認
SpreadGridデザイナでの作業結果が、XAMLでどのように表現されているのか確認してみましょう。
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sg="http://schemas.grapecity.com/windows/spreadgrid/2012" Title="MainWindow" Height="350" Width="525"> <Grid> <sg:GcSpreadGrid HorizontalAlignment="Left" VerticalAlignment="Top" DocumentUri="/CZ1211SpreadWPF;component/document1.sgxml" /> </Grid> </Window>
XAMLコードをみて驚くのが、今回の設定を反映したものがどこにもないように見える点でしょう。SpreadGridデザイナでの設定は、XAML上ではなくDocumentUriで指定したsgxml(SpreadGridXML)ファイルに記録されます。このように別ファイルにすることで、XAML定義の肥大化を防ぎながらきめ細かなSpreadデザインが実現できているといえるでしょう。
データの作成
画面の設定が終わったので、価格比較サイトから情報を取得してリストを作成しましょう。今回は検索用APIがJSONで公開されているconeco.netを利用しました。利用に際しては利用者登録をしてAPIキーを取得しておく必要があります。サンプルコードではこの部分でコンパイルエラーがでるようにしてありますので、取得して行末のセミコロン(;)を削除して対応してください。
なお、Proxyサーバーを介したネットワークでは、データの取得がうまくいかないことがあるようです。
coneco.netでAPIを使うためには次のような手順でAPIキーを取得して、そのAPIキーを指定してアクセスする必要があります。
- https://www.coneco.net/api/ にアクセスしてメールアドレスとパスワードを設定
- 本登録用URLのお知らせメールに書かれたAPIキー取得用URLをクリック
- APIキー発行完了のお知らせメールにある「あなたのAPIキー」をプログラムにセット
商品検索結果の形式
coneco.netの製品検索結果はJSON形式で取得できます。返されてくるJSON形式に合わせたクラス定義は次のようになります。
Public Class ResultContext <System.Runtime.Serialization.DataContract()> _ Public Class TResult <System.Runtime.Serialization.DataMember()> _ Public Property Item As List(Of TItem) End Class <System.Runtime.Serialization.DataContract()> _ Public Class TItem <System.Runtime.Serialization.DataMember()> _ Public Property ComId As String : (略) : <System.Runtime.Serialization.DataMember()> _ Public Property Specifications As List(Of TSpecifications) End Class <System.Runtime.Serialization.DataContract()> _ Public Class TSpecifications <System.Runtime.Serialization.DataMember()> _ Public Property Id As String <System.Runtime.Serialization.DataMember()> _ Public Property Title As String <System.Runtime.Serialization.DataMember()> _ Public Property Spec As String End Class End Class