2011-05-03 231 views
0

我遇到了一些我的代碼, 我想調用一個方法,但該方法沒有被調用,我不知道爲什麼。函數沒有被調用

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

我不知道該怎麼辦

在此先感謝

+1

你在按F10還是F11?你能否詳細說明不調用函數 – V4Vendetta 2011-05-03 07:55:05

+1

你確定調用不會發生在使用中斷點並逐步完成代碼的情況下嗎?還是你說它沒有被調用,因爲你沒有得到期望的輸出? – 2011-05-03 07:55:23

+0

你怎麼知道'GetDataGridRows'沒有被調用?你有沒有在其中放置一個斷點? – 2011-05-03 07:55:31

回答

7

您的方法GetDataGridRows使用yield返回IEnumerable。直到你的foreach塊被執行,你纔會進入這個方法。

yield關鍵字的使用允許C#編譯器使用它的狀態機生成器來創建它返回的IEnumerable的實現。 IEnumerable使用延遲調用,這意味着它只在需要時才被整合。這是你看到它跳過聲明到下一步的地方,因爲在那一點上,它只是IEnuemrable的一個實例,它尚未循環。

+0

是的,我看到了,但他沒有填充我的'行',並在我的代碼中的另一個地方,我也使用該功能,並在那裏工作 – user735646 2011-05-03 08:01:00

+0

@ user735646在這種情況下,我會說你可能調用的代碼在錯誤的時間...例如,你是否在網格填充數據之前調用它? – 2011-05-03 08:02:38

+0

否網格的itemssource包含13個項目 – user735646 2011-05-03 08:06:59

0

我相信你應該使用...

table_id.DataSource = GetDataGridRows(dgTickets); 
table_id.DataBind();