2011-11-28 2 views
5

나는 눈금보기가있다. 어떤 컬럼을 포함합니다. 그것이 단지 10 개의 열을 가지고 있다고 가정하면, 2 개의 열만이 있습니다. 반면에 2 개의 열 머리글은 비어 있습니다. 이제 이름없이 2 개의 열이있는 10 개의 열이 모두 포함 된 Excel에이 gridview를 내보내고 있습니다. GridView를 엑셀으로 내보내는 동안 빈 헤더 열 두 개를 제외 할 수 있습니까? 당신이 그들을 필요하지 않은 경우엑셀에서 그리드보기를 내보내는 동안 일부 열을 건너 뛰는 방법은 무엇입니까?

 protected void btnExportToExcel_Click(object sender, EventArgs e) 
     { 
      Export("Customers.xls", this.gdvMessages); 
     } 

     private void Export(string fileName, GridView gv) 
     { 
      HttpContext.Current.Response.Clear(); 
      HttpContext.Current.Response.AddHeader(
      "content-disposition", string.Format("attachment; filename={0}", fileName)); 
      HttpContext.Current.Response.ContentType = "application/ms-excel"; 

      using (StringWriter sw = new StringWriter()) 
      { 
       using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
       { 
        // Create a form to contain the grid 
        Table table = new Table(); 

        // add the header row to the table 
        if (gv.HeaderRow != null) 
        { 
         PrepareControlForExport(gv.HeaderRow); 
         table.Rows.Add(gv.HeaderRow); 
        } 

        // add each of the data rows to the table 
        foreach (GridViewRow row in gv.Rows) 
        { 
         PrepareControlForExport(row); 
         table.Rows.Add(row); 
        } 

        // add the footer row to the table 
        if (gv.FooterRow != null) 
        { 
         PrepareControlForExport(gv.FooterRow); 
         table.Rows.Add(gv.FooterRow); 
        } 

        // render the table into the htmlwriter 
        table.RenderControl(htw); 

        // render the htmlwriter into the response 
        HttpContext.Current.Response.Write(sw.ToString()); 
        HttpContext.Current.Response.End(); 
       } 
      } 
     } 

답변

3

당신은 당신의 HTML 테이블의 두 열을 포함 할 수 없습니다 .... 또는 당신이 때 사용자 테이블을 다시 쓸 수있다 : 나는 같은 위해 다음 코드를 사용하고 "Excel로 내보내기"버튼을 누르고 열을 포함시키지 마십시오. 또한 테이블과 숨겨진 열이있는 다른 테이블을 가져 와서 사용자가 "Excel로 내보내기"버튼을 클릭 할 때 데이터를 가져올 수 있습니다. 또한 데이터를 전혀 표시 할 수 없으며 사용자가 페이지를로드하거나 버튼을 클릭하여 열이없는 데이터를 다운로드 할 수 있습니다. 행운을 빕니다!

편집 :이 독점적 인 시나리오의 경우, 다음과 같은 방법으로 코드를 편집 할 수 있습니다 : 어떤 코드의 일부가하는 일은 헤더 행의 각 셀을 통해 루프입니다

// add the header row to the table 
      if (gv.HeaderRow != null) 
      { 
       TableRow tr = new TableRow(); 

       foreach (DataControlFieldHeaderCell c in gv.HeaderRow.Cells) 
       { 
        if (c.Text != " ") { 
         tr.Cells.Add(new TableCell() { Text = c.Text}); 
        } 
       } 

       PrepareControlForExport(tr); 
       table.Rows.Add(tr); 
      } 

, 그리고 경우 그것은 비어있는 다음 그것을 포함하지 않습니다. 그런 다음 html 테이블에 추가하십시오. 원하는 경우 테이블의 나머지 부분에서이 열이 속하는 셀 판을 추가하도록 조정할 수 있습니다. 이게 당신이 아마 당신의 실제 Gridview와 스크린 샷 몇 가지가 필요하지 않은 경우 원하는 출력 이상적입니다.

행운을 빈다. 아래의 코드를 사용하여 Excel로 내보내는 동안

+0

"HTML 테이블에 두 개의 열을 포함하지 말아야합니다."예제를 제공 할 수 있습니까? – Sandy

2

대신 당신은 그 열을 숨길 수 있습니다

this.myGridview.Columns [0] .Visible = 거짓;

여기서 '0'은 숨기려는 열의 색인입니다.

+0

이전 버전의 vb.net 코드를 사용하는 DataGrid 컨트롤을 사용하고 있었을 때 Sandy와 동일한 필요성이있었습니다. user2508258 아이디어가 나를 위해 문제를 해결했습니다. 내 vb.net 코드 : DataGrid1.Columns (0) .Visible = False (Excel로 내보내기 도중 첫 번째 열을 없애기를 원했습니다.) – Doreen

관련 문제