FlexGrid for WinForms
検証
> 検証

データ検証は、ユーザーが列のセルに入力できるデータを制御します。データは、さまざまな方法で検証できます。たとえば、無効なキー入力を制限したり、エラーや警告情報を表示したり、ユーザーから無効な入力値を受け取ったときに元の値に戻すことができます。

エディタ検証

許容される値の範囲を指定したり、入力文字列の最小の長さを定義するなどの検証を実装するため、FlexGrid には Column クラスの EditorValidation プロパティが用意されています。このプロパティは ValidationRuleCollection クラス型です。このクラスは、FlexGrid の列に高度なデータ検証を実装できるように、事前定義されたルールで構成されています。たとえば、次のコードサンプルでは、EditorValidation プロパティを使用して、StringLength および Required の検証ルールが Customer 列に適用されています。

次のコードを参照して、WinForms FlexGrid の列に検証ルールを追加する方法を確認してください。

private void SetupGridColumns()
{
  var customerNameColumn = _flex.Cols["CustomerName"];
  customerNameColumn.Caption = "Customer";
  customerNameColumn.EditorValidation.Add(new RequiredRule());
  customerNameColumn.EditorValidation.Add(new StringLengthRule()
  {
    MinimumLength = 2
  });
  var customerIDColumn = _flex.Cols["CustomerID"];
  customerIDColumn.Visible = false;
  var frequencyColumn = _flex.Cols["Frequency"];
  frequencyColumn.Format = "0%";
  frequencyColumn.AllowEditing = false;
  var ageColumn = _flex.Cols["Age"];
  ageColumn.EditorValidation.Add(new RequiredRule());
  ageColumn.EditorValidation.Add(new RangeRule()
  {
    Minimum = 10,
    Maximum = 90
  });
}                       
Private Sub SetupGridColumns()
    Dim customerNameColumn = _flex.Cols("CustomerName")
    customerNameColumn.Caption = "Customer"
    customerNameColumn.EditorValidation.Add(New RequiredRule())
    customerNameColumn.EditorValidation.Add(New StringLengthRule() With {
        .MinimumLength = 2
    })
    Dim customerIDColumn = _flex.Cols("CustomerID")
    customerIDColumn.Visible = False
    Dim frequencyColumn = _flex.Cols("Frequency")
    frequencyColumn.Format = "0%"
    frequencyColumn.AllowEditing = False
    Dim ageColumn = _flex.Cols("Age")
    ageColumn.EditorValidation.Add(New RequiredRule())
    ageColumn.EditorValidation.Add(New RangeRule() With {
        .Minimum = 10,
        .Maximum = 90
    })
End Sub
         

検証を適用するもう 1 つの方法は、ValidateEdit イベントをキャプチャして、Editor.Text プロパティの値をチェックすることです。取得した値が無効な場合は、Cancel パラメータを true に設定して、ユーザーが有効な値を入力するまで、グリッドを編集モードのままにします。このような検証は、有効値の範囲を設定したり、別のセル値に基づいて現在のセル値を検証するなどのシナリオで使用できます。 たとえば、次のサンプルコードでは、通貨列への入力値を検証して、入力された値が 1,000 〜 10,000 であることを確認しています。

次のコードに示すように、WinForms FlexGrid のセルが編集モードである間、ValidateEdit イベントを使用して有効な値かどうかをチェックします。

private void _flex_ValidateEdit( object sender, ValidateEditEventArgs e)
{
 
    // 金額を検証します
    if (_flex.Cols[e.Col].DataType == typeof(Decimal))
    {
        try
        {
            Decimal dec = Decimal.Parse(_flex.Editor.Text);
            if ( dec < 1000 || dec > 10000 )
            {
                MessageBox.Show("Value must be between 1,000 and 10,000");
                e.Cancel = true;
            }
        }
        catch
        {
            MessageBox.Show("Value not recognized as a Currency");
            e.Cancel = true;
        }
    }
}          
Private Sub _flex_ValidateEdit(ByVal sender As Object, ByVal e As ValidateEditEventArgs)

    ' 金額を検証します
    If _flex.Cols(e.Col).DataType Is GetType(Decimal) Then

        Try
            Dim dec As Decimal = Decimal.Parse(_flex.Editor.Text)

            If dec < 1000 OrElse dec > 10000 Then
                MessageBox.Show("Value must be between 1,000 and 10,000")
                e.Cancel = True
            End If

        Catch
            MessageBox.Show("Value not recognized as a Currency")
            e.Cancel = True
        End Try
    End If
End Sub
     
関連トピック