我需要将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" />
因此,当导出网格时,我希望文件包含导出时网格中的内容,包括可能的可能显示的模板化更改。
提前感谢您的协助。
答案 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”发送到浏览器