3

4列のデータグリッドビューを作成しています。最後の列のタイプは、時と分 (HH:mm) の DateTime です。

    DataTable.Columns.Add("Time", typeof(DateTime)); //fourth column
    dataGridView2.Columns[3].DefaultCellStyle.Format = "HH:mm";

有効な HH:mm(12:37) 形式を入力すると問題なく動作しますが、形式が無効な場合 (12:374) にエラー メッセージが表示されます。

    The string wasn't regigniced as a valid DateTime --> System.FormatExeption

エラーが発生したときに何が起こるかを変更するには、「DataError-exeption / FormatExeption」を処理するように指示されていますが、どうすればよいですか?

エラーが発生する前の値に戻したい。

どんな助けでも大歓迎です。前もって感謝します。

PS。どこかが不明な場合、またはさらに情報が必要な場合は、何が必要かを説明してください。

編集: dataGridView から直接時間値を編集しています。

4

6 に答える 6

0

ここで述べたように、 DataGridView.CellValidating イベントを処理します。

    private void CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        try
        {   
            // get current cell
            var cell = ((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex];
            // check new value. i need any number >= 5
            var c0 = 0;
            if (e.FormattedValue == null || !Int32.TryParse(e.FormattedValue.ToString(), out c0) || c0 < 5)
            {
                // bad value inserted

                // e.FormattedValue - is new value
                // cell.Value - contains 'old' value

                // choose any:
                cell.Value = cell.Value;    // this way we return 'old' value
                e.Cancel = true;            // this way we make user not leave the cell until he pastes the value we expect
            }
        }
        catch (Exception ex)
        {
        }
    }
于 2015-06-30T20:37:20.187 に答える
0

CellValidating イベントでは、エラーが発生した場合に e.Cancel = true を設定できます。ここを参照してください: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvalidating.aspx

于 2013-05-30T19:52:46.593 に答える
0

短い答えは、私はそれが可能だとは思わないということです。データ型が異なるだけで、まったく同じ問題が発生しました。データ エラー イベントが発生する前に値を編集しようとしました。私が収集できることから、これを処理する公式の方法は、ユーザーの注意をセルに戻して間違いを修正することです。これに役立つエラー テキストとエラー アイコンがあります。

セルの新しいコンテンツは、セルのformattedvalueプロパティを介して利用できますが、これは読み取り専用であるため編集できません。

以前の回答を参照し、エラーの種類をトラップして、意味のあるエラー メッセージをユーザーに表示することに取り組みます。

私は次の数行のコードで終わった

Private Sub dgvInvoices_CellValidating(sender As Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgvInvoices.CellValidating
    dgvInvoices.Rows(e.RowIndex).Cells(3).ErrorText = ""
    Dim newInteger As Integer

    dgvInvoices.ShowCellErrors = True

    If Not Double.TryParse(e.FormattedValue.ToString(), newInteger) OrElse newInteger < 0 Then

        e.Cancel = True
        dgvInvoices.Rows(e.RowIndex).Cells(3).ErrorText = "the value must be a non-negative integer"
        MsgBox("Ensure the value is a numeric value.", vbExclamation, "Error")

    End If

End Sub

申し訳ありませんが、私はもっと助けることができます

于 2014-08-30T14:44:25.190 に答える