セルの編集終了時に発生する 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 |