セル型の設定
デザイナを起動して、[ランキング]列タイトルをクリックし、HorizontalAlignmentプロパティの値を「Right」にします。
[最安値]列、[最高値]列については、CellTypeプロパティを「Currency」に設定します。表示フォーマットには、3桁ごとに桁区切りをつけるためにShowSeparatorプロパティに「True」、小数点以下は不要なのでDecimalPlacesプロパティに「0」を設定します。
実行
この状態でどのような表示になるか実行してみましょう。
意図したとおり右寄せ表示になっていますが、最安値と最高値の表示フォーマット設定が反映されていません。
表示フォーマットを反映させる
表示フォーマットが反映されなかった理由は、データをバインディングしたときに要素の変数型を自動的にセル型として設定する機能がSPREADにあるからです。そのため、CellTypeプロパティへの設定したセル型が上書きされて設定した表示フォーマットも消されてしまうからです。
そこで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にすることでセル幅の自動設定も抑止できます。これでデザイナでの見た目が実行時にも確保できます。
条件付き書式の適用
ここまでは、前バージョンのSPREAD for Windows Formsでも対応が可能な範囲です。では、いよいよ今回のバージョンの新機能である、条件付き書式を使ったデータバー表示を行ってみましょう。
データバーの設定は、まずDatabarConditionalFormattingRuleに各種設定を行い、その後、該当範囲のセルのConditionalFormattingに設定します。DatabarConditionalFormattingRuleに設定できるのは、例えばデータバーの色になります。その他にも、データバーは最大値の時にセルいっぱいのデータバーを表示するので該当列の最大値が必要ですが、SPREADでは「ConditionalFormattingValue(ConditionalFormattingValueType.AutoMax)」と指定することで自動的に最大値を算出してくれます。
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
実行
対応が終わったので、実行してみましょう。
残念ながら、想定していたようなデータバーは表示できませんでした。
データソースの型の調整
データバーの設定が有効にならなかったのは、データバーがデータソースの変数型がString型であったためです。列のプロパティをCurreny型にしていたとしても、データソースの変数型がString型のままだとデータバーは表示されません。
さっそく、最安値と最高値のデータソースの変数型をString型からDecimal型またはInteger型などの数値型プロパティに変更しましょう。
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型に変更しています。
この対応により、無事データバーを表示することができます。
あとは製品名欄や発売元欄に対して列幅を調整するなど、画面全体を業務アプリとしての使用にふさわしい整形をすれば完成です。
まとめ
SPREAD for Windows Formsの豊富な機能から、2つの機能を紹介してみましたがいかがだったでしょうか。WPFに比べて表現力のベースが低いWindowsフォームですが、SPREADを使うことでWPFとは別の表現力を手に入れていれたといってよいでしょう。
その1つが今回紹介したExcelライクな条件付き書式であり、もう1つが今回は紹介しなかったInputManライクなテキスト型セルと日付型セルによる入力サポートです。
業務システム開発では「Excelライクな表示」を求められることが多く、そしてExcelの入力機能以上の入力を求められることが多いのも事実です。
最近はWebベースの業務システムも流行りましたが、だからこそWindowsフォームによるアプリを選択したときの要求水準は高いといえるでしょう。そのような高い要求水準を満たすには、標準コントロールでは荷が重いケースもあります。以前よりは機能が豊富になってきたとはいえ、標準コントロールでは力不足な案件が増えてきており、その要求に応えるアプリの作成には、市販コントロールの採用が重要度を増しています。
過去にSPREADを使ったことがある人もない人も、まずは評価版で最新のSPREAD for Windows Formsをぜひ体感してみてください。