【问题标题】:C# Datagridview Edit CellC# Datagridview 编辑单元格
【发布时间】:2011-04-03 20:59:25
【问题描述】:

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

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

但它不断出现此错误:

索引 -1 没有值。

谁能指出我正确的方向!?这让我发疯了。

谢谢!

【问题讨论】:

  • 这段代码运行时的行数是多少?是 0 吗?
  • RowCount = 1 我在 'dataGridView1.CurrentCell = cell; 上收到错误消息; '行

标签: c# .net winforms datagridview


【解决方案1】:

好的,我先说我无法重现您遇到的问题。但是,您提到错误实际上发生在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

【讨论】:

  • 这就是我想要的!非常感谢!
【解决方案2】:

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

var c = dataGridView1.RowCount;

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

【讨论】:

  • 我的 RowCount = 1,我添加了一个包装器,它不会停止消息。我必须在某处混淆代码......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2011-12-24
  • 1970-01-01
  • 2015-05-28
  • 2015-01-11
  • 2018-09-25
相关资源
最近更新 更多