ComponentArt:导出网格数据

时间:2009-08-13 14:59:44

标签: excel templates grid export componentart

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

我想知道是否有人有任何想法如何最好地接近这项任务。目前,我们已经使用数据填充了网格,并且在使用客户端模板之前,正在执行一些微操作,然后才会向用户显示。

应用的模板示例如下:

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

因此,当导出网格时,我希望文件包含导出时网格中的内容,包括可能的可能显示的模板化更改。

提前感谢您的协助。

2 个答案:

答案 0 :(得分:3)

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

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

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

以下是如何将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复制。

答案 1 :(得分: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格式的网格内容。从那里开始,假设组件艺术具有良好的良好形成标记,您可以考虑将html解析为XML,并将单元格值拉出以转换为CSV。

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