OLAPでは、C1JSONRequestを使用してデータを直接取得できます。これは、サーバー、テーブル、および列を含むリモートデータのURLを指定します。返される配列は、CollectionViewオブジェクトのデータソースとして使用されます。
CollectionViewHelper
は、コレクションに編集、フィルタ処理、グループ化、ソートなどのサービスを提供する静的クラスです。PivotEngineのBind
プロパティは、特定の操作を実行するためのアクションURLメソッドを渡すことで、コレクションに連結するために使用されます。このクラスには次のメソッドも含まれます。
Read()
:コレクションからデータを取得します。Edit()
:OLAPでExcel形式の編集を可能にします。BatchEdit()
:一度に複数の項目を編集できます。このトピックは3つの手順で構成されます。
OLAPコントロールのデータソースを作成するために、[モデル]フォルダに新しいクラスを作成します。
ProductData.cs
)。新しいモデルの追加方法については、「コントロールの追加」を参照してください。using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OlapQuickStart.Models { public class ProductData { private static Random r = new Random(); public int ID { get; set; } public string Product { get; set; } public string Country { get; set; } public DateTime Date { get; set; } public int Sales { get; set; } public int Downloads { get; set; } public bool Active { get; set; } public double Discount { get; set; } private static int randomInt(int max) { return (int)Math.Floor(r.NextDouble() * (max + 1)); } public static DataTable GetDataTable(int cnt, string tableName) { var sufix = cnt / 10000; string[] countries = "中国,インド,ロシア,米国,ドイツ,英国,日本,イタリア,ギリシャ,スペイン,ポルトガル" .Split(','); string[] products = "Wijmo,Aoba,Xuni,Olap".Split(','); DataTable data = new DataTable(tableName); data.Columns.Add("ID", typeof(int)); data.Columns.Add("Product", typeof(string)); data.Columns.Add("Country", typeof(string)); data.Columns.Add("Date", typeof(DateTime)); data.Columns.Add("Sales", typeof(int)); data.Columns.Add("Downloads", typeof(int)); data.Columns.Add("Active", typeof(bool)); data.Columns.Add("Discount", typeof(double)); for (var i = 0; i < cnt; i++) { object[] values = new object[] { i, products[randomInt(products.Length - 1)], countries[randomInt(countries.Length - 1)], new DateTime(2015, randomInt(11) + 1, randomInt(27) + 1), randomInt(10000), randomInt(10000), randomInt(1) == 1 ? true : false, r.NextDouble() }; data.Rows.Add(values); } return data; } public static IEnumerable<ProductData> GetData(int cnt) { string[] countries = "中国,インド,ロシア,米国,ドイツ,英国,日本,イタリア,ギリシャ,スペイン,ポルトガル" .Split(','); string[] products = "Wijmo,Aoba,Xuni,Olap".Split(','); List<ProductData> result = new List<ProductData>(); for (var i = 0; i < cnt; i++) { result.Add(new ProductData { ID = i, Product = products[randomInt(products.Length - 1)], Country = countries[randomInt(countries.Length - 1)], Date = new DateTime(2015, randomInt(5) + 1, randomInt(27) + 1), Sales = randomInt(10000), Downloads = randomInt(10000), Active = randomInt(1) == 1 ? true : false, Discount = r.NextDouble() }); } return result; } } }
OLAPコントロールのコントローラーとビューを作成し、次の手順を実行して、OLAPコントロールを初期化します。
OLAPコントロールを初期化するには、次の手順を実行します。
新しいコントローラーの追加
Controller
)。partial class RemoteBindController : Controller { private static IEnumerable<ProductData> RemoteData = ProductData.GetData(100000).ToList(); // GET: PivotGrid public ActionResult RemoteBind() { return View(); } public ActionResult RemoteBind_Read([C1JsonRequest] CollectionViewRequest<ProductData> requestData) { return this.C1Json(CollectionViewHelper.Read(requestData, RemoteData)); } }
OLAPController
をダブルクリックして開きます。Index()
内にカーソルを置きます。@using RemoteDataOlap.Models; @model IEnumerable<ProductData> @(Html.C1().PivotEngine().Id("remoteEngine").Bind(Url.Action("RemoteBind_Read")) .RowFields(pfcb => pfcb.Items("Country")) .ColumnFields(cfcb => cfcb.Items("Product")) .ValueFields(vfcb => vfcb.Items("Sales"))) @Html.C1().PivotPanel().ItemsSourceId("remoteEngine") @Html.C1().PivotGrid().ItemsSourceId("remoteEngine")
次の図は、上記の手順を実行した後にブラウザに表示されるOLAPコントロールを示しています。