2012-11-26 31 views
0

当我将文件加载到数据网格时,出现错误消息FormatException Error。 在这里,我想要做的,比较两个单元格vlaue,如果col索引2值大于col索引3,然后显示一条错误消息。FormatException在单元格验证时出错

当第一次iload文件,我没有问题。我想加载seconfd time, i'm gettign the above error message

我试过使用Convert.ToInt32, int,仍然收到相同的错误信息。我怎样才能解决这个问题??

private void datagridview_CellValidating(object sender, CellValidatingEventArgs e) 
{ 
if (e.ColumnIndex != 0) 
{ 
    if (e.RowIndex >= 0 && e.RowIndex < 8) 
    { 
     if (e.Value != null && datagridview.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value != null) 
     { 
       //Convert.ToInt32, int//// 
      if (Double.Parse(e.Value.ToString()) <= 
       Double.Parse(datagridview.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value.ToString())) 
      { 
       MessageBox.Show("error"); 
       e.Cancel = true; 
       datagridview.Rows[e.RowIndex].ErrorText = errorMesssage; 
      } 
     } 
    } 
} 
} 
+0

什么是你看到解析当值?也许被检查的值是'Column1',它不能被解析(因为你有'Ce​​lls [e.ColumnIndex - 1]') – V4Vendetta

+0

什么数据类型应该在e.Value中?你在读什么类型的文件? – Michael

+0

我正在阅读一个具有一些大整数值的Xml文件。 – linguini

回答

0

我想你应该重新审视这里的条件

if (Double.Parse(e.Value.ToString()) <=  
    Double.Parse(datagridview.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value.ToString())) 

现在会发生什么,当你确认为Column1的比较是在Column2Column1提供的价值(而不是你所提到的),所以如果Column1中的值不能被解析,那么它会弹出一个格式异常,因为它不能被解析。

因此,也许你需要在指定的列的if语句

if (e.ColumnIndex != 0) // here you allow for Column3, so that e.ColumnIndex - 1 is 2

+0

我不明白为什么会发生。如果第二次加载,我得到上面的错误信息。我试过你的代码,同样的问题。你能不能再向我解释一下。 – linguini

+0

@linguini我的意思是,如果你的第一列有一个值不能被解析的东西,像“苹果”,所以当你解析它会抛出一个格式异常,所以你的整数值只在2和3列,而不是在第一个,也许你可以把价值的样本布局 – V4Vendetta

+0

这么愚蠢的我。只要chnaged它'如果(e.ColumnIndex!= 0 && e.ColumnIndex!= 2 && e.ColumnIndex!= 3)'它的工作。 – linguini