افزودن فوتر به WebGrid در Razor

برای این کار سه روش وجود دارد:

روش اول- کد سمت سرور:

در روش اول با استفاده از تابع Table برای اضافه کردن فوتر استفاده می کنیم. تعریف MSDN از این تابع به شکل زیر است:

public IHtmlString Table(
	string tableStyle,
	string headerStyle,
	string footerStyle,
	string rowStyle,
	string alternatingRowStyle,
	string selectedRowStyle,
	string caption,
	bool displayHeader,
	bool fillEmptyRows,
	string emptyRowCellValue,
	IEnumerable<WebGridColumn> columns,
	IEnumerable<string> exclusions,
	Func<Object, Object> footer,
	Object htmlAttributes
)

کد زیر برای مشاهده اطلاعات از پایگاه داده Northwind است:

@{
    Layout = "~/_Layout.cshtml";
    Page.Title = "WebGrid.Table method";

    var db = Database.Open("Northwind");
    var sql = "SELECT OrderId FROM Orders";
    var orders = db.Query(sql).Select(o => new SelectListItem {
        Value = o.OrderId.ToString(), 
        Text = o.OrderID.ToString(),
        Selected = o.OrderID.ToString() == Request["OrderID"]
    });

    WebGrid grid = null;
    var orderTotal = 0f;

    if(IsPost){
        sql = @"SELECT p.ProductName, o.UnitPrice, o.Quantity, 
                (o.UnitPrice * o.Quantity) - (o.UnitPrice * o.Quantity * o.Discount) As TotalCost 
                FROM OrderDetails o INNER JOIN Products p ON o.ProductID = p.ProductID 
                WHERE o.OrderID = @0";

        var orderDetails = db.Query(sql, Request["OrderID"]);
        orderTotal = orderDetails.Sum(o => (float)o.TotalCost);

        grid = new WebGrid(orderDetails, canPage: false, canSort: false);
    }
}

در این روش از Table استفاده می کنیم:

<h1>@Page.Title</h1>
<form method="post">
    @Html.DropDownList("OrderID", orders)
    <input type="submit" />
</form>

@if(grid != null){
    @grid.Table(
            columns: grid.Columns(
                grid.Column("ProductName", "Product", style: "_220"),
                grid.Column("UnitPrice", "Price", style: "_60", format: @<text>@item.UnitPrice.ToString("c")</text>),
                grid.Column("Quantity", style: "_90"),
                grid.Column("TotalCost", "Total Cost", style: "_90", format: @<text>@item.TotalCost.ToString("c")</text>)
            ), 
            footer: @<table class="footer">
                         <tr>
                             <td class="_220">Total</td>
                             <td colspan="2" class="_150">&nbsp;</td>
                             <td class="_90">@orderTotal.ToString("c")</td>
                         </tr>
                    </table>);
}

 

روش دوم- کد سمت کاربر:

در این روش با استفاده از JQuery این کار را انجام می دهیم:

<h1>@Page.Title</h1>
<form method="post">
    @Html.DropDownList("OrderID", orders)
    <input type="submit" />
</form>

<div>
@if(grid != null){
    @grid.GetHtml(
        columns: grid.Columns(
            grid.Column("ProductName", "Product", style: "_220"),
            grid.Column("UnitPrice", "Price", style: "_60", format: @<text>@item.UnitPrice.ToString("c")</text>),
            grid.Column("Quantity", style: "_90"),
            grid.Column("TotalCost", "Total Cost", style: "_90", format: @<text>@item.TotalCost.ToString("c")</text>)
         )
     )
}
</div>

<script>
    $(function () {
        var tfoot = '<tfoot><tr><td class="_220">Total</td><td colspan="2" class="_150">&nbsp;</td>';
        tfoot += '<td class="_90">@orderTotal.ToString("c")</td></tr></tfoot>';
        $('table').append(tfoot);
    })

</script>

 

روش سوم: دستکاری کد سمت سرور:
@using System.Text;
@{
    Layout = "~/_Layout.cshtml";
    Page.Title = "Hack method";

    var db = Database.Open("Northwind");
    var sql = "SELECT OrderId FROM Orders";
    var orders = db.Query(sql).Select(o => new SelectListItem {
        Value = o.OrderId.ToString(), 
        Text = o.OrderID.ToString(),
        Selected = o.OrderID.ToString() == Request["OrderID"]
    });

    WebGrid grid = null;
    var orderTotal = 0f;

    var tableHtml = string.Empty;

    if(IsPost){
        sql = @"SELECT p.ProductName, o.UnitPrice, o.Quantity, 
                (o.UnitPrice * o.Quantity) - (o.UnitPrice * o.Quantity * o.Discount) As TotalCost 
                FROM OrderDetails o INNER JOIN Products p ON o.ProductID = p.ProductID 
                WHERE o.OrderID = @0";

        var orderDetails = db.Query(sql, Request["OrderID"]);
        orderTotal = orderDetails.Sum(o => (float)o.TotalCost);

        grid = new WebGrid(orderDetails, canPage: false, canSort: false);

        var sb = new StringBuilder();

        sb.Append(grid.GetHtml(
            columns: grid.Columns(
                grid.Column("ProductName", "Product", style: "_220"),
                grid.Column("UnitPrice", "Price", style: "_60", format: @<text>@item.UnitPrice.ToString("c")</text>),
                grid.Column("Quantity", style: "_90"),
                grid.Column("TotalCost", "Total Cost", style: "_90", format: @<text>@item.TotalCost.ToString("c")</text>)
            )
        ).ToString().Replace("</table>", string.Empty));
        sb.Append("<tfoot><tr><td class=\"_220\">Total</td>");
        sb.Append("<td colspan=\"2\" class=\"_150\">&nbsp;</td>");
        sb.Append("<td class=\"_90\">");
        sb.Append(orderTotal.ToString("c"));
        sb.Append("</td></tr></tfoot></table>");
        tableHtml = sb.ToString();
    }
}
@if(!tableHtml.IsEmpty()){
    @Html.Raw(tableHtml)
}

برای دانلود کد مرتبط به این پست روی لینک دانلود کلیک کنید.

لینک دانلود
+1
0


هرگونه انتشار مطالب اختصاصي و محصولات اين سايت بجز با درج لينک مستقيم شرعا حرام بوده و پيگرد قانوني دارد.
طبق ماده 12 فصل سوم قانون جرائم رايانه هرگونه کپي برداري ممنوع بوده و پيگرد قانوني دارد. براي اطلاعات بيشتر کليک کنيد.

درباره‌ی مدیر سایت

در اردیبهشت سالی از سال های خدا بدنیا آمدم.درس خواندم و مهندس شدم.ازآنجایی که علاقه شدیدی به برنامه نویسی و ترجمه وآموزش داشتم در راستای اهدافم این وبسایت رو راه اندازی کردم تا دین خود را به جامعه برنامه نویسی ادا کرده باشم.

دیدگاه خود را بنویسید

آدرس پست الکترونیک شما منتشر نخواهد شد.خانه های ضروری نشانه گذاری شده اند. *

*


هفت × 8 =

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>