2009-03-12 4 views
3

Je génère un rapport via Linq to SQL et l'affiche sur le site Web.Enregistrer IList <T> ou IQueryable <T> vers Excel - C#

Je dois enregistrer le rapport dans MS Excel (ou .csv) et l'envoyer par e-mail à l'utilisateur. Des idées sur la façon de l'enregistrer comme Excel ou .csv?

.NET 3.5/C#

EDIT:

le Gridview hack fonctionne parfaitement. Si vous utilisez AJAX sur la page, assurez-vous d'ajouter un PostBaseTrigger à votre panneau de mise à jour pour provoquer un POSTBACK COMPLET, cela ne fonctionnera pas autrement.

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:Button ID="Button1" runat="server" Text="Export Grid" 
      onclick="Button1_Click" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="Button1" /> 
    </Triggers> 
</asp:UpdatePanel> 

J'ai aussi trouvé un Library to Generate Excel XML Workbooks in .NET, mais il est pas aussi simple que la solution acceptée.

+0

Plus de détails seraient utiles. Avez-vous un problème spécifique? Quelle erreur avez-vous obtenu? – Andy

Répondre

2

Cette gridview hack est la solution la plus simple que j'ai trouvée.

+1

Cela fonctionne très bien pour un petit ensemble de résultats, mais pour les plus grands, LINQtoCSV est certainement une meilleure solution. – kwcto

5

Passez à this article on LINQtoCSV on Code Project. Ensuite, ouvrez le code source dans VS et de commenter la ligne 201 FieldMapper.cs pour corriger un bug qui mutile l'ordre des colonnes:

//Array.Sort(m_IndexToInfo); 

recompiler et vous êtes bon pour aller.

(j'ai trouvé que des commentaires de l'article)

ensuite utiliser:

CsvFileDescription outputFileDescription = new CsvFileDescription 
{ 
    SeparatorChar = '\t', // tab delimited 
    FirstLineHasColumnNames = false // no column names in first record 
}; 

CsvContext cc = new CsvContext(); 

cc.Write(
    YOUR_IQUERYABLE_RESULT_HERE, 
    "filename.csv", 
    outputFileDescription); 

J'ai fait une méthode d'extension IQueryable <T> .WriteToFile (chemin) simplifié, mais je n'ai pas sur cette machine.

Questions connexes