我正在尝试将光标和焦点放在最后一行和一个名为'CheckNumber'列的特定单元格中。我以为我有这个:
var c = dataGridView1.RowCount;
DataGridViewCell cell = dataGridView1.Rows[c-1].Cells[0];
dataGridView1.CurrentCell = cell;
dataGridView1.BeginEdit(true);
但它不断出现这个错误:
索引-1没有值。
有人可以指出我正确的方向!?这让我疯了。
谢谢!
答案 0 :(得分:2)
好的,我将在序言中说我无法重现你所遇到的问题。但是,您提到错误实际发生在dataGridView1.CurrentCell = cell;
,这应该排除-1索引错误。
此外,您说您得到的错误是Index -1 does not have a value.
这意味着即使您拥有正确的索引,cell
仍然会作为索引-1出现。这意味着要么细胞不存在,要么发生粗略的事情。既然你听起来已经有一段时间了,我假设细胞确实存在。
由于错误似乎不是你发布的4行中的任何一行,我会说看看其他地方,比如你第一次将源绑定到datagridview时。
更新:我只是找到了一些与此相关的链接。由于我不知道你如何约束你的datagridview,我真的不知道这些是否适用,但如果有的话,请告诉我们!无论如何,它似乎可能适用于绑定。
如果你最初绑定一个空 不通知的集合 DGV的变化(例如收藏品 不是,但是BindingList确实如此) 初始当前行偏移量将是 正确设置为-1,(因为它是 空。)
随后添加对象时 你的数据绑定集合 仍然在网格上正确显示, 但是CurrencyManager不会 通知任何变化,以及 当前行偏移将保留 顽固地在-1。
所以,当你尝试编辑一行时, CurrencyManager认为你正在尝试 编辑偏移-1处的行,然后编辑 抛出异常。
要解决此问题,您需要重新绑定 在与行交互之前,或 最初绑定一个Collection等 它包含一个或多个项目。
答案 1 :(得分:0)
首先检查rowcount,以确保在没有任何行时不尝试访问负行号。
var c = dataGridView1.RowCount;
if(c>0){
DataGridViewCell cell = dataGridView1.Rows[c-1].Cells[0];
dataGridView1.CurrentCell = cell;
dataGridView1.BeginEdit(true);
}