SPREAD for WPF 4.0J - GcSpreadGrid
イベントによる検証
MESCIUS SPREAD for WPF 4.0J > 開発者ガイド > 検証 > イベントによる検証

セルの編集終了時に発生する CellEditEnding イベント、および行の編集終了時に発生する RowEditEnding イベントでデータを検証できます。

セルの ValidationErrors プロパティでセルの検証エラーのコレクションを、行の ValidationErrors プロパティで行の検証エラーのコレクションを参照できます。コレクションの Add メソッドでセルおよび行に検証エラーを追加すると、コントロールは対象のセルおよび行にエラーを表示します。

次のサンプルコードは1列目と2列目のセルが編集されたとき、日付かどうかを検証します。

サンプルコード
XAML
コードのコピー
<sg:GcSpreadGrid Name="gcSpreadGrid1" CellEditEnding="gcSpreadGrid1_CellEditEnding"/>
C#
コードのコピー
private void gcSpreadGrid1_CellEditEnding(object sender, SpreadCellEditEndingEventArgs e)
{
    CellPosition cell=e.CellPosition;
    if (e.CellPosition.Column == 0 || e.CellPosition.Column == 1)
    {
        String EditValue = (gcSpreadGrid1.EditElement as TextBox).Text;
        DateTime date = new DateTime();
        if (!(DateTime.TryParse(EditValue, out date)))
        {
            string msg = "日付を入力してください。";
            gcSpreadGrid1[cell].ValidationErrors.Add(new SpreadValidationError(msg,new Exception(msg)));
        }
    }
}
Visual Basic
コードのコピー
Private Sub gcSpreadGrid1_CellEditEnding(sender As Object, e As SpreadCellEditEndingEventArgs)
    Dim cell As CellPosition = e.CellPosition
    If e.CellPosition.Column = 0 OrElse e.CellPosition.Column = 1 Then
        Dim EditValue As String = TryCast(gcSpreadGrid1.EditElement, TextBox).Text
        Dim dateval As New DateTime()
        If Not (DateTime.TryParse(EditValue, dateval)) Then
            Dim msg As String = "日付を入力してください。"
            gcSpreadGrid1(cell).ValidationErrors.Add(New SpreadValidationError(msg, New Exception(msg)))
        End If
    End If
End Sub

セルの検証

次のサンプルコードは行の編集終了時、1列目より後の日付が2列目に設定されているかを検証します。

サンプルコード
XAML
コードのコピー
<sg:GcSpreadGrid Name="gcSpreadGrid1" RowEditEnding="gcSpreadGrid1_RowEditEnding"/>
C#
コードのコピー
private void gcSpreadGrid1_RowEditEnding(object sender, GrapeCity.Windows.SpreadGrid.SpreadRowEditEndingEventArgs e)
{
    int i = e.RowIndex;
    object val1=gcSpreadGrid1[i, 0].Value;
    object val2=gcSpreadGrid1[i, 1].Value;
    if (val1 != null && val2 != null)
    {
        DateTime startdate = new DateTime();
        DateTime enddate = new DateTime();
        if (!DateTime.TryParse(val1.ToString(), out startdate)) return;
        if (!DateTime.TryParse(val2.ToString(), out enddate)) return;               
               
        if (!(enddate.CompareTo(startdate) > 0))
        {
            string msg = "1列目より後の日付を2列目に入力してください。";
            gcSpreadGrid1.Rows[i].ValidationErrors.Add(new SpreadValidationError(msg, new Exception(msg)));
        }
    }
}
Visual Basic
コードのコピー
Private Sub gcSpreadGrid1_RowEditEnding(sender As Object, e As GrapeCity.Windows.SpreadGrid.SpreadRowEditEndingEventArgs)
    Dim i As Integer = e.RowIndex
    Dim val1 As Object = gcSpreadGrid1(i, 0).Value
    Dim val2 As Object = gcSpreadGrid1(i, 1).Value
    If val1 IsNot Nothing AndAlso val2 IsNot Nothing Then
        Dim startdate As New DateTime()
        Dim enddate As New DateTime()
        If Not DateTime.TryParse(val1.ToString(), startdate) Then
            Return
        End If
        If Not DateTime.TryParse(val2.ToString(), enddate) Then
            Return
        End If
        If Not (enddate.CompareTo(startdate) > 0) Then
            Dim msg As String = "1列目より後の日付を2列目に入力してください。"
            gcSpreadGrid1.Rows(i).ValidationErrors.Add(New SpreadValidationError(msg, New Exception(msg)))
        End If
    End If
End Sub

行の検証

関連トピック