WPF数据网格错误:NullReferenceException,如何从数据网格中的每个单元中获取数据

本文关键字:数据 网格 数据网 获取 单元 错误 NullReferenceException WPF | 更新日期: 2023-09-27 18:19:20

我有一个WPF程序,从数据网格中获取数据。但是这个程序总是显示错误:NullReferenceException未被用户代码处理。对象引用未设置为对象的实例

有什么问题吗?下面是代码

 private string GetDatagrid(DataGrid grid)
    {
        var data = (ObservableCollection<ConfigViewModel>)grid.ItemsSource;
        StringBuilder dataStr = new StringBuilder();
        for (int i = 0; i < data.Count; i++)
        {
            for (int j = 0; j < grid.Columns.Count; j++)
            {
                TextBlock selectTextBlockInCell = grid.Columns[j].GetCellContent(data[i]) as TextBlock;
                string configVari= selectTextBlockInCell.Text; //This line comes the error!
                dataStr.Append(configVari);
                dataStr.Append("#");
            }
            dataStr.Remove(dataStr.Length - 1, 1);  
            dataStr.Append(@"''");
        }
        return dataStr.ToString();
    }

WPF数据网格错误:NullReferenceException,如何从数据网格中的每个单元中获取数据

看起来这个来自另一个SO帖子的答案可能会奏效。

获取数据网格的行。

public IEnumerable<Microsoft.Windows.Controls.DataGridRow> GetDataGridRows(Microsoft.Windows.Controls.DataGrid grid)
{
    var itemsSource = grid.ItemsSource as IEnumerable;
    if (null == itemsSource) yield return null;
    foreach (var item in itemsSource)
    {
        var row = grid.ItemContainerGenerator.ContainerFromItem(item) as Microsoft.Windows.Controls.DataGridRow;
        if (null != row) yield return row;
    }
}

然后遍历。

var rows= GetDataGridRows(nameofyordatagrid); 
foreach (DataGridRow r in rows)  
  {  
    DataRowView rv = (DataRowView)r.Item;
    foreach (DataGridColumn column in nameofyordatagrid.Columns)
    {
        if (column.GetCellContent(r) is TextBlock)
        {
            TextBlock cellContent = column.GetCellContent(r) as TextBlock;
            MessageBox.Show(cellContent.Text);
        }
  }