Features

フィルタリング

フィルタリング

このサンプルは、MultiRowコントロールでフィルタ処理を使用する方法を示します。

機能

設定

using C1.Web.Mvc;
using MultiRowExplorer.Models;
using System;
using System.Collections.Generic;
using System.Web.Mvc;
using System.Linq;

namespace MultiRowExplorer.Controllers
{
    public partial class MultiRowController : Controller
    {
        private static OptionItem CreateOptionItem()
        {
            return new OptionItem { Values = new List<string> { "None", "Condition", "Value", "Both" }, CurrentValue = "Both" };
        }

        private readonly ControlOptions _filterOptions = new ControlOptions
        {
            Options = new OptionDictionary
            {
                {"CustomerState", CreateOptionItem()},
                {"CustomerCity", CreateOptionItem()},
                {"ShipperName", CreateOptionItem()},
                {"ShipperExpress", CreateOptionItem()},
                {"Amount", CreateOptionItem()}
            }
        };

        public ActionResult Filter(FormCollection data)
        {
            _filterOptions.LoadPostData(data);
            ViewBag.DemoOptions = _filterOptions;
            ViewBag.FilterTypes = GetFilterTypes(_filterOptions);
            return View(Orders.GetOrders());
        }

        private Dictionary<string, FilterType> GetFilterTypes(ControlOptions controlOptions)
        {
            var filterTypes = new Dictionary<string, FilterType>();
            foreach (var item in controlOptions.Options)
            {
                filterTypes.Add(item.Key, (FilterType)Enum.Parse(typeof(FilterType), item.Value.CurrentValue));
            }
            return filterTypes;
        }
    }
}
@model IEnumerable<Orders.Order>
@{
    ControlOptions optionsModel = ViewBag.DemoOptions;
    Dictionary<string, FilterType> filterTypes = ViewBag.FilterTypes;
    ViewBag.DemoSettings = true;
    ViewBag.DemoDescription = false;
}

@(Html.C1().MultiRow<Orders.Order>()
        .Id("filteringMultiRow")
        .Bind(Model)
        .PageSize(25)
        .IsReadOnly(true)
        .LayoutDefinition(LayoutDefinitionsBuilders.ThreeLines)
        .SelectionMode(SelectionMode.Row)
        .AllowSorting(true)
        .Filterable(f => f.DefaultFilterType(FilterType.Both)
            .ColumnFilters(cfsb =>
            {
                foreach (var item in filterTypes)
                {
                    cfsb.Add(cfb => cfb.Column(item.Key).FilterType(item.Value));
                }
            })
        )
        .CssClass("multirow")
)

@(Html.C1().Pager().Owner("filteringMultiRow"))

@section Settings{
    @Html.Partial("_OptionsMenu", optionsModel)
}

@section Summary{
    @Html.Raw(Resources.MultiRowExplorer.Filter_Text0)
}