2

我正在尝试通过遍历数据网格的所有行来从数据网格中提取值

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

4

2 回答 2

10

使用DataGridRow而不是DataRow它们是不同的对象

foreach (DataGridRow drv in PGIPortfolio.Items)

然而,目前尚不清楚在这种情况下什么是 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) 
            {
               .....
            }

        }
    }
于 2013-05-31T18:26:45.477 回答
-1

foreach(DataGridViewRow r in dataGridView1.Rows)

于 2014-09-16T13:59:12.933 回答