Asp.net mvc 使用剑道网格自动导出到Excel

Asp.net mvc 使用剑道网格自动导出到Excel,asp.net-mvc,excel,kendo-grid,Asp.net Mvc,Excel,Kendo Grid,我有一个asp.net MVC5项目,在这个项目中,我使用Kendo网格显示表格数据,并为用户提供导出到Excel的功能。这些数据集的列数相对较小。e、 g.大部分为3-6列。然而,我有一些持怀疑态度的用户,他们希望能够看到为剑道图表提供数据的数据,其中数据集比我希望在视图/浏览器中放置在网格中的数据集要大 我的问题是,是否有人想出了一种方法,可以在不显示网格的情况下使用作为网格一部分的“导出到Excel”功能。我喜欢“导出”将数据推送到Excel的所有附加功能,因此我想知道这与将我自己的输出滚

我有一个asp.net MVC5项目,在这个项目中,我使用Kendo网格显示表格数据,并为用户提供导出到Excel的功能。这些数据集的列数相对较小。e、 g.大部分为3-6列。然而,我有一些持怀疑态度的用户,他们希望能够看到为剑道图表提供数据的数据,其中数据集比我希望在视图/浏览器中放置在网格中的数据集要大

我的问题是,是否有人想出了一种方法,可以在不显示网格的情况下使用作为网格一部分的“导出到Excel”功能。我喜欢“导出”将数据推送到Excel的所有附加功能,因此我想知道这与将我自己的输出滚动到可以由Excel打开的csv文件相比是否可行

想知道是否有一种方法可以直接从控制器点击Export to Excel功能,以便在Excel中将数据返回给用户

这里有一个来自Telerik的例子

查看网格小部件

<script src="//cdnjs.cloudflare.com/ajax/libs/jszip/2.4.0/jszip.min.js"></script>

@(Html.Kendo().Grid<Kendo.Mvc.Examples.Models.ProductViewModel>()    
.Name("grid")    
.HtmlAttributes( new { style = "width: 900px" } )
.Columns(columns => {
    columns.Bound(p => p.ProductName).Width(300).Locked()
           .ClientFooterTemplate("Total Count: #=count#")
           .ClientGroupFooterTemplate("Count: #=count#");
    columns.Bound(p => p.UnitPrice).Width(300);
    columns.Bound(p => p.UnitsOnOrder).Width(300)
           .ClientFooterTemplate("Average: #=average#")
           .ClientGroupFooterTemplate("Average: #=average#");
    columns.Bound(p => p.UnitsInStock).Width(300)
           .ClientFooterTemplate("Min: #= min # Max: #= max #")
           .ClientGroupHeaderTemplate("Units In Stock: #= value # (Count: #= count#)");
})
.ToolBar(tools => tools.Excel())
.Pageable()
.Sortable()
.Scrollable()
.Groupable()
.Excel(excel => excel
    .FileName("Kendo UI Grid Export.xlsx")
    .Filterable(true)
    .ProxyURL(Url.Action("Excel_Export_Save", "Grid"))
)
.Reorderable(r => r.Columns(true))
.Resizable(r => r.Columns(true))
.ColumnMenu()
.DataSource(dataSource => dataSource
    .Ajax()                 
    .PageSize(7)
    .Group(g => g.Add(p => p.UnitsInStock))
    .Aggregates(aggregates =>
    {
         aggregates.Add(p => p.UnitsInStock).Min().Max().Count();
            aggregates.Add(p => p.UnitsOnOrder).Average();
            aggregates.Add(p => p.ProductName).Count();
            aggregates.Add(p => p.UnitPrice).Sum();
    })
    .Read(read => read.Action("Excel_Export_Read", "Grid"))
)
)
服务

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;

namespace Kendo.Mvc.Examples.Models
{
public class ProductService : IDisposable
{
    private SampleEntities entities;

    public ProductService(SampleEntities entities)
    {
        this.entities = entities;
    }

    public IEnumerable<ProductViewModel> Read()
    {
        return entities.Products.Select(product => new ProductViewModel
        {
             ProductID = product.ProductID,
             ProductName = product.ProductName,
             UnitPrice = product.UnitPrice.HasValue ? product.UnitPrice.Value : default(decimal),
             UnitsInStock = product.UnitsInStock.HasValue ? product.UnitsInStock.Value : default(short),
             QuantityPerUnit = product.QuantityPerUnit,
             Discontinued = product.Discontinued,
             UnitsOnOrder = product.UnitsOnOrder.HasValue ? (int)product.UnitsOnOrder.Value : default(int),
             CategoryID = product.CategoryID,
             Category = new CategoryViewModel()
             {
                 CategoryID = product.Category.CategoryID,
                 CategoryName = product.Category.CategoryName
             },
             LastSupply = DateTime.Today
        });
    }

    public void Create(ProductViewModel product)
    {
        var entity = new Product();

        entity.ProductName = product.ProductName;
        entity.UnitPrice = product.UnitPrice;
        entity.UnitsInStock = (short)product.UnitsInStock;
        entity.Discontinued = product.Discontinued;
        entity.CategoryID = product.CategoryID;

        if (entity.CategoryID == null)
        {
            entity.CategoryID = 1;
        }

        if (product.Category != null)
        {
            entity.CategoryID = product.Category.CategoryID;
        }

        entities.Products.Add(entity);
        entities.SaveChanges();

        product.ProductID = entity.ProductID;
    }

    public void Update(ProductViewModel product)
    {
        var entity = new Product();

        entity.ProductID = product.ProductID;
        entity.ProductName = product.ProductName;
        entity.UnitPrice = product.UnitPrice;
        entity.UnitsInStock = (short)product.UnitsInStock;
        entity.Discontinued = product.Discontinued;
        entity.CategoryID = product.CategoryID;

        if (product.Category != null)
        {
            entity.CategoryID = product.Category.CategoryID;
        }

        entities.Products.Attach(entity);
        entities.Entry(entity).State = EntityState.Modified;
        entities.SaveChanges();
    }

    public void Destroy(ProductViewModel product)
    {
        var entity = new Product();

        entity.ProductID = product.ProductID;

        entities.Products.Attach(entity);

        entities.Products.Remove(entity);

        var orderDetails = entities.Order_Details.Where(pd => pd.ProductID == entity.ProductID);

        foreach (var orderDetail in orderDetails)
        {
            entities.Order_Details.Remove(orderDetail);
        }

        entities.SaveChanges();
    }

    public void Dispose()
    {
        entities.Dispose();
    }
}
}
使用系统;
使用System.Collections.Generic;
使用系统数据;
使用System.Linq;
使用System.Web;
命名空间Kendo.Mvc.Examples.Models
{
公共类ProductService:IDisposable
{
私人样本实体;
公共产品服务(样本实体)
{
这个。实体=实体;
}
公共IEnumerable Read()
{
返回entities.Products.Select(product=>newproductviewmodel
{
ProductID=product.ProductID,
ProductName=product.ProductName,
单价=product.UnitPrice.HasValue?product.UnitPrice.Value:默认值(十进制),
UnitsInStock=product.UnitsInStock.HasValue?product.UnitsInStock.Value:默认值(短),
QuantityPerUnit=product.QuantityPerUnit,
停产=产品。停产,
UnitsOnOrder=product.UnitsOnOrder.HasValue?(int)product.UnitsOnOrder.Value:默认值(int),
CategoryID=product.CategoryID,
类别=新类别视图模型()
{
CategoryID=product.Category.CategoryID,
CategoryName=product.Category.CategoryName
},
LastSupply=日期时间。今天
});
}
公共void创建(ProductViewModel产品)
{
var实体=新产品();
entity.ProductName=product.ProductName;
entity.UnitPrice=product.UnitPrice;
entity.UnitsInStock=(短)product.UnitsInStock;
实体。非连续性=产品。非连续性;
entity.CategoryID=product.CategoryID;
if(entity.CategoryID==null)
{
entity.CategoryID=1;
}
if(product.Category!=null)
{
entity.CategoryID=product.Category.CategoryID;
}
实体。产品。添加(实体);
entities.SaveChanges();
product.ProductID=entity.ProductID;
}
公共无效更新(ProductViewModel产品)
{
var实体=新产品();
entity.ProductID=product.ProductID;
entity.ProductName=product.ProductName;
entity.UnitPrice=product.UnitPrice;
entity.UnitsInStock=(短)product.UnitsInStock;
实体。非连续性=产品。非连续性;
entity.CategoryID=product.CategoryID;
if(product.Category!=null)
{
entity.CategoryID=product.Category.CategoryID;
}
实体。产品。附件(实体);
entities.Entry(entity).State=EntityState.Modified;
entities.SaveChanges();
}
公共无效销毁(ProductViewModel产品)
{
var实体=新产品();
entity.ProductID=product.ProductID;
实体。产品。附件(实体);
实体。产品。删除(实体);
var orderDetails=entities.Order\u Details.Where(pd=>pd.ProductID==entity.ProductID);
foreach(orderDetails中的变量orderDetail)
{
实体。订单详细信息。删除(订单详细信息);
}
entities.SaveChanges();
}
公共空间处置()
{
实体。Dispose();
}
}
}
链接:


顺便问一下,这种“分类”的架构是什么类型的?我喜欢它,并想读一读。

如何隐藏网格并添加您自己的按钮(或类似按钮)以触发导出

例如(使用引用的代码):

  • 添加一个按钮(或在图表中添加一些类似的钩子)


  • 示例中的体系结构是ASP.NET MVC

    另一种方法是使用jQuery在单击页面上的某些内容时启动查找,如带有
    id=“export”

    $(“#导出”)。单击(函数(e){
    $.ajax({
    键入:“POST”,
    contentType:'application/json;charset=utf-8',
    url:“网格/Excel\u导出\u保存”,
    async:false,
    成功:exportCSV,
    });
    });
    
    您可以编写自己的导出函数。我们这里有一种导出到CSV的方法,如下所示:

    函数exportCSV(json){
    var csv='产品ID、名称、单价、库存数量、已停产、类别ID\n';
    var下载='products.csv';
    $.each(json.Data,函数(索引,行数组){
    var行=[];
    row.push(rowArray.ProductID);
    row.push(rowArray.ProductName);
    row.push(rowArray.UnitPrice);
    row.push(rowArray.UnitsInStock);
    row.push(rowArray.Discontracted);
    row.push(rowArray.CategoryID);
    csv+=row.join(',')+'\r\n';
    });
    var hiddenElement=document.createElement('a');
    hiddenElement.href='数据:文本/csv;字符集=utf-8',+编码URI(csv);
    hiddenElement.target='_blank';
    hiddenElement.download=下载;
    hiddenElement.click();
    };
    
    要调用该函数,您需要在控制器中创建一个函数,以允许Json请求:

    public异步任务GetGapReport([DataSourceRequest]
    
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Web;
    
    namespace Kendo.Mvc.Examples.Models
    {
    public class ProductService : IDisposable
    {
        private SampleEntities entities;
    
        public ProductService(SampleEntities entities)
        {
            this.entities = entities;
        }
    
        public IEnumerable<ProductViewModel> Read()
        {
            return entities.Products.Select(product => new ProductViewModel
            {
                 ProductID = product.ProductID,
                 ProductName = product.ProductName,
                 UnitPrice = product.UnitPrice.HasValue ? product.UnitPrice.Value : default(decimal),
                 UnitsInStock = product.UnitsInStock.HasValue ? product.UnitsInStock.Value : default(short),
                 QuantityPerUnit = product.QuantityPerUnit,
                 Discontinued = product.Discontinued,
                 UnitsOnOrder = product.UnitsOnOrder.HasValue ? (int)product.UnitsOnOrder.Value : default(int),
                 CategoryID = product.CategoryID,
                 Category = new CategoryViewModel()
                 {
                     CategoryID = product.Category.CategoryID,
                     CategoryName = product.Category.CategoryName
                 },
                 LastSupply = DateTime.Today
            });
        }
    
        public void Create(ProductViewModel product)
        {
            var entity = new Product();
    
            entity.ProductName = product.ProductName;
            entity.UnitPrice = product.UnitPrice;
            entity.UnitsInStock = (short)product.UnitsInStock;
            entity.Discontinued = product.Discontinued;
            entity.CategoryID = product.CategoryID;
    
            if (entity.CategoryID == null)
            {
                entity.CategoryID = 1;
            }
    
            if (product.Category != null)
            {
                entity.CategoryID = product.Category.CategoryID;
            }
    
            entities.Products.Add(entity);
            entities.SaveChanges();
    
            product.ProductID = entity.ProductID;
        }
    
        public void Update(ProductViewModel product)
        {
            var entity = new Product();
    
            entity.ProductID = product.ProductID;
            entity.ProductName = product.ProductName;
            entity.UnitPrice = product.UnitPrice;
            entity.UnitsInStock = (short)product.UnitsInStock;
            entity.Discontinued = product.Discontinued;
            entity.CategoryID = product.CategoryID;
    
            if (product.Category != null)
            {
                entity.CategoryID = product.Category.CategoryID;
            }
    
            entities.Products.Attach(entity);
            entities.Entry(entity).State = EntityState.Modified;
            entities.SaveChanges();
        }
    
        public void Destroy(ProductViewModel product)
        {
            var entity = new Product();
    
            entity.ProductID = product.ProductID;
    
            entities.Products.Attach(entity);
    
            entities.Products.Remove(entity);
    
            var orderDetails = entities.Order_Details.Where(pd => pd.ProductID == entity.ProductID);
    
            foreach (var orderDetail in orderDetails)
            {
                entities.Order_Details.Remove(orderDetail);
            }
    
            entities.SaveChanges();
        }
    
        public void Dispose()
        {
            entities.Dispose();
        }
    }
    }
    
      <button id="myexport">Export to Excel</button>
    
    $(document).ready(function () {
        $("#grid").hide();
    
        $("#myexport").click(function () {
            var grid = $("#grid").data("kendoGrid");
            grid.saveAsExcel();
        });
    });