Features

カスタムセル

カスタムセル

機能

説明

このサンプルは、MultiRowコントロールのカスタムセル機能を使用する方法を示します。

このサンプルでは、TemplateIdプロパティを使用して「Trends」列のテンプレートのIDを指定しています。

また、このサンプルでは、ItemFormatterプロパティを使用して「Rank」列の表示をカスタマイズしています。
ItemFormatterイベントハンドラで、MultiRowのgetBindingColumn関数を使用して連結列を取得します。

using System.Web.Mvc;
using MultiRowExplorer.Models;

namespace MultiRowExplorer.Controllers
{
    public partial class MultiRowController : Controller
    {
        public ActionResult CustomCells()
        {
            return View(Sale.GetData(500));
        }
    }
}
@model IEnumerable<Sale>

@section Scripts{
    <script type="text/javascript">
        function rankFormatter(panel, r, c, cell) {
            // gets the binding column
            var bcol = panel.grid.getBindingColumn(panel, r, c);
            if (bcol.binding === "Rank") {
                cell.style.textAlign = "";
                if (panel.cellType === wijmo.grid.CellType.Cell) {
                    cell.innerHTML = buildRank(panel.getCellData(r, c));
                }
            }
        }

        function buildRank(rank) {
            var markup = "", j, starType;
            for (j = 0; j < 5; j++) {
                starType = j < rank ? "star star-highlighted" : "star star-dimmed";
                markup += "<span class='" + starType + "'>\u2605</span>";
            }
            return markup;
        }
    </script>
}

@section Styles{
    <style>
        .star-highlighted {
            color: orange;
        }

        .star-dimmed {
            color: lightgray;
        }

        .trends {
            padding: 0px;
            vertical-align: middle;
            margin-top: 2px;
        }
    </style>
}

<script id="templateTrends" type="text/template">
    @(Html.C1().FlexChart()
        .Width(100).Height(40).CssClass("trends")
        .TemplateBind("ItemsSource", "Trends")
        .BindingX("Month")
        .Series(s => s.Add().Binding("Data"))
        .AxisX(C1.Web.Mvc.Chart.Position.None)
        .AxisY(C1.Web.Mvc.Chart.Position.None)
        .ToTemplate()
    )
</script>

@(Html.C1().MultiRow<Sale>()
    .Id("customCellMultiRow")
    .IsReadOnly(true)
    .Bind(Model)
    .CssClass("multirow")
    .LayoutDefinition(ld =>
    {
        ld.Add().Cells(cells =>
        {
            cells.Add(cell => cell.Binding("ID").Header("ID").Width("100"));
            cells.Add(cell => cell.Binding("Active").Header("Active"));
        });
        ld.Add().Colspan(2).Cells(cells =>
        {
            cells.Add(cell => cell.Binding("Country").Header("Country").Colspan(2));
            cells.Add(cell => cell.Binding("Product").Header("Product").Width("100"));
            cells.Add(cell => cell.Binding("Color").Header("Color").Width("100"));
        });
        ld.Add().Colspan(2).Cells(cells =>
        {
            cells.Add(cell => cell.Binding("Amount").Header("Amount").Width("100"));
            cells.Add(cell => cell.Binding("Amount2").Header("Amount2").Width("100"));
            cells.Add(cell => cell.Binding("Discount").Header("Discount").Colspan(2));
        });
        ld.Add().Header("Rank").Cells(cells =>
        {
            cells.Add(cell => cell.Binding("Trends").Header("Trends").AllowSorting(false).CellTemplate(t => t.TemplateId("templateTrends")));
        });
        ld.Add().Cells(cells =>
        {
            cells.Add(cell => cell.Binding("Rank").Header("Rank"));
        });
    })
    .ItemFormatter("rankFormatter")
)

@section Description{
<p>@Html.Raw(Resources.MultiRowExplorer.CustomCells_Text0)</p>

<p>@Html.Raw(Resources.MultiRowExplorer.CustomCells_Text1)</p>

<p>@Html.Raw(Resources.MultiRowExplorer.CustomCells_Text2)</p>

}