2009-08-13 7 views
1

Ich muss den Inhalt in einem ComponentArt-Raster in eine Datei exportieren, vorzugsweise im CSV-Format.ComponentArt: Exportieren der Rasterdaten

Ich fragte mich, ob jemand irgendwelche Ideen hatte, wie man diese Aufgabe am besten angeht. Im Moment haben wir das Gitter mit Daten gefüllt, und mit Client-Templating wird eine kleine Manipulation durchgeführt, bevor es dem Benutzer angezeigt wird.

Ein Beispiel für eine Vorlage, die angewandt wird, ist:

<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" /> 

Also, wenn das Netz eingespeist wird, ich die Datei enthalten möchte, was im Moment des Exports einschließlich Templat Änderungen im Netz ist, dass kann wenn möglich sichtbar sein.

Vielen Dank im Voraus für Ihre Unterstützung.

Antwort

3

Sie können das Web.UI Grid nicht direkt mit RenderControl in einen Text-Writer exportieren. Stattdessen sollten Sie seine Daten in ein anderes Formular (z. B. das ASP-DataGrid) konvertieren und stattdessen exportieren.

Der Grund dafür ist, dass die Struktur des Web.UI Grid dynamisch auf dem Client erstellt wird - es wird von Server zu Client als ein Bündel von XML- und Array-Daten übergeben, die in die angezeigten Tabellen und Divs konvertiert werden im Fenster.

Als Ergebnis möchten Sie den Export für die Datenquelle des Rasters ausführen und dann die Clientvorlagen analysieren, um zu replizieren, was sie ändern würden, wenn sie dynamisch auf dem Client erstellt würden.

Hier finden Sie ein kurzes Beispiel dafür, wie die CA Gitter es in Excel zu exportieren:

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(); 
} 

Also, bevor die Datenquelle des Gridview-Bindung Sie die ClientTemplate Replikation durchführen möchten.

+0

kopiert von diesem Link: http://www.componentart.com/community/forums/t/36556.aspx –

0

Was ich tun würde ist, dass ich die Komponente Art-Steuerelement (zusammen mit Vorlagen) in einer Benutzersteuerelement. ASCX-Datei definieren würde. Sie können dann diese Steuerung in einen String mit diesem kleinen Code-Schnipsel machen:

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

string gridContent = sb.ToString(); 

Nun können Sie den Inhalt des Gitters im HTML-Format haben. Wenn man davon ausgeht, dass die Komponente art ein gutes, gut geformtes Markup hat, könnte man davon ausgehen, dass man den HTML-Code als XML analysiert und die Zellenwerte herauszieht, um sie in die CSV-Datei umzuwandeln.

Angenommen, Sie möchten, dass der Benutzer die CSV-Datei über einen Browser speichern kann, können Sie einfach einen benutzerdefinierten HTTP-Handler implementieren, der das Steuerelement rendert, CSV erstellt und dann als "text/csv"

an den Browser sendet
+0

Leider funktioniert das nicht. Es war das erste, was ich ausprobierte, denn so würde ich eine regelmäßige Gitterkontrolle exportieren. –

+0

Sagen Sie, dass das CA-Grid nicht korrektes HTML rendert? dann ist vielleicht Ihre einzige Option, die Transformationen in der Rastervorlage in einen anderen Bereich zu kopieren, der leichter reproduzierbar ist –

Verwandte Themen