C#Datagridview编辑单元格

时间:2011-04-03 20:59:25

标签: c# .net winforms datagridview

我正在尝试将光标和焦点放在最后一行和一个名为'CheckNumber'列的特定单元格中。我以为我有这个:

  var c = dataGridView1.RowCount;
  DataGridViewCell cell = dataGridView1.Rows[c-1].Cells[0];
  dataGridView1.CurrentCell = cell;
  dataGridView1.BeginEdit(true); 

但它不断出现这个错误:

索引-1没有值。

有人可以指出我正确的方向!?这让我疯了。

谢谢!

2 个答案:

答案 0 :(得分:2)

好的,我将在序言中说我无法重现你所遇到的问题。但是,您提到错误实际发生在dataGridView1.CurrentCell = cell;,这应该排除-1索引错误。

此外,您说您得到的错误是Index -1 does not have a value.这意味着即使您拥有正确的索引,cell仍然会作为索引-1出现。这意味着要么细胞不存在,要么发生粗略的事情。既然你听起来已经有一段时间了,我假设细胞确实存在。

由于错误似乎不是你发布的4行中的任何一行,我会说看看其他地方,比如你第一次将源绑定到datagridview时。

更新:我只是找到了一些与此相关的链接。由于我不知道你如何约束你的datagridview,我真的不知道这些是否适用,但如果有的话,请告诉我们!无论如何,它似乎可能适用于绑定。

来自:SO Question 1

  

如果你最初绑定一个空   不通知的集合   DGV的变化(例如收藏品   不是,但是BindingList确实如此)   初始当前行偏移量将是   正确设置为-1,(因为它是   空。)

     

随后添加对象时   你的数据绑定集合   仍然在网格上正确显示,   但是CurrencyManager不会   通知任何变化,以及   当前行偏移将保留   顽固地在-1。

     

所以,当你尝试编辑一行时,   CurrencyManager认为你正在尝试   编辑偏移-1处的行,然后编辑   抛出异常。

     

要解决此问题,您需要重新绑定   在与行交互之前,或   最初绑定一个Collection等   它包含一个或多个项目。

SO Question 2

.NET Monster Question

答案 1 :(得分:0)

首先检查rowcount,以确保在没有任何行时不尝试访问负行号。

var c = dataGridView1.RowCount;

if(c>0){  
  DataGridViewCell cell = dataGridView1.Rows[c-1].Cells[0];
  dataGridView1.CurrentCell = cell;
  dataGridView1.BeginEdit(true); 
}