在webgrid中添加行

时间:2011-04-25 08:18:26

标签: webgrid

我正在使用MVC 3 webgrid,我需要在webgrid中添加一个新行,以显示产品表中的价格总和。
任何想法都表示赞赏 这是我的代码

@{
WebGrid grid = new WebGrid(source: Model,
                           rowsPerPage: 3,
                           canSort: true,
                           canPage: true,
                           ajaxUpdateContainerId: "ajaxgrid");  


@grid.GetHtml(
    alternatingRowStyle: "altrow",
    mode: WebGridPagerModes.All,
    firstText: "<< ",
    previousText: "< ",
    nextText: " >",
    lastText: " >>",
    columns: grid.Columns(
            grid.Column(format: (item) => new HtmlString(Html.ActionLink("Edit", "Edit", new { id = item.ProductId }).ToString() + " | " +
                                                        Html.ActionLink("Delete", "Delete", new { id = item.ProductId }).ToString()
                                                        )
                        ),
            grid.Column("ProductId", "Product Id"),
            grid.Column("CategoryId", "Category Name", format: (item) => item.Category.CategoryName),
            grid.Column("ProductName", "Product Name"),
            grid.Column("Price", "Price", format: @<text>@String.Format("{0:c}", item.Price)</text>)
    )
)

}

4 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,因此我创建了内置MVC WebGrid的扩展。代码和示例用法位于https://gist.github.com/3211605。希望它有用。

答案 1 :(得分:1)

如果你可以使用JQuery并且页脚内容不是列对齐的,那么在WebGrid中添加页脚有点hacky,但并不困难:

@{
  var grid = new WebGrid(...);
}
@grid.GetHtml(
  ...,
  htmlAttributes: new { id = "myTable" }
)

<span id="footerContent">This will be in footer</span>

<script>
  $().ready(function () {
    $('#footerContent').appendTo('#myTable tfoot tr td:last');
  }
</script>

基础知识是:

  1. 使用WebGrid.GetHtml()的htmlAttributes参数设置表的HTML ID属性
  2. 将页脚内容放在页面上的元素中
  3. 使用JQuery的.appendTo()方法将内容元素添加到页脚TD元素的末尾
  4. 更强大的解决方案应该确保这些元素存在,但你明白了。

    假设您的模型已包含总和(或获取总和的方法),只需构建您的页脚:

    <span id="footerContent">@Model.Total</span>
    

答案 2 :(得分:0)

这是一个可怕的黑客,但它让我继续我的一天。我认为正确执行此操作的方法是编写一个允许您传入页脚行的Html Helper。我有点失望,WebGrid内置了一个页脚行。

 gridHtml = MvcHtmlString.Create(gridHtml.ToString().Replace("</table>", sbTotalsTable.ToString()));

    gridHtml is from   var gridHtml = @grid.GetHtml....blah..


    the sbTotalsTable is    var sbTotalsTable = new StringBuilder();

    sbTotalsTable.Append("<tr>");

    sbTotalsTable.Append("<td>");

    sbTotalsTable.Append(DataSource.Select(s=>s.PropToSum).Sum().ToString();//The total of that column
    sb.TotalsTable.Append("</td>");
    sb.TotalsTable.Append("</tr>");
    sb.TotalsTable.Append("</table>");//closing the table without opening it because the rest comes from the gridHtml.

仅确保匹配手工构建的表格行中的列数。请注意,没有表开始标记..整个想法是在表关闭时劫持创建的html并添加一行。 对不起手动键入的代码。我是一个专有的应用程序,我不敢粘贴它...

答案 3 :(得分:0)

向IEnumerable添加一个新项目,用作要绑定的WebGrid的源。

var lineItems = Model.LineItems;
var totalRow = new SalesLineItem
                {
                    SaleType = "Total Sales",
                    Amount = Model.TotalSales
                };
lineItems.Add(totalRow);

var grid = new WebGrid(lineItems);

我还没有找到一种很好的方法来将格式应用于此总行。这可能必须在客户端完成。