首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

遍历datagrid的全部行时,纵向滚动条一下看不到的行取不到

2012-06-22 
遍历datagrid的所有行时,纵向滚动条一下看不到的行取不到在silverlight中,遍历一个datagrid的所有行,取第

遍历datagrid的所有行时,纵向滚动条一下看不到的行取不到
在silverlight中,遍历一个datagrid的所有行,取第一列的checkbox的选中状态时,

C# code
 foreach (object ovj in DataGridTMSection.ItemsSource)            {                if (DataGridTMSection.Columns[0].GetCellContent(ovj) != null)//前7行能取到,但是滚动条一下看不到的就为null了,怎么办呢?                {                    CheckBox cb1 = DataGridTMSection.Columns[0].GetCellContent(ovj) as CheckBox;                    StRvsectBVO model = ovj as StRvsectBVO;                    if (model.SS==1 && model != null)                    {                      index++;                    }                }            }


[解决办法]
foreach (object ovj in DataGridTMSection.ItemsSource)
{
CheckBox cb1 = DataGridTMSection.Columns[0].GetCellContent(ovj) as CheckBox;
StRvsectBVO model = ovj as StRvsectBVO;
if (model.SS==1 && model != null)
{
index++;
}
}

[解决办法]
这是不可能遍历的!

datagrid只是一个表现层控件而已,它有权利自由地作出设计改变,跟你想当然的理解完全可能不同。你不应该靠遍历它的行去获取数据,你应该重新审视你的系统设计,看看能不能取得datagrid的ItemsSource数据。

实际上datagrid只有用户可见的部分才初始化行。当滚动条滚动内容的时候,那些滚出去的行对象立刻被重用于新的滚入的行,所以跟你想当然地以为的行的概念就是不同的。

在一个行滚出去的时候,就会触发 datagrid 的UnloadingRow事件。紧接着,当这行又被重用于显示新的滚入的数据行,就又触发 LoadingRow 事件。这就是其基本原理。

热点排行