CollectionViewは、CollectionViewServiceを使用して、MVCアプリケーションで連結している複数のコントロールをサポートします。FlexGridやFlexChartなどのさまざまなデータ連結コントロールを使用でき、CollectionViewを使用して連結できます。
最初に、CollectionViewを作成し、そのIdを設定します。FlexGridやFlexChartなどのデータ連結コントロールを初期化し、そのItemsSourceIdにCollectionViewのIdを割り当てることで、共通のCollectionViewを使用してコントロールを連結します。
CollectionViewは複数の項目連結コントロールに対して使用できます。それらのコントロールは同じitemsSourceを持ち、1つのコントロールのデータを変更すると他のコントロールも即座に変更されます。つまり、1つのCollectionViewを作成すれば、それを異なる複数のコントロールに使用できるということです。
このセクションでは、MVC WebformでCollectionViewServiceをFlexGridおよびFlexChartコントロールと一緒に使用する方法を説明します。
次の図は、CollectionViewを介して連結された後のFlexGridとFlexChartがCollectionViewServiceを使用してどのように表示されるかを示しています。
この例ではC1NWindデータソースを使用しますが、これは「クイックスタート」で示されているようにアプリケーション内で設定されたものです。


| Fruit.cs |
コードのコピー
|
|---|---|
public class Fruit { public int ID { get; set; } public string Name { get; set; } public int MarPrice { get; set; } public int AprPrice { get; set; } public int MayPrice { get; set; } public string Country { get; set; } private static List<string> COUNTRIES = new List<string> { "US", "UK", "Canada", "Japan", "China", "France", "German", "Italy", "Korea", "Australia" }; public static IEnumerable<Fruit> GetFruitsSales() { var rand = new Random(0); var fruits = new[] { "みかん", "りんご", "梨", "バナナ一", "パイナップル", "モモ", "イチゴ", "チェリー", "ブドウ", "マンゴー", "レモン"}; var list = fruits.Select((f, i) => { int id = i + 1; int mar = rand.Next(1, 6); int apr = rand.Next(1, 9); int may = rand.Next(1, 6); var country = COUNTRIES[rand.Next(0, COUNTRIES.Count - 1)]; return new Fruit { ID = id, Country = country, Name = f, MarPrice = mar, AprPrice = apr, MayPrice = may }; }); return list; } } |
|
次のコード例は、CollectionViewServiceを使用して、チャートコントロールとグリッドコントロールで複数のコントロールを連結できるようにする方法を示します。
MultipleControlsBindController.cs
| C# |
コードのコピー
|
|---|---|
public static List<Fruit> fruitsSales = Fruit.GetFruitsSales().ToList();
public ActionResult Index()
{
return View(fruitsSales);
}
public ActionResult Update([C1JsonRequest]CollectionViewEditRequest<Fruit> requestData)
{
return this.C1Json(CollectionViewHelper.Edit<Fruit>(requestData, fruit =>
{
string error = string.Empty;
bool success = true;
var fSale = fruitsSales.Find(item => item.ID == fruit.ID);
fSale.Name = fruit.Name;
fSale.Country = fruit.Country;
fSale.MayPrice = fruit.MayPrice;
fSale.MarPrice = fruit.MarPrice;
fSale.AprPrice = fruit.AprPrice;
return new CollectionViewItemResult<Fruit>
{
Error = error,
Success = success && ModelState.IsValid,
Data = fSale
};
}, () => fruitsSales));
}
public ActionResult Create([C1JsonRequest]CollectionViewEditRequest<Fruit> requestData)
{
return this.C1Json(CollectionViewHelper.Edit<Fruit>(requestData, fruit =>
{
string error = string.Empty;
bool success = true;
fruit.ID = getId();
fruitsSales.Add(fruit);
return new CollectionViewItemResult<Fruit>
{
Error = error,
Success = success && ModelState.IsValid,
Data = fruit
};
}, () => fruitsSales));
}
public ActionResult Delete([C1JsonRequest]CollectionViewEditRequest<Fruit> requestData)
{
return this.C1Json(CollectionViewHelper.Edit<Fruit>(requestData, fruit =>
{
string error = string.Empty;
bool success = true;
var fSale = fruitsSales.Find(item => item.Name == fruit.Name);
fruitsSales.Remove(fSale);
return new CollectionViewItemResult<Fruit>
{
Error = error,
Success = success && ModelState.IsValid,
Data = fruit
};
}, () => fruitsSales));
}
private int getId()
{
int id = 1;
while (fruitsSales.Find(item => item.ID == id) != null)
{
id++;
}
return id;
}
}
}
|
|
MultipleControlsBind.cshtml
| Razor |
コードのコピー
|
|---|---|
@using C1.Web.Mvc; @using System.Collections.Generic; @using C1.Web.Mvc.Fluent; @using MVC_DataBinding.Models; @model List<Fruit> @(Html.C1().CollectionViewService().Id("fruitsSales") .Bind(Model).Update(Url.Action("Update", "Home")) .Delete(Url.Action("Delete", "Home")) .Create(Url.Action("Create", "Home"))) @(Html.C1().FlexGrid<Fruit>().Id("flexGrid") .Columns(cls => { cls.Add(col => col.Binding("ID").Header("ID").Visible(true).IsReadOnly(true)); cls.Add(col => col.Binding("Name").Header("名前").Width("*")); cls.Add(col => col.Binding("Country").Header("国名").Width("*")); cls.Add(col => col.Binding("MarPrice").Header("3月の価格").Width("*")); cls.Add(col => col.Binding("AprPrice").Header("4月の価格").Width("*")); cls.Add(col => col.Binding("MayPrice").Header("5月の価格").Width("*")); }) .IsReadOnly(true) .AllowSorting(true) .ItemsSourceId("fruitsSales") .AutoGenerateColumns(false) .IsReadOnly(false) .AllowAddNew(true) .AllowDelete(true) .SelectionMode(C1.Web.Mvc.Grid.SelectionMode.Row) .Width(600) .Height(400) ) @(Html.C1().FlexChart().Id("flexChart").Header("売り上げ(果物)") .ItemsSourceId("fruitsSales").BindingX("Name").Series(sers => { sers.Add().Binding("MarPrice").Name("3月"); sers.Add().Binding("AprPrice").Name("4月"); sers.Add().Binding("MayPrice").Name("5月"); }).SelectionMode(C1.Web.Mvc.Chart.SelectionMode.Point) .ChartType(C1.Web.Mvc.Chart.ChartType.Column) .Rotated(false) .Height(400) .Width(600) ) |
|