2013-02-26 122 views
0

我想在gridview中添加int值。我的继承人C#代码:输入字符串格式不正确

foreach (GridViewRow r in GridView1.Rows) 
{ 
     int I = (Convert.ToInt32(r.Cells[5].Text) 
       + Convert.ToInt32(r.Cells[6].Text) 
       + Convert.ToInt32(r.Cells[7].Text) 
       + Convert.ToInt32(r.Cells[8].Text) 
       + Convert.ToInt32(r.Cells[9].Text)); 
     r.Cells[10].Text = Convert.ToString(I); 
} 

例外: “输入字符串的不正确的格式”

这是工作的罚款更早。我切换到另一个系统,附加数据库,在这里做了一些更改&那里,它现在不工作。当页面加载时,gridview单元格已经有了值。我只是添加(总和)这些值,并在单击按钮时在同一个gridview的另一个单元格中显示添加。

任何帮助表示赞赏。

+0

你试图转换什么样的值?你有个例子吗? – Derek 2013-02-26 08:49:38

+1

您是否调试过该行?所有单元格值都可以转换为int? – 2013-02-26 08:50:12

+0

为每个循环添加一个中断点,调试循环的时间比在这里输入问题花费的时间少得多,并且您也可以得到答案。 :) – 2013-02-26 09:07:53

回答

5

检查传递给每个Convert.ToInt32调用的值,其中一个或多个调用不能转换为int

您可以通过直接查看数据库管理器中的源代码或单步执行代码并观察行列和值等来做到这一点。但是,您的解决方案仍然保持不变,并且需要两个或两个表单:修复数据,或修复代码不要在意(如果这是可以接受的)。

您可能会喜欢int.TryParse为后者的目的。

0

迭代时检查GridViewRow的RowType。这可能是因为你试图从HeaderRow中解析值。我认为你只对DataRows感兴趣。

此外,您可能需要考虑不使用单元格上的索引从gridview中获取值。如果你改变gridview的布局,你的计算将失败。

+0

rt!米只有在数据行和其采取零点感兴趣... – adityawho 2013-02-26 09:49:31

+0

我设置行类型数据行... 的foreach(){ 如果 (r.RowType == DataControlRowType.DataRow) {//我的代码 } } 它仍然不工作..我cud真的在这里使用一些帮助... – adityawho 2013-02-26 11:51:50

0

您无法通过转换将空值转换为有意义的值。你最好的选择是首先检查null,然后给结果赋值0(或其他值)(无论Convert何时发送结果)。

2

试试这个:

 foreach (GridViewRow r in GridView1.Rows) 
     { 
      int val1 = 0; 
      int val2 = 0; 
      int val3 = 0; 
      int val4 = 0; 
      int val5 = 0; 

      int.TryParse(r.Cells[5].Text, out val1); 
      int.TryParse(r.Cells[6].Text, out val1); 
      int.TryParse(r.Cells[7].Text, out val1); 
      int.TryParse(r.Cells[8].Text, out val1); 
      int.TryParse(r.Cells[9].Text, out val1); 

      int I = (val1 + val2 + val3 + val4 + val5); 

      r.Cells[10].Text = I.ToString(); 
     } 

你应该总是试图尽可能地转换为另一种数据类型之前测试值。

+0

Thnx ..这工作..所以这是问题? – adityawho 2013-02-26 10:00:28

+0

没有真正看到数据,我不能真正给你一个答案,除了一定有一些奇怪的数据,不想玩好。 – 2013-02-26 10:19:46

+0

数据是整数值(数据类型为数据库中的浮点数)... thnx thoh – adityawho 2013-02-26 10:47:16