为什么我在这里失去会议?

时间:2009-01-09 15:35:04

标签: c# asp.net

我有一个带有按钮的页面,当我单击它时,它会从数据库中检索数据并将其存储到数据表中并将其绑定到GridView。该数据表存储在Session变量中。我还有一个按钮,用于将指定列从数据表导出到excel文件,但是当我再次单击导出按钮时,出现以下错误:

对象引用未设置为对象的实例。

这似乎发生在这一行:

dtExport.Columns [“Business”]。ColumnName =“被许可人”;

我想我知道为什么,原始列名为“Business”,但是当我导出时,我想将列标题导出为被许可方,因此我将ColumnName更改为“被许可方”;但是当我第二次调用Export时,它再次找到它找不到的dtExport.Columns [“Business”],所以它会抛出一个错误。我是否只需要检查列是否已重命名以解决此问题还是有另一种方法?

以下是执行导出的代码:

private void ExportExcel()
{
    DataTable dtExport = Session["dtSearchResults"] as DataTable;

    dtExport.Columns["Business"].ColumnName = "Licensee";

    List<int> columnSelect = new List<int>();

    columnSelect.Add(dtExport.Columns["Licensee"].Ordinal);
    columnSelect.Add(dtExport.Columns["Name"].Ordinal);
    columnSelect.Add(dtExport.Columns["Address"].Ordinal);
    columnSelect.Add(dtExport.Columns["City"].Ordinal);
    columnSelect.Add(dtExport.Columns["State"].Ordinal);
    columnSelect.Add(dtExport.Columns["Zip"].Ordinal);

    int[] ColList = columnSelect.ToArray();

    GridViewExportUtil.ExportDetails(dtExport, 
                                     ColList,
                                     GridViewExportUtil.ExportFormat.Excel,
                                     string.Format("{0}_{1}-{2}-{3}{4}",
                                     "SearchResults",
                                     DateTime.Now.Month, 
                                     DateTime.Now.Day,
                                     DateTime.Now.Year, 
                                     ".xls"));
    }

当您更改ColumnName时,即使您再次从Session获取新的DataTable,它是否仍然存在?

3 个答案:

答案 0 :(得分:3)

我猜测该值是通过引用,当您更改业务列名称时,它也会在Session中更改。我会试试这个:

DataTable dtExport = (Session["dtSearchResults"] as DataTable).Copy();

答案 1 :(得分:1)

您没有获得新的DataTable,而是获得最初生成的DataTable。您对其所做的任何更改仍有待后续使用。

在这种情况下,我会在导出后将列重命名为其原始名称。

答案 2 :(得分:1)

这是一个糟糕的解决方案,但是......添加

dtExport.Columns["Licensee"].ColumnName = "Business";

在您的方法结束时恢复初始状态。 并添加一些错误/存在检查。