DataGridView如何验证和选择单元格

时间:2017-07-04 16:30:41

标签: winforms datagridview

我的网格视图包含多个列,我将其输入类型调整为double

当用户选择一个单元格,输入其数据时,我想检查它是否与double的类型匹配。

如果用户点击另一个单元格并且他要离开的单元格不匹配且解析失败,我希望焦点返回到失败的单元格,而不是移动到新选择的单元格,强制用户在继续填充其余单元格之前输入有效数据。

问题是它总是离开失败的单元格。即使我使用其他功能,如验证或验证。

这是我的代码示例:

private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
        {

            var selectedCell = dataGridView1.SelectedCells[0];
            if (selectedCell.OwningColumn.ValueType == typeof(double))
            {
                try
                {
                    double result = Convert.ToDouble(selectedCell.EditedFormattedValue.ToString());
                    if (result <= 0)
                    {
                        MessageBox.Show("Please Positive Numbers Only");
                        dataGridView1.Focus();
                        dataGridView1.CurrentCell = dataGridView1.Rows[selectedCell.RowIndex].Cells[selectedCell.ColumnIndex];
                        dataGridView1.BeginEdit(true);
                    }
                    else
                    {
                        dataGridView1.CurrentCell.Value = result;
                    }
                }
                catch
                {
                    MessageBox.Show("Please Enter Numbers Only");
                } 
            }
        }

1 个答案:

答案 0 :(得分:1)

您可以使用活动DataGridView.CellValidating。这应该可以解决你的问题。

示例:

   private void dataGridView1_CellValidating(object sender, 
                                           DataGridViewCellValidatingEventArgs e)
    {
        if (e.ColumnIndex == 1) // 1 should be your column index
        {
            int i;

            if (!int.TryParse(Convert.ToString(e.FormattedValue), out i))
            {
                e.Cancel = true;
                label1.Text ="please enter numeric";
            }
            else
            {
                // the input is numeric 
            }
        }
    }

DataGridView.CellValidating Event

How to: Validate Data in the Windows Forms DataGridView Control

CellValueChanged vs CellValidating Events for DataGridView