如何在WPF数据网格中获取行?

3

我想获取所有行以检查数据库中相同的一些行,我尝试使用StackOverlow中的许多解决方案,但它们都对我不起作用:

for (int i = 0; i < dataGrid.Items.Count; i++)
{
    DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator
                                               .ContainerFromIndex(i);
}

这段代码会抛出 value cannot be null 异常。

我也尝试了这行代码,但是遇到了相同的异常(currentitem对象为空)。

var currentItem = myDataGrid.SelectedItem as MyObject;

完整代码:

  private void UserControl_Loaded(object sender, RoutedEventArgs e)
     {

        grid.ItemsSource = null;
        grid.ItemsSource = work;
        grid.Items.Refresh();

        for (int i = 0; i < grid.Items.Count; i++) // My grid items count equals to 7
        {
          
            DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(i); // this value was null 
            var currentItem = grid.SelectedItem as object; // this value was null


        }

    }
2个回答

0
你可以将你的DataGrid的项源绑定到一个ObservableCollection,并在其上运行一个foreach循环。
我认为这样做会简化很多事情。

我已经将项目源绑定到了一个ArrayList,你能告诉我ArrayList<>和ObservableCollection之间有什么区别吗? - undefined
1
ArrayList在更改时不会触发事件。ObservableCollection则会这样做。这意味着,如果您向ArrayList添加一个项目,您的DataGrid不会自动显示该新项目。如果您向ObservableCollection添加一个项目,DataGrid将会“刷新”自己。 - undefined

-2
终于搞定了,我通过使用这段代码修复了错误。
 for (int i = 0; i < grid.Items.Count; i++)
            {
                GridModel row = (GridModel)grid.Items[i];
            }
// Note : The grid model is a class for the Datagrid ( properties are the same as the columns name of the datagrid 

因为我没有使用Observable Collection - undefined
你可以遍历任何实现了 IEnumerable 接口的内容,不一定需要可观察集合。 - undefined
但这对我也起作用了,我已经将其添加为解决方案。 - undefined
2
不是说这个不起作用。经过Data->GridView->Data是没有意义的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接