导出数据时引发无法解释的 NullReferenceException

Unexplained NullReferenceException thrown while exporting data

提问人:i3aze 提问时间:8/14/2019 最后编辑:paramsi3aze 更新时间:8/15/2019 访问量:261

问:

当我尝试从应用程序中的数据网格导出数据时,它只导出 15 行(+ 标题),然后在第 16 行抛出 .有几次它设法导出了 35 行,然后在第 36 行抛出异常,但大多数时候它停在第 15 行。有没有人遇到过这种类型的问题?为什么第 16 行会导致此问题?NullReferenceException

我正在构建一个 C# WPF 应用程序,用户只需单击一个按钮即可将数据从数据库读取到 datagrdid 视图。我制作了另一个按钮,用于将数据从数据网格导出到 Excel 文件,以防用户需要 Excel 中的数据。因为我认为它与内存有关,所以我尝试重新启动 PC 以查看它可以导出多少行,然后通常(并非总是)它导出到第 35 行,而不是在我第二次点击运行时它只导出到第 15 行。该表相当大(182 列),因此我尝试使用只有 2 列和 40 行的较小表,并且行为没有变化。这是处理导出按钮事件的函数。on_click

private void ExportToExcel_Click(object sender, RoutedEventArgs e)
{
    Excel.Application excel = new Excel.Application();
    excel.Visible = true;
    Workbook workbook = excel.Workbooks.Add(System.Reflection.Missing.Value);
    Worksheet sheet1 = (Worksheet)workbook.Sheets[1];

    for (int j = 0; j < DelavciDataGrid.Columns.Count; j++)
    {
        Range myRange = (Range)sheet1.Cells[1, j + 1];
        sheet1.Cells[1, j + 1].Font.Bold = true;
        myRange.Value2 = DelavciDataGrid.Columns[j].Header;
    }

    for (int i = 1; i < DelavciDataGrid.Items.Count; i++)
    {
        for (int j = 0; j < DelavciDataGrid.Columns.Count; j++)
        {
            Range myRangee = (Range)sheet1.Cells[i + 1, j + 1];
            TextBlock b = DelavciDataGrid.Columns[j].GetCellContent(DelavciDataGrid.Items[i - 1]) as TextBlock;
            myRangee.Value2 = b.Text;
        }
    }
}

单击导出按钮后,将打开 Excel,它会填充从数据网格到电子表格的标题,然后填充从 1 行 1 列开始的行和列,这没关系。但随后它到了第 16 行,它就上线了NullReferenceException

myRangee.Value2 = b.Text;

我尝试使用调试器,确实在第 16 行设置为 null,但这就是让我感到困惑的地方。第 16 行中有一个值,正如我所说,我设法使用相同的查询从同一表导出到第 35 行几次。b.Text

C# Excel WPF 数据网格 NullReferenceException

评论


答:

-1赞 TheYellowSquares 8/14/2019 #1

如果您看到 null 值但该行中的值不是 null,我的第一个想法是,如果您的“as”强制转换找到无法转换为文本块的内容并返回 null。也许看看如果你创建一个 object 类型的 “preb” 变量和一个从 preb 转换的 “B” 变量会发生什么,看看 A 是否为 null 并且 B 是否为 null。如果是这种情况,那么您可能需要强制转换为其他对象或进行“if (b is X)”检查以解决问题。

评论

0赞 i3aze 8/29/2019
我通过从 DataTable 而不是 DataGridView 导出来解决这个问题。