2013-05-31 51 views
2

我試圖從一個DataGrid值的行迭代,通過數據網格通過一個DataGrid

foreach (DataRow drv in PGIPortfolio.Items) 
    { 
    // DataRow row = drv.Row; 

    string acname = drv["Portfolio"].ToString(); 
string paramt = drv["Par Amount"].ToString(); 
MessageBox.Show(acname); 

}

的所有行迭代,但它給我的DataRow的DRV一個InvalidCastException 。 有人能告訴我我應該做什麼改變,所以它的工作原理? 數據網格具有約束力,並且它是由一個存儲過程從MS SQL 2008數據庫

+0

試試這個,改變foreach循環讀取 的foreach(在PGIPortfolio.Items VAR DRV) {} 和懸停DRV。 Intellisense告訴你什麼? –

+0

嘗試使用var too.Doesn't工作方式要麼 – user2415339

回答

10

使用填充的DataGridRow不是DataRow它們是不同的對象

foreach (DataGridRow drv in PGIPortfolio.Items) 

但是目前尚不清楚哪些項目在這種情況下。假設PGIPortfolio是在DataGridView那麼你的循環應該寫成

foreach (DataGridRow drv in PGIPortfolio.Rows) 

編輯 我假定你是使用的WinForms DataGridView控件,而不是WPF的DataGrid 在這種情況下,那麼正確的做法是使用ItemsSource屬性。
請試試這個代碼....

var itemsSource = PGIPortfolio.ItemsSource as IEnumerable; 
    if (itemsSource != null) 
    { 
     foreach (var item in itemsSource) 
     { 
      var row = PGIPortfolio.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; 
      if (row != null) 
      { 
       ..... 
      } 

     } 
    } 
+0

PGIPortfolio是一個數據網格,而不是datagridview。所以.Rows不被識別 – user2415339

+0

它說沒有定義行和沒有擴展方法行接受Datagrid類型的第一個參數。 – user2415339

+1

然後你必須使用PGIPortfolio.DataSource並將它投射到你想要的東西上。 [DataGrid](http://msdn.microsoft.com/en-us/library/system.windows.forms.datagrid.aspx)不支持.Items甚至行 –

-1

foreach(DataGridViewRow r in dataGridView1.Rows)

+2

來自WPF和DataGridView的DataGrid是兩個不同的東西。 – Naucle