DataGridviewCell可防止非数字输入

时间:2016-06-21 08:21:17

标签: c# winforms validation datagridview

我的网格中有一个PreviewKeyDown事件,我想只让数值和(0,2)十进制值。

private void dgvUser_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        colUser = dgvUser.CurrentCell.ColumnIndex;
        rowUser = dgvUser.CurrentCell.RowIndex;
        DataGridViewCell tc = dgvUser[colUser, rowUser];

        valueUser = Convert.ToDouble(tc.Value);//code breaks here


        if (e.KeyData == Keys.Enter && dgvUser.CurrentCell.ColumnIndex == 2 && handledUser == true)
        {
            DragerClass.Dedektör.Dedektor_A1Set[Convert.ToInt32(dgvUser.Rows[rowUser].Cells[0].Value) - 1] = valueUser;
            BindUserGrid(userPagingUpdate[0], userPagingUpdate[1]);
            logValues(Convert.ToInt32(dgvUser.Rows[rowUser].Cells[0].Value) - 1);
            handledUser = false;
        }
    }

当我在valueUser = Convert.ToDouble(tc.Value);行输入非数值代码时。我怎么能阻止它?

3 个答案:

答案 0 :(得分:1)

您可以使用Double.TryParse方法:

if (Double.TryParse(tc.Value.ToString(), out valueUser))
{
   //success
}
else
{
   //fail
}

答案 1 :(得分:0)

您可以使用Try / Catch语句

    try
    {
         valueUser = Convert.ToDouble(tc.Value);
    }
    catch
    {
        // if the above line throws an exception deal with it here.
    }

或者您可以使用double.TryParse()

double valueUser;
bool isNumber = double.TryParse(tc.Value,out valueUser);

答案 2 :(得分:0)

另一种解决方案是将您用作列模板的DataGridViewCell.ValueType设置为typeof(decimal)每次用户尝试输入不同的值时,这将创建DataError Event你指定了什么。然后,您可以将DataError Event处理为您喜欢的任何内容。