SHOEISHA iD

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

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

ComponentZine(CalendarGrid)(AD)

CalendarGrid for Windows Formsで、カレンダー機能のデータをプログラムから扱う

CalendarGrid for Windows Formsを活用したWindowsフォームアプリケーションの作成

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

プログラムによるデータ変更(2)

複数行表示を行う

 descriptionの値は文字数が多くなるので、セルの幅を超えた場合は折り返し表示します。

セルを折り返し対応させる
// descriptionは折り返し表示できるように
var cellType = new GrapeCity.Win.CalendarGrid.CalendarTextBoxCellType();
cellType.Multiline = true;
template.Content[2, 0].CellType = cellType;

 テキストボックスのセルを折り返し対応させる場合は、Multilineプロパティをtrueにします。

 これでカレンダーのデータを動的に設定できました。プログラムでの編集が終了したらEndEditメソッドを呼び出します。

CalendarGridにリストを表示する処理全文
private void Form1_Load(object sender, EventArgs e)
{
    List<CalendarData> dataList = new List<CalendarData>();
    dataList.Add(new CalendarData() { date = new DateTime(2016, 1, 1), title = "初詣", description = "神社に行ってお参りをする。" });
    dataList.Add(new CalendarData() { date = new DateTime(2016, 1, 4), title = "仕事はじめ", description = "朝10時に出社" });

    // データソースとCalendarGridの日付を関連付ける
    gcCalendarGrid1.DataSource = dataList;
    gcCalendarGrid1.DateField = "date";

    // テンプレートにリストの項目を紐づける
    var template = gcCalendarGrid1.Template;

    // セルの上から2行目、左から0列目にtitleプロパティの値を表示する
    template.Content[1, 0].DataField = "title";

    // セルの上から3行目、左から0列目にdescriptionプロパティの値を表示する
    template.Content[2, 0].DataField = "description";

    // descriptionは折り返し表示できるように
    var cellType = new GrapeCity.Win.CalendarGrid.CalendarTextBoxCellType();
    cellType.Multiline = true;
    template.Content[2, 0].CellType = cellType;

    // カレンダーに表示する最初の日付を設定する
    gcCalendarGrid1.FirstDateInView = new DateTime(2016, 1, 1);

    // 編集の終了を通知
    gcCalendarGrid1.EndEdit();
}

 アプリケーションを実行すると以下のように元日と4日の予定が表示されます。

実行結果
実行結果

実行画面での編集に対応する

 画面に予定を表示することができました。今度はアプリケーションの画面から新規に予定を追加された際にプログラム上のデータも変更されるようにします。

 現段階で予定を追加すると以下のようなエラーが発生します。

エラー
エラー

 これはDataSourceプロパティに渡したリスト(List<CalendarData>)がIBindingListインターフェイスを実装していないためです。IBindingListを自前で実装することも可能ですが、今回は実装済みのBindingListクラスに置き換えることにします。

 List<CalendarData>の部分を以下のように書き換えます。

CalendarGridにリストを表示する処理全文
BindingList<CalendarData> dataList = new BindingList<CalendarData>();

 これで、画面上で予定を追加した際に、プログラム側も変更されるようになりました。

新しい予定を画面から追加する
新しい予定を画面から追加する
データも変更される
データも変更される

スタイルを変えても同じデータが使える

 日付セルの項目を変えないかぎり、スタイルを変更してもバインドはそのまま動作します。

スタイルを変えてもコードは変更不要
スタイルを変えてもコードは変更不要

 これはCalendarGridの扱いやすさを表すと同時に、同社の同様の操作性を持つ「MultiRow for Windows Forms」や「SPREAD for Windows Forms」と組み合わせてより幅が広い画面表現が可能であることを示しています。

次のページ
ガントチャート風のバーの追加

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

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

もっと読む

この記事の著者

西村 誠(ニシムラ マコト)

 Microsoft MVP Windows Platform Development。 Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。 ブログ:眠るシーラカンスと水底のプログラマー 著書:基礎から学ぶ Windowsストアアプリ開発

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

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9190 2016/02/03 11:45

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング