无法验证DataGridView中的单元格

时间:2018-09-18 09:28:03

标签: c# validation datagridview

我一直在编程Winform应用程序,在一种形式中,我有一个dataGridView。特定的列由整数组成,因此作为网格源的DataTable定义为

  DataTable dt = new DataTable();
  dt.Columns.Add("Partition", typeof(int));
  dt.Columns.Add("Number", typeof(int));

无论如何,稍后我会尝试对此进行验证,以使用户不会输入“ dadada”。

我愿意

 private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{int result;
  if (!(int.TryParse(e.FormattedValue.ToString(), out result))) 
      {Trace.Writeline("error");
      return;
      }
}

TryParse应该不会引发异常,并且可以很好地处理该异常,直到最后一个}离开该函数时会引发异常。

我尝试过

 private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {

            int result=0;
            try
            {

                result = int.Parse(e.FormattedValue.ToString());
            }
            catch
            {
                MessageBox.Show("error");
                dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 0;
                return;
            }
            if(result<0)
            {
                MessageBox.Show("positives!");
                return;
            }

        }

这一次catch捕获了(Parse)的异常,但是之后又在离开函数的同时又产生了另一个异常。

我想知道哪里出了问题以及如何验证网格的整数入口

1 个答案:

答案 0 :(得分:1)

您必须将Cancel设置为true

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    dataGridView1.Rows[e.RowIndex].ErrorText = "";
    int result;

    // Don't try to validate the 'new row' until finished editing since there
    // is not any point in validating its initial value.
    if (dataGridView1.Rows[e.RowIndex].IsNewRow) { return; }
    if (!int.TryParse(e.FormattedValue.ToString(), out result))
    {
        e.Cancel = true;
        dataGridView1.Rows[e.RowIndex].ErrorText = "the value must be an integer";
    }
    else if(result < 0)
    {
        e.Cancel = true;
        dataGridView1.Rows[e.RowIndex].ErrorText = "the value must be positive";
    }
}

MSDN shows是一个很好的例子。