http://kinbor.cnblogs.com/archive/2005/11/04/269152.html

看了Kinbor在以上页面所提出的问题,看了看发现挺有意思,可那里不能贴图,就挪到这里来了,虽然我并不提倡在这种设定值的应用中使用对DataGrid赋值来实现的方法(感觉还是他所说的现在用的改数据源的方法比较好,因为DataGrid是暴露在外面的,有太多的不确定性),不过这个问题还是值得探讨一番的。

除了在上述文章的评论中加的内容外,我又在DataGrid的Scroll事件中加入了一段代码,来输出当时所在的行
private void dgInfo_Scroll(object sender, System.EventArgs e)
{
  strMessage 
+=  "Scroll,行:\t\t\t" + dgInfo.CurrentCell.RowNumber.ToString() + "\n";
}
    private void tbInfo_Leave(object sender, System.EventArgs e)
        
{
            ClassTest clsTest 
= new ClassTest();
            
//dgInfo.Enabled = false;
            for( ;clsTest.iTempValue<15 ;clsTest.Improve())
            
{
                strMessage 
+= "Loop,Before:" + clsTest.iTempValue.ToString() + "\n";
                dgInfo[clsTest.iTempValue,
4= clsTest.iTempValue.ToString() + "-" + tbInfo.Text;
                dgInfo.Refresh();
                strMessage 
+= "Loop,After:\t" + clsTest.iTempValue.ToString() + "\n-------------------------------------------\n";
            }
        
            
//dgInfo.Enabled = true;
        }
我们来看一下输出的strMessage的内容:
dd.png
从图中我们可以看到,循环内容
strMessage += "Loop,Before:" + clsTest.iTempValue.ToString() + "\n";

一共被执行了两遍,而对单元格赋值后的输出语句却没有执行,就好像在赋值的过程中,程序自动将变量减1,然后Continue了一样,而这第8行正好是DataGrid滚动后所停的行数,这个可以从最后赋值完毕后,拖动滚动条所输出的结果看出。