JQGgrid-如何从网格数据生成pdf / excel文件

时间:2016-10-26 19:17:03

标签: json ajax jqgrid

我有以下JQGrid表,它是从JSON数据生成的。我希望能够基于可查看的表数据状态生成/导出或创建pdf文件。我正在使用JSON,Jqgrid和Javascript

如何从数据生成pdf文件? Here My FIDDLE

JS CODE

{{1}}

1 个答案:

答案 0 :(得分:0)

没有用于将jqgrid数据导出到pdf的方法。你必须使用第三方工具(我个人喜欢可以从Here 下载的iTextSharp。你必须创建在控制器中打印网格数据的操作方法。

Here 也是另一个人做的例子。

Here 也是trirand中的另一个例子。如果您看到他们使用iTextHsarp的源代码。     使用System.Collections.Generic;     使用System.Linq;     使用System.Web;     使用System.Web.Mvc;     使用JQGridMVCExamples.Models;     使用Trirand.Web.Mvc;     使用System.IO;

// 
// For PDF export we are using the free open-source iTextSharp library.
//
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Data;


namespace JQGridMVCExamples.Controllers.Grid
{
    public partial class GridController : Controller
    {
        // This is the default action for the View. Use it to setup your grid Model.
        public ActionResult ExportPDF()
        {
            // Get the model (setup) of the grid defined in the /Models folder.
            var gridModel = new OrdersJqGridModel();
            var ordersGrid = gridModel.OrdersGrid;

            // Setting the DataUrl to an action (method) in the controller is required.
            // This action will return the data needed by the grid
            ordersGrid.DataUrl = Url.Action("PDFGrid_DataRequested");

            // customize the default Orders grid model with custom settings
            // NOTE: you need to call this method in the action that fetches the data as well,
            // so that the models match
            SetPDFExportGrid(ordersGrid);

            // Pass the custmomized grid model to the View
            return View(gridModel);
        }

        // This method is called when the grid requests data        
        public JsonResult PDFGrid_DataRequested()
        {
            // Get both the grid Model and the data Model
            // The data model in our case is an autogenerated linq2sql database based on Northwind.
            var gridModel = new OrdersJqGridModel();
            var northWindModel = new NorthwindDataContext();

            // customize the default Orders grid model with our custom settings
            SetPDFExportGrid(gridModel.OrdersGrid);

            // Save the current grid state in Session
            // We will later need it for PDF Export
            JQGridState gridState = gridModel.OrdersGrid.GetState();
            Session["gridState"] = gridState;

            // return the result of the DataBind method, passing the datasource as a parameter
            // jqGrid for ASP.NET MVC automatically takes care of paging, sorting, filtering/searching, etc

            return gridModel.OrdersGrid.DataBind(northWindModel.Orders);
        }

        public JsonResult PDFExport_AutoCompleteShipName(string term)
        {
            var northWindModel = new NorthwindDataContext();
            JQAutoComplete autoComplete = new JQAutoComplete();

            autoComplete.DataField = "ShipName";
            autoComplete.AutoCompleteMode = AutoCompleteMode.BeginsWith;
            autoComplete.DataSource = from o in northWindModel.Orders
                                      select o;
            return autoComplete.DataBind();
        }

        private void SetPDFExportGrid(JQGrid ordersGrid)
        {
            // show the search toolbar
            ordersGrid.ToolBarSettings.ShowSearchToolBar = true;
            ordersGrid.ToolBarSettings.ShowSearchButton = true;

            var orderDateColumn = ordersGrid.Columns.Find(c => c.DataField == "OrderDate");
            orderDateColumn.DataFormatString = "{0:yyyy/MM/dd}";
            orderDateColumn.SearchType = SearchType.DatePicker;
            orderDateColumn.DataType = typeof(DateTime);
            orderDateColumn.SearchControlID = "DatePicker";
            orderDateColumn.SearchToolBarOperation = SearchOperation.IsEqualTo;

            var shipNameColumn = ordersGrid.Columns.Find(c => c.DataField == "ShipName");
            shipNameColumn.SearchType = SearchType.AutoComplete;
            shipNameColumn.DataType = typeof(string);
            shipNameColumn.SearchControlID = "AutoComplete";
            shipNameColumn.SearchToolBarOperation = SearchOperation.Contains;

            var orderIDColumns = ordersGrid.Columns.Find(c => c.DataField == "OrderID");
            orderIDColumns.Searchable = true;
            orderIDColumns.DataType = typeof(int);
            orderIDColumns.SearchToolBarOperation = SearchOperation.IsEqualTo;

            SetPDFCustomerIDSearchDropDown(ordersGrid);
            SetPDFFreightSearchDropDown(ordersGrid);
        }

        private void SetPDFCustomerIDSearchDropDown(JQGrid ordersGrid)
        {
            // setup the grid search criteria for the columns
            JQGridColumn customersColumn = ordersGrid.Columns.Find(c => c.DataField == "CustomerID");
            customersColumn.Searchable = true;

            // DataType must be set in order to use searching
            customersColumn.DataType = typeof(string);
            customersColumn.SearchToolBarOperation = SearchOperation.IsEqualTo;
            customersColumn.SearchType = SearchType.DropDown;

            // Populate the search dropdown only on initial request, in order to optimize performance
            if (ordersGrid.AjaxCallBackMode == AjaxCallBackMode.RequestData)
            {
                var northWindModel = new NorthwindDataContext();
                var searchList = from customers in northWindModel.Customers
                                 select new SelectListItem
                                 {
                                     Text = customers.CustomerID,
                                     Value = customers.CustomerID
                                 };

                customersColumn.SearchList = searchList.ToList<SelectListItem>();
                customersColumn.SearchList.Insert(0, new SelectListItem { Text = "All", Value = "" });
            }
        }

        private void SetPDFFreightSearchDropDown(JQGrid ordersGrid)
        {
            // setup the grid search criteria for the columns
            JQGridColumn freightColumn = ordersGrid.Columns.Find(c => c.DataField == "Freight");
            freightColumn.Searchable = true;

            // DataType must be set in order to use searching
            freightColumn.DataType = typeof(decimal);
            freightColumn.SearchToolBarOperation = SearchOperation.IsGreaterOrEqualTo;
            freightColumn.SearchType = SearchType.DropDown;

            // Populate the search dropdown only on initial request, in order to optimize performance
            if (ordersGrid.AjaxCallBackMode == AjaxCallBackMode.RequestData)
            {
                List<SelectListItem> searchList = new List<SelectListItem>();
                searchList.Add(new SelectListItem { Text = "> 10", Value = "10" });
                searchList.Add(new SelectListItem { Text = "> 30", Value = "30" });
                searchList.Add(new SelectListItem { Text = "> 50", Value = "50" });
                searchList.Add(new SelectListItem { Text = "> 100", Value = "100" });

                freightColumn.SearchList = searchList.ToList<SelectListItem>();
                freightColumn.SearchList.Insert(0, new SelectListItem { Text = "All", Value = "" });
            }
        }

        public ActionResult ExportToPDF(string exportType)
        {            
            var gridModel = new OrdersJqGridModel();
            var northWindModel = new NorthwindDataContext();
            var grid = gridModel.OrdersGrid;

            // Get the last grid state the we saved before in Session in the DataRequested action
            JQGridState gridState = Session["GridState"] as JQGridState;

            // Need to set grid options again
            SetExportGrid(grid);

            if (String.IsNullOrEmpty(exportType))
                exportType = "1";

            DataTable exportData;
            switch (exportType)
            {
                case "1":
                    grid.ExportSettings.ExportDataRange = ExportDataRange.All;
                    exportData = grid.GetExportData(northWindModel.Orders);
                    ExportToPDF(exportData);
                    break;
                case "2":
                    grid.ExportSettings.ExportDataRange = ExportDataRange.Filtered;
                    exportData = grid.GetExportData(northWindModel.Orders, gridState);
                    ExportToPDF(exportData);
                    break;
                case "3":
                    grid.ExportSettings.ExportDataRange = ExportDataRange.FilteredAndPaged;
                    exportData = grid.GetExportData(northWindModel.Orders, gridState);
                    ExportToPDF(exportData);
                    break;
            }

            return View();
        }

        private void ExportToPDF(DataTable dt)
        {
            // 
            // For PDF export we are using the free open-source iTextSharp library.
            //

            Document pdfDoc = new Document();
            MemoryStream pdfStream = new MemoryStream();
            PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, pdfStream);

            pdfDoc.Open();//Open Document to write
            pdfDoc.NewPage();

            Font font8 = FontFactory.GetFont("ARIAL", 7);

            PdfPTable PdfTable = new PdfPTable(dt.Columns.Count);
            PdfPCell PdfPCell = null;

            //Add Header of the pdf table
            for (int column = 0; column < dt.Columns.Count; column++)
            {
                PdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Columns[column].Caption, font8)));
                PdfTable.AddCell(PdfPCell);
            }

            //How add the data from datatable to pdf table
            for (int rows = 0; rows < dt.Rows.Count; rows++)
            {
                for (int column = 0; column < dt.Columns.Count; column++)
                {
                    PdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Rows[rows][column].ToString(), font8)));
                    PdfTable.AddCell(PdfPCell);
                }
            }

            PdfTable.SpacingBefore = 15f; // Give some space after the text or it may overlap the table            
            pdfDoc.Add(PdfTable); // add pdf table to the document
            pdfDoc.Close();
            pdfWriter.Close();

            Response.ClearContent();
            Response.ClearHeaders();
            Response.ContentType = "application/pdf";
            Response.AppendHeader("Content-Disposition", "attachment; filename=gridexport.pdf");
            Response.BinaryWrite(pdfStream.ToArray());
            Response.End();
        }
    }
}
相关问题