如何使某些datagridview列只接受C#中的数值

时间:2016-02-11 14:22:05

标签: c#

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

但问题是:我仍然可以在单元格内单独保存一个小数点(没有任何数字只是小数点)我不希望单元格只有十进制点,因为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;
        }



    }

2 个答案:

答案 0 :(得分:1)

将您的功能更改为:

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;
            }
        }



    }

答案 1 :(得分:0)

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

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

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