J'ai une page avec un bouton que lorsque je clique, il récupère les données d'une base de données et les stocke dans un datatable et le lie à un GridView. Cette donnée est stockée dans une variable de session. J'ai aussi un bouton qui exporte les colonnes spécifiées du datatable vers un fichier Excel, mais lorsque je clique une seconde fois sur le bouton d'export, j'obtiens l'erreur suivante:Pourquoi est-ce que je perds la session ici?
La référence d'objet n'est pas définie sur une instance d'un objet.
Il semble se produire à cette ligne.
dtExport.Columns [ "affaires"] = NomColonne "Licencié"; Je pense que je sais pourquoi, la colonne d'origine s'appelle "Business", mais quand j'exporte, je veux exporter l'en-tête de la colonne en tant que Licencié, donc je change le nom de la Colonne en "Licencié"; Toutefois, lorsque j'appelle Export une seconde fois, il recherche à nouveau dtExport.Columns ["Business"], qu'il ne trouve pas, ce qui provoque une erreur. Ai-je juste besoin de vérifier si la colonne a déjà été renommée pour résoudre ce problème ou existe-t-il un autre moyen?
Voici le code qui fait l'exportation:
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"));
}
Lorsque vous modifiez un NomColonne, est-il Persit, même si vous obtenez une nouvelle DataTable de session à nouveau?
Est-ce que cela a des performances ou une surcharge? – Xaisoft
Bien sûr, mais seulement sur le bouton cliquez sur le téléchargement pour exceller, ce qui est relativement peu fréquent. Dépend de la taille de la datatable. – Shawn
C'était la meilleure solution. Je suppose que parce que je copie, je garde intacts les noms de colonnes d'origine, mais dans l'autre sens, je les changeais en mémoire, est-ce une bonne façon d'y penser? – Xaisoft