我试图通过遍历数据网格的所有行从数据网格中提取值

    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数据库中的存储过程进行填充

最佳答案

使用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)
            {
               .....
            }

        }
    }

09-16 11:53