2009-08-13 8 views
1

J'ai besoin d'exporter le contenu d'une grille ComponentArt dans un fichier, de préférence Excel au format csv.ComponentArt: Exportation des données de la grille

Je me demandais si quelqu'un avait des idées sur la meilleure manière d'aborder cette tâche. À l'heure actuelle, nous avons rempli la grille de données et, en utilisant le modèle client, une manipulation mineure est en cours avant d'être affichée à l'utilisateur.

Un exemple d'un modèle qui est appliqué est:

<ComponentArt:ClientTemplate Id="PostTemplate"> 
    ## DataItem.GetMember("LastPostBy").Value ##<br />## DataItem.GetMember("LastPostDate").Value ## 
</ComponentArt:ClientTemplate> 

Where the column definitions are: 

<ComponentArt:GridColumn Width="140" HeadingText="Last Post By " DataCellClientTemplateId="PostTemplate" /> 
<ComponentArt:GridColumn DataField="LastPostBy" Visible="false" /> 
<ComponentArt:GridColumn DataField="LastPostDate" Visible="false" /> 

Ainsi, lorsque la grille est exportée je voudrais le fichier pour contenir ce qui est dans la grille au moment de l'exportation, y compris toute modification templated qui peut être visible si possible.

Merci d'avance pour votre aide.

Répondre

3

Vous ne pouvez pas exporter la grille Web.UI directement à l'aide de RenderControl dans un éditeur de texte. Au lieu de cela, vous devez convertir ses données dans un autre formulaire (tel que le DataGrid ASP) et l'exporter à la place.

La raison derrière cela est que la structure de la grille de Web.UI est construite dynamiquement sur le client - elle est transmise du serveur au client sous la forme d'un ensemble de données XML et matricielles, qui sont converties en tables et divs dans la fenêtre. Par conséquent, vous souhaiterez effectuer l'exportation sur la source de données de la grille, puis analyser les modèles de client pour répliquer ce qu'ils changeraient lorsqu'ils seraient générés dynamiquement sur le client.

Voici un court exemple de la façon d'exporter la grille de CA dans Excel:

public void ExportDataSetToExcel() { 
    object theColl = gridEmployee.DataSource; //just set this as your grid's datasource. 
    GridView excelGrid = new GridView(); 
    excelGrid.DataSource = theColl; 
    excelGrid.ID = "Export"; 
    excelGrid.DataBind(); 
    excelGrid.AutoGenerateColumns = true; 

    Response.Clear(); 
    Response.Buffer = true; 
    Response.ContentType = "application/vnd.ms-excel"; 
    Response.AddHeader("content-disposition", "attachment;filename=RegainExport.xls"); 
    Response.Charset = ""; 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 
    excelGrid.RenderControl(htmlWrite); 
    Response.Write(stringWrite.ToString()); 
    Response.End(); 
} 

Alors avant de lier le DataSource du GridView vous voudrez effectuer la réplication de ClientTemplate.

+0

copié à partir de ce lien: http://www.componentart.com/community/forums/t/36556.aspx –

0

Ce que je ferais, c'est que je définirais le contrôle artistique du composant (avec des modèles) dans un fichier .ascx de contrôle utilisateur. Vous pouvez ensuite rendre ce contrôle à une chaîne en utilisant ce petit fragment de code:

StringBuilder sb = new StringBuilder(); 
using (StringWriter sw = new StringWriter(sb)) 
using (HtmlTextWriter textWriter = new HtmlTextWriter(sw)) 
{ 
    theGrid.RenderControl(textWriter); 
} 

string gridContent = sb.ToString(); 

Maintenant, vous avez le contenu de la grille au format HTML. À partir de là, en supposant que l'art des composants possède un bon balisage bien formé, vous pouvez envisager d'analyser le code HTML en XML et d'extraire les valeurs des cellules pour les transformer en CSV.

En supposant que vous souhaitez autoriser l'utilisateur à enregistrer le fichier CSV via un navigateur, vous pouvez simplement implémenter un gestionnaire http personnalisé qui rend le contrôle, crée le CSV, puis l'envoie au navigateur en tant que "text/csv"

+0

Malheureusement, cela ne fonctionne pas. C'était la première chose que j'ai essayé, car ce serait comme ça que j'exporterais un contrôle de grille régulier. –

+0

Voulez-vous dire que la grille CA ne rend pas le HTML correct? alors peut-être votre seule option est de dupliquer les transformations dans le modèle de grille dans un autre domaine qui est plus facilement reproductible –

Questions connexes