如何使某些数据网格视图列仅接受 C# 中的数值

本文关键字:何使某 数据 数据网 视图 网格 | 更新日期: 2023-09-27 18:34:16

以下代码使DataGridView Column4只接受数值和一个小数点.并且它工作正常,例如它接受诸如(4.50,3.00,13.60)之类的值

但问题是:我仍然可以在单元格内单独保存一个小数点(没有任何数字,只有小数点),我不希望单元格只有小数点,因为 sql 数据库(金钱列)不接受小数点。

任何人都知道如何防止Column4中的单元格不仅接受小数点,而是接受以下值:(4.50,3.00,13.60)?

请帮忙谢谢

 private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        e.Control.KeyPress -= new KeyPressEventHandler(AnyColumnKeyPress);
        if (dataGridView1.CurrentCell.ColumnIndex == 4 ) //Desired Column
        {
            TextBox tb = e.Control as TextBox;
            if (tb != null)
            {
                tb.KeyPress += new KeyPressEventHandler(AnyColumnKeyPress);
            }

        }
    }
    private void AnyColumnKeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
        {
            e.Handled = true;
        }
        // allow 1 dot:

        if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
        {
            e.Handled = true;
        }

    }

如何使某些数据网格视图列仅接受 C# 中的数值

将函数更改为:

private void AnyColumnKeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
        {
            e.Handled = true;
        }
        // allow 1 dot:

        if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
        {
            if ( (sender as TextBox).Text != "." ) {
                e.Handled = true;
            }
        }

    }

检查了上面的代码,我仍然可以输入一个点字符,稍微修改一下,让我更易读。

if (!(char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar)) || e.KeyChar == '.')
{
    e.Handled = true;
}

经过测试,我只能输入数字。