2009-08-13 85 views
1

我需要将ComponentArt网格中的内容导出到文件中,最好是csv格式的excel。ComponentArt:导出网格数据

我想知道如果有人有任何想法如何最好地接近这项任务。目前,我们已经在网格中填充了数据,并且在向用户显示之前使用客户端模板进行一些小操作。

所应用的模板的一个例子是:

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

所以当电网出口,我想该文件包含的内容是在网格在出口的那一刻起,包括任何模板的变化,可能如果可能的话可见。

非常感谢您的帮助。

回答

3

您无法直接使用RenderControl将Web.UI网格导出到文本编写器中。相反,您应该将其数据转换为另一种形式(如ASP DataGrid)并导出。

这背后的原因是Web.UI网格的结构是在客户端动态构建的 - 它从服务器传递到客户端,形成一堆XML和数组数据,它们被转换为您看到的表格和div在窗口中。

因此,您希望在网格的数据源上执行导出,然后分析客户端模板以复制在客户端上动态构建时要更改的内容。

以下是如何将CA电网将其导出到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(); 
} 

所以结合在GridView的数据源之前,您将要执行的ClientTemplate复制。

+0

从此链接复制:http://www.componentart.com/community/forums/t/36556.aspx – 2012-01-21 09:58:43

0

我会做的是我会在用户控件.ascx文件中定义组件艺术控件(以及模板)。然后,您可以使用这个小的代码片段呈现此控件的字符串:

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

string gridContent = sb.ToString(); 

现在,你有HTML格式的网格的内容。从那里开始,假设组件艺术具有良好的格式标记,您可以考虑将XML解析为XML,并将单元格值拉到CSV中。

假设您希望允许用户通过浏览器保存CSV文件,您可以实现一个自定义http处理程序,该处理程序呈现控件,创建CSV,然后将其作为“text/csv”发送到浏览器中

+0

不幸的是,这是行不通的。这是我尝试的第一件事,因为那将是我如何导出一个常规电网控制。 – 2009-08-19 15:20:47

+0

您是否在说CA网格不能呈现正确的HTML?那么也许你唯一的选择是将网格模板中的变换复制到另一个更容易重现的区域 – 2009-08-19 18:22:48