我有一个计时器,我试图在下一行时选择下一行。这是我的代码:
DataGridViewCell cell;
for (int i = lastRowIndex + 1; i < links_dgv.Rows.Count - 1; i++)
{
if (links_dgv.Rows[i].Cells[0] != null)
{
lastRowIndex = i;
break;
}
Console.WriteLine(lastRowIndex.ToString());
}
cell = links_dgv.Rows[lastRowIndex].Cells[0];
最后一行是给我ArgumentOutOfRangeException。我该如何解决这个问题?
编辑:此处输出错误消息:
未处理的类型&#39; System.ArgumentOutOfRangeException&#39; 发生在mscorlib.dll
其他信息:指数超出范围。必须是非负面的 并且小于集合的大小。
答案 0 :(得分:0)
由于低代表我无法添加评论,但是在开始时lastRowIndex的值是多少?到最后?
编辑:根据您的回答:
你的i从值1开始 如果links_dgv中的行少于3行,那么您将无法进入for循环。 - &GT;你的links_dgv.rows [0] .cells [0]会触发异常吗?
如果您在links_dgv中至少有3行,则输入您的for并检查您的第二行是否为空。这是你想要做的吗?
我可能错了,但我认为你应该写int i = lastRowIndex
,而不是int i = lastRowIndex + 1
EDIT2:
DataGridViewCell cell = null;
if (links_dgv.Rows.Count >0)
for (int i = lastRowIndex; i < links_dgv.Rows.Count; i++)
{
if (links_dgv.Rows[i].Cells[0] != null)
{
lastRowIndex = i;
cell = links_dgv.Rows[lastRowIndex].Cells[0];
break;
}
}
我注意到了break指令,你只想要在lastRowIndex之后的行吗? 这可能更好
if (links_dgv.Rows.Count >= lastRowIndex +1)
{
cell = links_dgv.Rows[lastIndex + 1].Rows[0];
lastRowIndex++;
}
答案 1 :(得分:0)
好的,我明白了。问题是我使用的是另一个来自datagridview而不是main表单,并且表单是由主表单打开的。我知道这是一个肮脏的修复,但如果我在创建表单变量后显示表单,问题似乎已得到修复:
private void pageDelayTmr_Tick(object sender, EventArgs e)
{
FormEditLinks formEditLinks = new FormEditLinks();
formEditLinks.Show();
List<string> list = formEditLinks.GetData();
if (list != null)
{
webBrowser1.Navigate(list[2]);
}
formEditLinks.Dispose();
}