2010-08-16 30 views
15

Tôi quan tâm đến việc tạo tùy chọn Xuất sang Excel tùy chỉnh cho Báo cáo của tôi trong ReportViewer. Điều này chủ yếu là bởi vì tôi muốn pdf disalbed và tôi đã làm điều đó thông qua:Tạo tùy chỉnh xuất sang Excel cho ReportViewer (rdlc)

ReportViewer1.ShowExportControls = false; 

Vì không có cách nào để vô hiệu hóa bất kỳ chức năng xuất cụ thể (ví dụ pdf nhưng không excel) trong ReportViewer. Đây là mã được sửa đổi (hơi) của tôi bên dưới. Lý tưởng nhất là tôi muốn một cái gì đó tương tự như các tùy chọn xuất khẩu trước đó, nơi tôi có thể lưu các tập tin vào bất cứ vị trí nào tôi muốn. EDIT: Mã hoạt động nhưng làm cách nào tôi cần sửa đổi Filestream để thay vì tự động lưu tệp, tôi có thể nhắc người dùng để họ có thể lưu vào bất kỳ vị trí nào họ muốn?

protected void btnExportExcel_Click(object sender, EventArgs e) 
{ 
    Warning[] warnings; 
    string[] streamids; 
    string mimeType; 
    string encoding; 
    string extension; 

    byte[] bytes = ReportViewer1.LocalReport.Render(
     "Excel", null, out mimeType, out encoding, 
     out extension, 
     out streamids, out warnings); 

    FileStream fs = new FileStream(@"c:\output.xls", 
     FileMode.Create); 
    fs.Write(bytes, 0, bytes.Length); 
    fs.Close(); 

} 

Trả lời

18

tôi đặt này với nhau dựa trên tài liệu của Microsoft trên ReportViewer và một số tìm kiếm Google trong trường hợp bất cứ ai chạy vào vấn đề tương tự như tôi:

protected void ExportExcel_Click(object sender, EventArgs e) 
{ 
    Warning[] warnings; 
    string[] streamids; 
    string mimeType; 
    string encoding; 
    string extension; 
    string filename; 

    byte[] bytes = ReportViewer1.LocalReport.Render(
     "Excel", null, out mimeType, out encoding, 
     out extension, 
     out streamids, out warnings); 

    filename = string.Format("{0}.{1}", "ExportToExcel", "xls"); 
    Response.ClearHeaders(); 
    Response.Clear(); 
    Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); 
    Response.ContentType = mimeType; 
    Response.BinaryWrite(bytes); 
    Response.Flush(); 
    Response.End(); 
} 
26

Chỉ cần một người đứng đầu lên ... câu trả lời chấp nhận sẽ hiển thị dưới dạng tệp XLS, được yêu cầu bởi áp phích gốc.

Tuy nhiên, giờ đây bạn có thể xuất sang XLSX. Bạn phải thay đổi thông số format của phương pháp Render() từ "Excel" thành "EXCELOPENXML".

Để nhận danh sách đầy đủ các giá trị có thể bạn có thể gọi ReportViewer1.LocalReport.ListRenderingExtensions(). Khi tôi chạy nó trên dụ xem báo cáo của tôi, tôi có các tùy chọn có thể:

"Excel" "EXCELOPENXML" "IMAGE" "PDF" "WORD" "WORDOPENXML"

tôi thấy nó rất khó để xác định những gì bạn cần phải vượt qua trong cho các định dạng . MSDN tài liệu này rất kém nếu bạn hỏi tôi.

+1

Tôi đã tìm kiếm câu trả lời này quá lâu. Cảm ơn nhiều. –

0

Nếu bạn muốn ẩn một lựa chọn xuất khẩu duy nhất (mặc dù nó có vẻ như bạn dường như để tìm một xuất khẩu tùy chỉnh hữu ích), đây là hai lựa chọn:

Lựa chọn A. Sử dụng CSS để ẩn các tùy chọn xuất khẩu:

  1. Trong cửa sổ gỡ lỗi F12 của trình duyệt, tìm phần tử DOM HTML để xuất, nhấp chuột phải vào nó và sao chép mã định danh CSS duy nhất.
  2. Thêm phần này vào file CSS của bạn (thay thế bộ chọn CSS với bối cảnh của clipboard của bạn):

    #ReportViewer1_ctl05_ctl04_ctl00_Menu > div:nth-child(3) 
    { 
        display:none; 
    } 
    

Cần thận trọng khi tham khảo một CSS selector mơ hồ như thế này, vì đây là hackish.

Lựa chọn B. Sử dụng mã-đằng sau để ẩn các tùy chọn xuất khẩu

  1. Thêm phương pháp dưới đây để aspx của bạn.cs tệp dưới dạng mã back-end.

    public void DisableUnwantedExportFormat(ReportViewer ReportViewerID, string strFormatName) 
    { 
        FieldInfo info; 
        foreach (RenderingExtension extension in ReportViewerID.ServerReport.ListRenderingExtensions()) 
        { 
         if (extension.Name == strFormatName) 
         { 
          info = extension.GetType().GetField("m_isVisible", BindingFlags.Instance | BindingFlags.NonPublic); 
          info.SetValue(extension, false); 
         } 
        } 
    } 
    
  2. Chọn điều khiển Reportviewer có liên quan và nhấn F4.

  3. Trong cửa sổ Properties, nhấp vào biểu tượng sự kiện, sau đó nhấp đúp chuột vào mục PreRender để tạo ra các phương pháp ReportViewer1_PreRender, tôi giả sử ID kiểm soát ReportViewer của bạn là ReportViewer1, chỉnh sửa phương pháp của bạn như dưới đây:

    protected void ReportViewer1_PreRender(object sender, EventArgs e) 
    { 
        DisableUnwantedExportFormat((ReportViewer)sender,"Excel"); 
    } 
    

(Nguồn: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/74dad27b-ef7e-4b9b-8922-666b317b3094/how-to-hide-pdf-in-export-option-in-ssrs-reportviewer?forum=sqlreportingservices và liên kết @ valik chỉ trả lời.)