2009-08-13 11 views
1

ComponentArt 그리드의 내용을 파일로 내보내려면 CSV 형식으로 내보내기가 필요합니다.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 Grid를 직접 텍스트 작성자로 내보낼 수 없습니다. 대신 데이터를 다른 양식 (예 : ASP DataGrid)으로 변환하여 내보내야합니다.

이 이유는 Web.UI Grid의 구조가 클라이언트에서 동적으로 빌드된다는 것입니다. XML 및 배열 데이터의 묶음으로 서버에서 클라이언트로 전달되므로 표시되는 div 및 div로 변환됩니다. 창문에.

그리드의 데이터 소스에서 내보내기를 수행 한 다음 클라이언트 템플릿을 분석하여 클라이언트에서 동적으로 빌드 될 때 변경 될 내용을 복제하고자 할 것입니다.

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 복제를 수행 할 것입니다 :

다음 엑셀로 CA 그리드를 내보내는 방법에 대한 간단한 예입니다.

+0

을보다 쉽게 ​​재현 할 수있는 다른 영역으로 복제하는 것만 가능합니다. http://www.componentart.com/community/forums/t/36556.aspx –

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 파일을 저장할 수 있도록하려는 경우 컨트롤을 렌더링하고 CSV를 만든 다음이를 브라우저에 "text/csv"로 전송하는 사용자 정의 http 처리기를 구현할 수 있습니다

+0

슬프게도 이것은 작동하지 않습니다. 내가 시도한 첫 번째 작업은 정규 그리드 컨트롤을 내보내는 방법이었습니다. –

+0

CA 그리드가 올바른 HTML을 렌더링하지 않는다는 말입니까? 그리드 템플리트의 변형을이 링크에서 복사 된 –