Use un DataGridRow no es un DataRow son objetos diferentes
foreach (DataGridRow drv in PGIPortfolio.Items)
Sin embargo, no está claro qué es Items en este contexto. Suponiendo que PGIPortfolio es DataGridView, entonces su ciclo debe escribirse como
foreach (DataGridRow drv in PGIPortfolio.Rows)
EDITAR Supuse que estaba usando el control DataGridView en WinForms, no el WPF DataGrid. En este caso, el enfoque correcto es usar la propiedad ItemsSource.
Pruebe este código....
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)
{
.....
}
}
}