SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

独自の入力グリッドを持ったWPFアプリケーションの作成

ComponentOne Studio Enterprise 2011JのC1FlexGridコンポーネントを使ったWPFアプリケーションの作成

  • このエントリーをはてなブックマークに追加

複数列ヘッダの作成

 続いて、各成分の単位を設定する列ヘッダを追加します。これは、コードから行います。

 まず、バリアント型の変数を用意し、C1FlexGridクラスのColumnHeadersコレクションオブジェクトを格納します。このコレクションオブジェクトクラスのAddメソッドを、引数にRowオブジェクトのコンストラクタを指定して実行すると、新しい列ヘッダ用の行が追加されます。

 追加された列ヘッダは2行目になるため、各列ヘッダセルの番地は、左から(1,0)(1,1)という指定になります。これを使って、列名「エネルギー」から順番に栄養素の単位を入力していきます。

列ヘッダを追加し、列名「エネルギー」から順番に栄養素の単位を入力
列ヘッダを追加し、列名「エネルギー」から順番に栄養素の単位を入力
Visual Basic
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
C#
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つのセルにまとめられます。

Visual Basic
'列ヘッダセルのマージ
C1FlexGrid1.AllowMerging = AllowMerging.All
ch.Rows(1).AllowMerging = True
C#
//列ヘッダセルのマージ
C1FlexGrid1.AllowMerging = AllowMerging.All;
ch.Rows[1].AllowMerging = true;
同じ値のセル(gとmgのセル)が1つのセルにまとまる
同じ値のセル(gとmgのセル)が1つのセルにまとまる

セルデータを保存する処理

 最後に、セルに入力したデータをテキストファイルに保存する処理を実装します。WindowにButtonコントロールを配置し、このClickイベントハンドラに作成します。

 セルデータの参照は、Cellsプロパティを使用します。ここにセル番地を指定し、格納されているデータを取りだします。ファイルへの書き出しは、FileクラスのWriteAllTextメソッドを使用し、「,」を付け加えながら書き出します。ここでは、1行のセルのみ書き出すようにしていますが、forステートメントをネストすれば全行のセルデータを書き出すこともできます。

Visual Basic
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
C#
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コンポーネントの優れた機能を紹介していきます。

参考文献

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6290 2011/11/28 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング