我一直在编程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)的异常,但是之后又在离开函数的同时又产生了另一个异常。
我想知道哪里出了问题以及如何验证网格的整数入口
答案 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是一个很好的例子。