GrapeCity.devlog

グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の、製品のTIPSや発売などに関する最新情報をお届けします。

GrapeCity

SPREAD for WPFで検証エラー通知をカスタマイズする!

2020年7月29日にリリースした「SPREAD for WPF(スプレッド)」の最新サービスパック「3.0J SP1」では、 スプレッドシートコントロール「GcSpreadSheet」について多くの機能強化と改善が行われました。

今回はその中の「エラー項目のドッグイア強調表示」と「新しいエラー通知UI」をはじめとするGcSpreadSheetの検証エラー通知全般についてご紹介します。

  1. Excel互換のデータ入力規則
  2. GcSpreadSheet独自のエラー通知UI
  3. カスタムのエラー通知UI
  4. おわりに

1. Excel互換のデータ入力規則

GcSpreadSheetには、V3.0Jの初版からExcelの「データ入力の規則」と同じ以下の機能が備えられています。

Excelでは、メニューの[データ]-[データの入力規則]でこれらの機能を設定しますが、GcSpreadSheetデザイナでも全く同じ方法で設定することができます。

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互換UIGcSpreadSheet独自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

DataValidationTemplateValidationErrorIndicatorの代わりに独自のコントロールを設定することで、エラーメッセージ入力時メッセージおよび無効データのマークを完全にカスタマイズすることができます。

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つのコントロールが提供する高度で豊富な数多くの機能を以下より是非お試しください。

  • グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の製品・技術資料をご覧ください。
  • グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の製品のデモアプリケーションをお試しください。