将过滤的webgrid导出到Excel – Webmatrix
我试图导出一个过滤的webgrid excel,但是当文件下载它给了我所有的数据库logging,然后改变我的代码。
这段代码是我创buildfilter的页面:
var db = Database.Open("formIGF"); var query = "SELECT * FROM exportTable WHERE dataEncomenda LIKE @0 "; var dataPedido = "%" + Request["dataPedido"] + "%"; var data = db.Query(query, dataPedido); var columns = new[]{"dataEncomenda"}; var grid = new WebGrid(data, columnNames: columns, rowsPerPage:10); <form method="post"> <div class="grid"> <div id="grid"> <label for="dataRecolha">Data do Pedido</label><input id="dataPedido" name="dataPedido" type="text" value="" placeholder="Selecionar um dia"/> <input type="submit" /> @grid.GetHtml( caption: "Numero Total de Entradas: " + @grid.TotalRowCount + " ", tableStyle : "table", alternatingRowStyle : "alternate", headerStyle : "header", columns: grid.Columns( grid.Column("ID"), grid.Column("dataEncomenda", "Data da Encomenda") ) ) <a href="GenerateExcel.cshtml?cond=@Request["dataPedido"]" target="_blank">Exportar para Excel</a> </div> </div> </form>
这是将出口到Excel的页面的代码:
@{ Layout = null; var db = Database.Open("formIGF"); var dataPedido = Request.QueryString["dataPedido"]; var data = db.Query(dataPedido); var columns = data.First().Columns; Response.AddHeader("Content-disposition", "attachment; filename=report.xls"); Response.ContentType = "application/octet-stream"; } <table style="border: 1px solid #a59f9f;"> <tr style="font-weight: bold"> @foreach(var column in columns){ <td style="border: 1px solid #a59f9f;">@column</td> } </tr> @foreach(var row in data){ <tr> @foreach(var column in columns){ <td style="border: 1px solid #a59f9f;">@row[column]</td> } </tr> } </table>
然后我得到一个错误:值不能为空或一个空string。 参数名称:commandText
那意味着没有价值被传递正确?
在我的url我得到这个:
http://localhost:44552/GenerateExcel.cshtml?cond=04-06-2014
该值不应该传递给我的查询string?
您正在引用不存在的查询string值。 你已经命名为cond
,但正在使用Request.QueryString["dataPedido"]
来获取值。 应该是
var dataPedido = Request.QueryString["cond"];
不仅如此,而且您还将该值作为SQL命令传递给Database.Query
方法。 这不是一个有效的sql命令。 您在更改中错过了这一点:
var query = "SELECT * FROM exportTable WHERE dataEncomenda LIKE @0 "; var dataPedido = "%" + Request.QueryString["cond"] + "%"; var data = db.Query(query, dataPedido);