3

私は 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

4 に答える 4

2

同様の問題があったため、組み込みの MVC WebGrid の拡張機能を作成しました。コードと使用例はhttps://gist.github.com/3211605にあります。うまくいけば、それは役に立ちます。

于 2012-07-31T00:41:40.873 に答える
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. WebGrid.GetHtml() の htmlAttributes パラメータを使用して、テーブルの HTML ID 属性を設定します。
  2. フッターのコンテンツをページの要素に配置します
  3. JQuery の .appendTo() メソッドを使用して、コンテンツ要素をフッターの TD 要素の最後に追加します。

より堅牢なソリューションでは、これらの要素が存在することを確認する必要がありますが、アイデアはわかります。

モデルにすでに合計 (または合計を取得するメソッド) が含まれていると仮定すると、次のようにフッターを作成するだけです。

<span id="footerContent">@Model.Total</span>
于 2013-06-03T22:16:08.947 に答える
0

これはひどいハックですが、私は一日をやり遂げることができました. これを正しく行う方法は、フッター行を渡すことができる Html ヘルパーを作成することだと思います。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 を乗っ取り、行を追加することです。手書きのコードで申し訳ありません。私はプロプライエタリなアプリを使用していて、そこから何かを貼り付ける勇気はありません...

于 2011-06-20T20:11:35.753 に答える
0

バインドする WebGrid のソースとして使用する IEnumerable に新しい項目を追加します。

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

var grid = new WebGrid(lineItems);

この合計行にフォーマットを適用する良い方法をまだ見つけていません。これは、クライアント側で行う必要がある場合があります。

于 2011-07-21T04:49:02.247 に答える