複数列ヘッダの作成
続いて、各成分の単位を設定する列ヘッダを追加します。これは、コードから行います。
まず、バリアント型の変数を用意し、C1FlexGridクラスのColumnHeadersコレクションオブジェクトを格納します。このコレクションオブジェクトクラスのAddメソッドを、引数にRowオブジェクトのコンストラクタを指定して実行すると、新しい列ヘッダ用の行が追加されます。
追加された列ヘッダは2行目になるため、各列ヘッダセルの番地は、左から(1,0)(1,1)という指定になります。これを使って、列名「エネルギー」から順番に栄養素の単位を入力していきます。
Imports C1.WPF.FlexGrid Imports System.IO Class MainWindow Public Sub New() ' この呼び出しはデザイナーで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後で初期化を追加します。 '--- C1FlexGridのカスタマイズ ------------------------------------------ '列ヘッダの追加 Dim ch = C1FlexGrid1.ColumnHeaders ch.Rows.Add(New Row()) ch(1, 2) = "Kcal" Dim i As Integer For i = 3 To 5 ch(1, i) = "g" Next For i = 6 To 7 ch(1, i) = "mg" Next
using C1.WPF.FlexGrid; using System.IO; namespace WPF_FlexGrid_cs { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); setcell(); } // --- C1FlexGridのカスタマイズ ------------------------------------------ public void setcell() { //列ヘッダの追加 var ch = C1FlexGrid1.ColumnHeaders; ch.Rows.Add(new Row()); ch[1, 2] = "Kcal"; int i; for(i=3;i<=5; i++) { ch[1, i] = "g"; } for (i = 6; i <= 7; i++) { ch[1, i] = "mg"; } }
列ヘッダセルのマージ
同じ単位の列ヘッダセルがいくつもあるので、これを1つにまとめます。まず、C1FlexGridクラスのAllowMergingプロパティに「AllowMerging.All」という値を設定します。これで、セルはすべてマージ可能になります。
次に、列ヘッダ2行目を指定して、AllowMergingプロパティを「true」に設定します。これで、同じ値のあるセルはすべて自動的に1つのセルにまとめられます。
'列ヘッダセルのマージ C1FlexGrid1.AllowMerging = AllowMerging.All ch.Rows(1).AllowMerging = True
//列ヘッダセルのマージ C1FlexGrid1.AllowMerging = AllowMerging.All; ch.Rows[1].AllowMerging = true;
セルデータを保存する処理
最後に、セルに入力したデータをテキストファイルに保存する処理を実装します。WindowにButtonコントロールを配置し、このClickイベントハンドラに作成します。
セルデータの参照は、Cellsプロパティを使用します。ここにセル番地を指定し、格納されているデータを取りだします。ファイルへの書き出しは、FileクラスのWriteAllTextメソッドを使用し、「,」を付け加えながら書き出します。ここでは、1行のセルのみ書き出すようにしていますが、forステートメントをネストすれば全行のセルデータを書き出すこともできます。
Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim i As Integer Dim data As String = "" Try For i = 0 To 7 data += C1FlexGrid1.Cells(0, i) + "," File.WriteAllText("data1.txt", data) Next MessageBox.Show("データをファイルに保存しました。", "ファイル保存", MessageBoxButton.OK, MessageBoxImage.Information) Catch ex As FileNotFoundException MessageBox.Show("ファイル処理に失敗しました", "ファイルエラー", MessageBoxButton.OK, MessageBoxImage.Error) End Try End Sub
private void button1_Click(object sender, RoutedEventArgs e) { int i; String data = ""; try { for(i=0; i<=7; i++) { data += C1FlexGrid1.Cells[0, i] + ","; File.WriteAllText("data1.txt", data); } MessageBox.Show("データをファイルに保存しました。", "ファイル保存", MessageBoxButton.OK, MessageBoxImage.Information); } catch(FileNotFoundException ex) { MessageBox.Show(ex.Message, "ファイルエラー", MessageBoxButton.OK, MessageBoxImage.Error); } }
まとめ
C1FlexGridコンポーネントはとても多機能なコンポーネントで、一度にすべての機能は紹介しきれません。今回は手始めに非連結データを使った表形式のデザインとファイルへの出力処理を扱ったアプリケーションを作成しました。
次回も引き続き、C1FlexGridコンポーネントの優れた機能を紹介していきます。