遍历datagrid的全部行时,纵向滚动条一下看不到的行取不到
遍历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 事件。这就是其基本原理。