我的一些代码遇到了麻烦, 我想调用一个方法,但该方法不会被调用,我不知道为什么。
var rows = GetDataGridRows(dgTickets);
int intTickets = 0;
foreach (System.Windows.Controls.DataGridRow r in rows)
{
//some code
}
private IEnumerable<System.Windows.Controls.DataGridRow>
GetDataGridRows(System.Windows.Controls.DataGrid grid)
{
var itemsSource = grid.ItemsSource as IEnumerable;
if (null == itemsSource) yield return null;
foreach (var item in itemsSource)
{
var row = grid.ItemContainerGenerator.ContainerFromItem(item)
as System.Windows.Controls.DataGridRow;
if (null != row) yield return row;
}
}
var rows = GetDataGridRows(dgTickets);
不会调用该函数,只需转到int intTickets = 0
我不知道该怎么做
提前致谢
答案 0 :(得分:7)
您的方法GetDataGridRows
使用IEnumerable
返回yield
。直到您的foreach
块被执行,您才会进入此方法。
使用yield
关键字允许C#编译器使用它的状态机生成器来创建它返回的IEnumerable
实现。 IEnumerable
使用延迟调用,这实际上意味着它只在需要时才进行交互。在这里你可以看到它跳过声明到下一步,因为在那一点上,它只是IEnuemrable
的一个实例,它还没有循环通过。
答案 1 :(得分:0)
我相信你应该使用......
table_id.DataSource = GetDataGridRows(dgTickets);
table_id.DataBind();