4

私はwinformsが初めてです..DataGridViewの2つの列を数値のみに設定しようとしています..ある列に自然数があり、別の列に数値がない限り、ユーザーがセルに何かを入力できるようにしたくありません(これは常に 10 進数です)。これは簡単だと思いました..しかし、stackoverflowや他のサイトから多くのことを試した後でも、まだこれを達成できません。

If DataGridView1.CurrentCell.ColumnIndex = 8 Then

    If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "."c Then
        e.Handled = True
    End If

End If 
4

8 に答える 8

1

データ型の検証だけが重要な場合は、次のように CellValidating イベントを使用できます

    private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        //e.FormattedValue  will return current cell value and 
        //e.ColumnIndex & e.RowIndex will rerurn current cell position

        // If you want to validate particular cell data must be numeric then check e.FormattedValue is all numeric 
        // if not then just set  e.Cancel = true and show some message 
        //Like this 

        if (e.ColumnIndex == 1)
        {
            if (!IsNumeric(e.FormattedValue))  // IsNumeric will be your method where you will check for numebrs 
            {
                MessageBox.Show("Enter valid numeric data");
                dataGridView1.CurrentCell.Value = null;
                e.Cancel = true;

            }

        }

    }
于 2013-11-08T10:10:49.537 に答える
0

このコードを試してください。最多得票数の回答とほぼ同じですが、KeypressEventコードを編集してシンプルにしたので、10 進数を入力しなくても使用できます。楽しみ。:)

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

    If DataGridView1.CurrentCell.ColumnIndex = 2 Then

        AddHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress

    End If

End Sub

Private Sub TextBox_keyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)

     If (Not Char.IsControl(e.KeyChar) _
                AndAlso (Not Char.IsDigit(e.KeyChar) _
                AndAlso (e.KeyChar <> Microsoft.VisualBasic.ChrW(46)))) Then
        e.Handled = True
    End If

End Sub
于 2018-01-10T13:53:47.813 に答える
0
If e.ColumnIndex = 6 Then
    If Not IsNumeric(e.FormattedValue) Then
        ' IsNumeric will be your method where you will check for numebrs 
        MessageBox.Show("Enter valid numeric data")
        DataGridView1.CurrentCell.Value = Nothing

        e.Cancel = True

    End If
End If
于 2015-03-12T12:47:12.227 に答える