【发布时间】:2014-05-22 05:57:02
【问题描述】:
一段时间以来,我第一次在 Google 上找不到有关此异常的使用信息...希望其他人可能已经遇到过。
我有一个 DataGridView,我在 Leave 事件中验证空单元格并删除这些行。
如果我将最后一行中的最后一个单元格留空并且制表符远离 DGV,则会引发以下异常:
System.InvalidOperationException:单元格不在 DataGridView 中。这 单元格无法检索继承的单元格样式。
我没有使用数据绑定,如果我在this.dataGridView1.Rows.RemoveAt(c.RowIndex); 放置断点,它会被命中,如果我进入这一行,则在执行非用户代码期间抛出异常...
我原以为这与未提交的更改有关,但似乎明确提交更改不会影响结果。
我的Leave事件代码:
private void dataGridView1_Leave(object sender, EventArgs e)
{
if (this.dataGridView1.IsCurrentRowDirty || this.dataGridView1.IsCurrentCellDirty) this.dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
//Validate for empty rows
foreach(DataGridViewRow row in this.dataGridView1.Rows)
{
foreach(DataGridViewCell c in row.Cells)
{
if(c.Value == null || c.Value.ToString() == String.Empty)
{
if (c.EditedFormattedValue == null || c.EditedFormattedValue.ToString() == "")
{
this.dataGridView1.Rows.RemoveAt(c.RowIndex);
break;
}
}
}
}
}
异常数据在这里:
System.InvalidOperationException: Cell is not in a DataGridView. The cell cannot retrieve the inherited cell style.
at System.Windows.Forms.DataGridViewCell.GetInheritedStyle(DataGridViewCellStyle inheritedCellStyle, Int32 rowIndex, Boolean includeColors)
at System.Windows.Forms.DataGridView.OnCellValidating(DataGridViewCell& dataGridViewCell, Int32 columnIndex, Int32 rowIndex, DataGridViewDataErrorContexts context)
at System.Windows.Forms.DataGridView.CommitEdit(DataGridViewCell& dataGridViewCurrentCell, DataGridViewDataErrorContexts context, DataGridViewValidateCellInternal validateCell, Boolean fireCellLeave, Boolean fireCellEnter, Boolean fireRowLeave, Boolean fireRowEnter, Boolean fireLeave)
at System.Windows.Forms.DataGridView.EndEdit(DataGridViewDataErrorContexts context, DataGridViewValidateCellInternal validateCell, Boolean fireCellLeave, Boolean fireCellEnter, Boolean fireRowLeave, Boolean fireRowEnter, Boolean fireLeave, Boolean keepFocus, Boolean resetCurrentCell, Boolean resetAnchorCell)
at System.Windows.Forms.DataGridView.ProcessDialogKey(Keys keyData)
at System.Windows.Forms.Control.ProcessDialogKey(Keys keyData)
at System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
at System.Windows.Forms.Control.PreProcessMessage(Message& msg)
at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
at System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)
at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FPreTranslateMessage(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
【问题讨论】:
-
属性 AllowUserToAddRows 设置的值是多少?
标签: c# .net winforms datagridview