2011-04-25 41 views
3

我正在使用MVC 3 webgrid,我需要向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>) 
    ) 
) 

}

回答

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並添加一行。 對不起,手輸入的代碼。我在一個專有的應用程序,我不敢從它粘貼任何東西...

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); 

我還沒有找到一個很好的方式來將格式應用到這個總行。這可能必須在客戶端完成。

1

如果你沒事用jQuery和具有頁腳內容沒有被列排列,添加頁腳到的WebGrid是有點哈克,但並不難:

@{ 
    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. 設置你的表的HTML ID屬性,使用WebGrid.GetHtml的htmlAttributes參數()
  2. 把頁腳的內容中的一個元素的網頁
  3. U ON se jQuery的.appendTo()方法將內容元素添加到頁腳TD元素的末尾

更健壯的解決方案應該確保這些元素存在,但您明白了。

假設模型中已經包含的總和(或獲得的總和的方法),只是建立你的頁腳,如:

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