1

我需要将 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" />

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

预先感谢您的协助。

4

2 回答 2

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 复制。

于 2009-08-20T17:04:58.023 回答
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”发送到浏览器

于 2009-08-18T16:31:14.307 回答