SHOEISHA iD

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

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

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(SPREAD)

「SPREAD for Windows Forms 7.0J」の新機能に迫る

グレープシティのフラグシップコンポーネントがWindows 8/Visual Studio 2012に対応

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

セル型の設定

 デザイナを起動して、[ランキング]列タイトルをクリックし、HorizontalAlignmentプロパティの値を「Right」にします。

 [最安値]列、[最高値]列については、CellTypeプロパティを「Currency」に設定します。表示フォーマットには、3桁ごとに桁区切りをつけるためにShowSeparatorプロパティに「True」、小数点以下は不要なのでDecimalPlacesプロパティに「0」を設定します。

図9 列の修飾設定
図9 列の修飾設定

実行

 この状態でどのような表示になるか実行してみましょう。

図10 実行結果
図10 実行結果

 意図したとおり右寄せ表示になっていますが、最安値と最高値の表示フォーマット設定が反映されていません。

表示フォーマットを反映させる

 表示フォーマットが反映されなかった理由は、データをバインディングしたときに要素の変数型を自動的にセル型として設定する機能がSPREADにあるからです。そのため、CellTypeプロパティへの設定したセル型が上書きされて設定した表示フォーマットも消されてしまうからです。

 そこでMe_Loadプロシージャにさらに追加設定を行います。

リスト6 Me_Loadプロシージャの変更
Private Sub Me_Load(sender As Object, e As EventArgs) Handles Me.Load
    Me.Cursor = Cursors.WaitCursor
    '
    Me.Result_Sheet.RowCount = 0
    Me.Result_Sheet.AutoGenerateColumns = False
    '
    Me.Result_Sheet.DataAutoCellTypes = False
    Me.Result_Sheet.DataAutoSizeColumns = False
    '
    :
      (略)
    :
    '
    Me.ViewModel.GetItemsCommand("")
End Sub

 DataAutoCellTypesプロパティをFalseにすることで、データソースの変数型ではなくSPREADの設定したセル型が使われます。またDataAutoSizeColumnsプロパティをFalseにすることでセル幅の自動設定も抑止できます。これでデザイナでの見た目が実行時にも確保できます。

図11 実行結果
図11 実行結果

条件付き書式の適用

 ここまでは、前バージョンのSPREAD for Windows Formsでも対応が可能な範囲です。では、いよいよ今回のバージョンの新機能である、条件付き書式を使ったデータバー表示を行ってみましょう。

 データバーの設定は、まずDatabarConditionalFormattingRuleに各種設定を行い、その後、該当範囲のセルのConditionalFormattingに設定します。DatabarConditionalFormattingRuleに設定できるのは、例えばデータバーの色になります。その他にも、データバーは最大値の時にセルいっぱいのデータバーを表示するので該当列の最大値が必要ですが、SPREADでは「ConditionalFormattingValue(ConditionalFormattingValueType.AutoMax)」と指定することで自動的に最大値を算出してくれます。

リスト7 ViewModel_PropertyChangedプロシージャの変更
Imports System.ComponentModel
Imports FarPoint.Win.Spread
Imports FarPoint.Win.Spread.Model
            :
            (略)
            :

    Private Sub ViewModel_PropertyChanged(sender As Object,
                                          e As PropertyChangedEventArgs) _
                                      Handles ViewModel.PropertyChanged
        Me.FpSpread1.DataSource = Me.ViewModel.Items
        '
        ' ◆条件付き書式設定(データバー)
        Dim dataBarRule As New DatabarConditionalFormattingRule()
        dataBarRule.AxisPosition = DataBarAxisPosition.Automatic
        dataBarRule.BorderColor = Color.Blue
        dataBarRule.NegativeFillColor = Color.Red
        dataBarRule.Gradient = True
        dataBarRule.Maximum = New ConditionalFormattingValue(ConditionalFormattingValueType.AutoMax)
        dataBarRule.Minimum = New ConditionalFormattingValue(ConditionalFormattingValueType.AutoMin)
        dataBarRule.UseNegativeFillColor = True
        dataBarRule.UseNegativeBorderColor = False
 
        Dim cf As New ConditionalFormatting(New CellRange(0,
                                                          3,
                                                          Me.Result_Sheet.RowCount,
                                                          2))
        cf.Add(dataBarRule)
        Me.Result_Sheet.Models.ConditionalFormatting.Add(cf)
        '
        Me.Cursor = Cursors.Default
    End Sub

実行

 対応が終わったので、実行してみましょう。

図12 データバー設定後の実行結果
図12 データバー設定後の実行結果

 残念ながら、想定していたようなデータバーは表示できませんでした。

データソースの型の調整

 データバーの設定が有効にならなかったのは、データバーがデータソースの変数型がString型であったためです。列のプロパティをCurreny型にしていたとしても、データソースの変数型がString型のままだとデータバーは表示されません。

 さっそく、最安値と最高値のデータソースの変数型をString型からDecimal型またはInteger型などの数値型プロパティに変更しましょう。

リスト8 プロパティの型変更
Public Class ConecoContext
    Public Property Ranking As Integer
    Public Property ComId As String
    Public Property Name As String
    Public Property Manufacturer As String
    Public Property LowestPrice As Decimal
    Public Property HighestPrice As Decimal
    Public Property CPU As String
    Public Property Disk As String
    Public Property Memory As String
    Public Property Display As String
End Class

 データバーを表示したいConecoContextクラスのLowestPriceとHighestPriceを、String型からDecimal型に変更しています。

 この対応により、無事データバーを表示することができます。

 あとは製品名欄や発売元欄に対して列幅を調整するなど、画面全体を業務アプリとしての使用にふさわしい整形をすれば完成です。

図13 型の調整後の実行結果
図13 型の調整後の実行結果

まとめ

 SPREAD for Windows Formsの豊富な機能から、2つの機能を紹介してみましたがいかがだったでしょうか。WPFに比べて表現力のベースが低いWindowsフォームですが、SPREADを使うことでWPFとは別の表現力を手に入れていれたといってよいでしょう。

 その1つが今回紹介したExcelライクな条件付き書式であり、もう1つが今回は紹介しなかったInputManライクなテキスト型セルと日付型セルによる入力サポートです。

 業務システム開発では「Excelライクな表示」を求められることが多く、そしてExcelの入力機能以上の入力を求められることが多いのも事実です。

 最近はWebベースの業務システムも流行りましたが、だからこそWindowsフォームによるアプリを選択したときの要求水準は高いといえるでしょう。そのような高い要求水準を満たすには、標準コントロールでは荷が重いケースもあります。以前よりは機能が豊富になってきたとはいえ、標準コントロールでは力不足な案件が増えてきており、その要求に応えるアプリの作成には、市販コントロールの採用が重要度を増しています。

 過去にSPREADを使ったことがある人もない人も、まずは評価版で最新のSPREAD for Windows Formsをぜひ体感してみてください。

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

  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(SPREAD)連載記事一覧

もっと読む

この記事の著者

初音玲(ハツネアキラ)

 国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。 個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。 Microsoft MVP for Windows Development ブログ:http://hatsune.hatenablog.jp/

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6993 2016/03/29 17:40

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング