DataGridView 验证用户输入

本文关键字:输入 用户 验证 DataGridView | 更新日期: 2023-09-27 18:35:34

我有一个DataGridView,它以这种方式填充了对象值:

POI_grid.AutoGenerateColumns = true;
POI_grid.DataSource = pois; //pois is an object generated from a class

我希望用户编辑此网格中的一些单元格,但需要进行一些验证。

我目前使用 txt 框验证用户输入,为了简单起见,我被要求在 GridView 中执行此操作。我验证用户输入的方式是这样的:(我验证用户是否只输入十进制数字)

private void txt_X_KeyPress(object sender, KeyPressEventArgs e)
{
    if (((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != '.' && e.KeyChar != '-'))
    {
        e.Handled = true;
    }
    if (e.KeyChar == '.')
    {
        if ((sender as TextBox).Text.IndexOf(e.KeyChar) != -1)
            e.Handled = true;
    }
    if (e.KeyChar == '-' && (sender as TextBox).SelectionStart > 0)
    {
        e.Handled = true;
    }
}

验证用户输入的最佳方法是什么,就像我在文本框中但在 DataGridView 中一样?

到目前为止,我已经尝试了以下 Rami 建议:

 private void POI_grid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            decimal por_x;
            por_x = Convert.ToDecimal(POI_grid.CurrentCell.Value);
        }

当然,我需要在那里添加一个 try catch 语句以避免出现问题,但只要有可能,我想在用户在单元格中键入时限制用户,就像我在文本框中所做的那样。

溶液:

这是我如何解决它的方法:

private void POI_grid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            decimal por_x;
            try
            {
                por_x = Convert.ToDecimal(POI_grid.CurrentCell.Value);
            }
            catch
            {
               POI_grid.CurrentCell.Value= "0";
            }

        }
        private void POI_grid_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            if (e.Exception is FormatException)
            {
                MessageBox.Show("Debe ingresar números decimales solamente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Verifique el formato del número ingresado", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

DataGridView 验证用户输入

我遇到了这样的问题,但最后我没有找到一种方法来防止用户输入非号码租船人,所以我使用CellEndEdit event来验证输入如果它无效,它会显示消息框(只有数字有效)并将单元格重置为 0 .我希望这对你有用.

这是我如何解决它的方法:

private void POI_grid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            decimal por_x;
            try
            {
                por_x = Convert.ToDecimal(POI_grid.CurrentCell.Value);
            }
            catch
            {
               POI_grid.CurrentCell.Value= "0";
            }

        }
        private void POI_grid_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            if (e.Exception is FormatException)
            {
                MessageBox.Show("Debe ingresar números decimales solamente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Verifique el formato del número ingresado", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }