Use um DataGridRow não é um DataRow são objetos diferentes
foreach (DataGridRow drv in PGIPortfolio.Items)
No entanto, não está claro o que itens são neste contexto. Assumindo que PGIPortfolio é o DataGridView, seu loop deve ser escrito como
foreach (DataGridRow drv in PGIPortfolio.Rows)
EDITAR Eu assumi que você estava usando o controle DataGridView no WinForms, não o WPF DataGrid Neste caso, a abordagem correta é usar a propriedade ItemsSource.
Por favor, tente 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)
{
.....
}
}
}