C#迭代循环运行DataGrieView行 - 索引超出范围

时间:2016-08-01 11:20:58

标签: c# datagridview

好吧,伙计们, 我使用循环来遍历datagirdview的行,以便更改某些值的长度。 显示的问题是:“索引超出范围,必须是非负数且小于集合的大小。参数名称。索引。”

for (k=1; k<=(dataGridView3.Rows.Count); k++)
                    {
                        string ChangeNumber = dataGridView3[k, 6].ToString();
                         ChangeNumber = ChangeNumber.Remove(ChangeNumber.Length - 2);
                        dataGridView3.Rows[k].Cells[6].Value = ChangeNumber;
                    }

我的datagridview是DataGridView3,我希望我的第6列最后有2位数字。所以我对第6列中所有行的单元格运行此迭代。有任何想法吗 ?

编辑:添加了整个异常表格! enter image description here

好的,这实际上有效...... !!!!

for (counter = 0; counter < (dataGridView3.Rows.Count); counter++)
                    {
                        string ChangeNumber = dataGridView3.Rows[counter].Cells["Value"].Value.ToString();
                        ChangeNumber = ChangeNumber.Remove(ChangeNumber.Length - 2);
                        dataGridView3.Rows[counter].Cells["Value"].Value = ChangeNumber;
                    }

它减少了我需要的2位数,但我仍然得到一个例外: 对象引用未设置为对象的实例。

1 个答案:

答案 0 :(得分:0)

好的,我在这里回复你的问题和评论:

问题:我建议使用foreach(Row r in dataGridView3.Rows)。这是迭代列表而不必检查空引用异常的简单方法。我已假设Row是一个类。如果它实际上类似于双数组,那么您只需要foreach(double[] d in dataGridView3.Rows)

评论:至于截断6000的最后两个数字,你可以通过Int.Parse(varHoldingSixThousand.ToString().Replace(000, 0));来完成。

如果有什么事情没有意义,请告诉我。

修改:foreach(DataGridViewRow d in dataGridView3.Rows)

至于截断数字末尾的两位数字,您可以使用更具适应性的内容,例如:int.Parse(varHoldingNumber.ToString().Substring(varHoldingNumber.ToString().Length - 2, 2))