【问题标题】:Export Filtered webgrid to Excel - Webmatrix将过滤的 webgrid 导出到 Excel - Webmatrix
【发布时间】:2014-06-05 22:22:34
【问题描述】:

我正在尝试将过滤后的 webgrid 导出到 excel,但是当下载文件时,它给了我数据库中的所有记录,然后将我的代码更改为这个。

这段代码是我创建过滤器的页面:

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>

然后我得到一个错误: 值不能为 null 或空字符串。参数名称:commandText

这意味着没有正确传递任何值?

在我的网址上我得到了这个:

http://localhost:44552/GenerateExcel.cshtml?cond=04-06-2014

该值不应传递给我的查询字符串?

【问题讨论】:

    标签: excel razor webmatrix


    【解决方案1】:

    您正在引用一个不存在的查询字符串值。您已将其命名为 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);
    

    【讨论】:

    • 好的,所以我改变了它并给了我另一个错误:'04'附近的语法不正确。它与我试图传递的价值有关。值为 04-06-2014
    • 再次感谢迈克。效果很好。
    • Mike 很抱歉再次打扰您,但我遇到了一些问题。我在想如果用户想要某个日期范围内的记录怎么办。我已经在我的 webgrid 页面上尝试过这个。 var dataPedido = "%" + Request["dataPedido"] + "%"; var dataFim = "%" + 请求["dataFim"] + "%"; var query = "SELECT * FROM exportTable WHERE dataEncomenda BETWEEN '" + dataPedido + "' AND '" + dataFim + "'";收集数据,但我的 webgrid 显示为空。你能给我一些灯吗?对不起
    • dataEncomenda在数据库中是什么数据类型?
    • 不适合约会,但您可以使用 &lt;&gt; 例如"SELECT * From ExportTable WHERE dataEncomenda &gt;= @0 AND dataPedido &lt;= @1"。然后var data = db.Query(query, dataPedido, dataFim);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多