2020年7月29日にリリースした「SPREAD for WPF(スプレッド)」の最新サービスパック「3.0J SP1」では、
スプレッドシートコントロール「GcSpreadSheet」について多くの機能強化と改善が行われました。
今回はその中の「エラー項目のドッグイア強調表示」と「新しいエラー通知UI」をはじめとするGcSpreadSheetの検証エラー通知全般についてご紹介します。
1. Excel互換のデータ入力規則
GcSpreadSheetには、V3.0Jの初版からExcelの「データ入力の規則」と同じ以下の機能が備えられています。
Excelでは、メニューの[データ]-[データの入力規則]でこれらの機能を設定しますが、GcSpreadSheetデザイナでも全く同じ方法で設定することができます。
それでは、これらの機能と実装方法について具体的にみていきましょう。
エラーメッセージ
入力規則で指定できる「入力値の種類」や「スタイル」で設定可能な項目もExcelと全く同じです。また、停止・注意・情報の各スタイルで表示されるエラーメッセージダイアログのボタンの動作もExcelと同じになっています。上のエラーメッセージダイアログは「入力値の種類」を整数に、「スタイル」を停止にしたときのものです。
入力値の種類:
- 整数
- 小数点数
- リスト
- 日付
- 時刻
- 文字列(長さ指定)
- ユーザー設定
スタイル:
- 停止(Stop)
- 注意(Warning)
- 情報(Information)
データ入力規制をコードで実装するときは、IValidation
インタフェースを作成します。次のコードは、整数値の入力規制で10以上の値のみを許可する例です。データ入力規制(データ検証)の詳細についてこちらで解説しています。
// 整数値の入力規則 IValidation validation = sheet.Cells[2, 1].Validation.Add( DataValidationType.WholeNumber, DataValidationErrorStyle.Stop, DataValidationOperator.GreaterThanOrEqual, "10"); validation.ShowInput = true; validation.InputTitle = "入力メッセージ"; validation.InputMessage = "10以上の整数を入力してください。"; validation.ShowError = true; validation.ErrorTitle = "範囲外エラー"; validation.ErrorMessage = "10以上の整数を入力してください。"; validation.IgnoreBlank = true;
入力時メッセージ
セルがアクティブになったときに入力規制の内容を説明する「入力時メッセージ」の機能もExcelと同じように設定できます。
入力メッセージの表示/非表示をコードで切り替えるには、IValidation
インタフェースのShowInput
プロパティを使います。ちなみに、先ほどのコードでは、これをtrue
に設定しています。
無効データのマーク
Excelでは、メニューから[データ]-[データの入力規則]-[無効データのマーク]を選択することで、入力規制に違反した値が設定されているセルに赤丸の検証マークを設定できます。また、[データ]-[データの入力規則]-[入力規則マークのクリア]を選択すると、これを解除できます。
GcSpreadSheetでこれらの動作を実装するには、下のようにIWorkSheet
インタフェースのCircleInvalid
メソッドとClearCircles
メソッドを使用します。
private void btnMark_Click(object sender, RoutedEventArgs e) { // 検証マークの設定 gcSpreadSheet1.Workbook.ActiveSheet.CircleInvalid(); } private void btnUnmark_Click(object sender, RoutedEventArgs e) { // 検証マークの解除 gcSpreadSheet1.Workbook.ActiveSheet.ClearCircles(); }
2. GcSpreadSheet独自のエラー通知UI
V3.0J SP1のGcSpreadSheetでは、DataValidationTemplate
で定義されている組み込みのValidationErrorIndicator
を使うことで、Excel互換のエラー通知UIとは異なるGcSpreadSheet独自のUIを表示できます。
上のGIFアニメ画像で確認できるようにValidationErrorIndicator
を使った独自のUIでは、エラーメッセージはツールチップで表示され、無効データのマークはドッグイア(セル右上隅の赤い三角形)になります。
Excel互換UIとGcSpreadSheet独自UIの比較
機能 | Excel互換UI | GcSpreadSheet独自UI |
---|---|---|
エラーメッセージ | メッセージダイアログ | ツールチップ |
入力時メッセージ | ツールチップ | ツールチップ |
無効データのマーク | 赤丸 | ドッグイア |
また、ValidationErrorIndicator
の属性をカスタマイズすることで、エラーメッセージの背景色、前景色、境界線の太さ、フォントサイズ、フォントスタイルなどを変更できます。
このエラーメッセージは、下記のXAMLを記述して組み込みのスタイルをカスタマイズしたものです。
<gss:GcSpreadSheet x:Name="gcSpreadSheet2" Grid.Row="1" Margin="5"> <gss:GcSpreadSheet.DataValidationTemplate> <DataTemplate DataType="{x:Type gss:DataValidationContext}" > <!--<gss:ValidationErrorIndicator/>--> <gss:ValidationErrorIndicator Background="LimeGreen" Foreground="White" BorderBrush="Crimson" BorderThickness="3"/> </DataTemplate> </gss:GcSpreadSheet.DataValidationTemplate> </gss:GcSpreadSheet>
ValidationErrorIndicatorのカスタマイズではエラーメッセージ以外の表示スタイルは変更できません。入力時メッセージやドッグイアをカスタマイズするには、下記の「カスタムのエラー通知UI」で紹介する方法を使います。
また、DataValidationTemplateのDataTemplateはコントロールごとにしか設定できないので、GcSpreadSheetコントロールに複数のシートがある場合、シートごとに異なるタイプのUI(エクセル互換、GcSpreadSheet独自、カスタム)を使うことはできません。
3. カスタムのエラー通知UI
DataValidationTemplate
でValidationErrorIndicator
の代わりに独自のコントロールを設定することで、エラーメッセージと入力時メッセージおよび無効データのマークを完全にカスタマイズすることができます。
DataValidationTemplate
で定義されている組み込みのValidationErrorIndicator
を使用する場合のXAMLは次のとおりです。
<gss:GcSpreadSheet.DataValidationTemplate> <DataTemplate DataType="{x:Type gss:DataValidationContext}" > <gss:ValidationErrorIndicator/> </DataTemplate> </gss:GcSpreadSheet.DataValidationTemplate>
一方、独自のコントロールを設定する場合のXAMLは下のようになります。ここでは、CustomValidationIndicatorControl
が独自のコントロールのクラス名です。
<gss:GcSpreadSheet.DataValidationTemplate> <DataTemplate DataType="{x:Type gss:DataValidationContext}" > <local:CustomValidationIndicatorControl/> </DataTemplate> </gss:GcSpreadSheet.DataValidationTemplate>
独自のコントロールを作成して検証エラー通知をカスタマイズする具体的な方法をヘルプで紹介していますので、ご一読いただければと思います。
また、GitHubで今回紹介したエラー通知のカスタマイズ方法のサンプルを公開していますので、こちらもご覧ください。
4. おわりに
製品Webサイトでは、SPREAD for WPF 3.0Jのデモアプリケーションを公開しています。今回紹介したExcel互換を追求したGcSpreadSheetのほか、表としての機能に磨きをかけたGcSpreadGrid、それぞれのデモをご用意しています。これら2つのコントロールが提供する高度で豊富な数多くの機能を以下より是非お試しください。