我们在C#中遇到了一个奇怪的问题。
我们在.NET 3.5 SP1上运行WinForms应用程序。
在循环中读取网格时,代码无法读取行中的值。这种行为是间歇性的。失败的时间大约是20%。
代码非常简单:
for (int i = 0; i < dgv.Rows.Count; i++)
{
if (dgv.Rows[i].Cells["colName"].Value == null || dgv.Rows[i].Cells["colName"].Value.ToString().Trim() == "")
{
// PROBLEM!!!
continue;
}
}
当程序运行时,我们可以看到填充的网格。我们的客户已向我们发送了填充网格的图片,但值显示为null。当值为null时,我们添加了一个调试代码来显示消息框。
这种情况受到了打击:
dgv.Rows[i].Cells["colName"].Value == null
这种情况发生在2台基于Win 7的PC上。内部没有复制。任何指针都会非常有用。
解决方案 最后,我们得到了解决这个问题的方法。在添加CurrentCellDirtyStateChanged事件处理程序
时解决了该问题private void dgv_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dgv.IsCurrentCellDirty)
{
dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
现在它已经解决了,我们仍然困惑于为什么一个简单的GridView需要添加这种事件。对此的任何想法都会有所帮助。