Utilizzare un DataGridRow non un DataRow sono oggetti diversi
foreach (DataGridRow drv in PGIPortfolio.Items)
Tuttavia non è chiaro cosa sia Items in questo contesto. Supponendo che PGIPortfolio sia DataGridView, il tuo ciclo dovrebbe essere scritto come
foreach (DataGridRow drv in PGIPortfolio.Rows)
MODIFICA Presumo che tu stia utilizzando il controllo DataGridView in WinForms, non il WPF DataGrid. In questo caso, l'approccio corretto consiste nell'usare la proprietà ItemsSource.
Prova questo codice....
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)
{
.....
}
}
}