バージョン

非バインド列をリモートに生成 (igGrid)

トピックの概要

目的

このトピックでは、サーバー上で非バインド列の値を設定する方法をコード例を用いて示します。

前提条件

このトピックを理解するために、以下のトピックを参照することをお勧めします。

  • 非バインド列の概要: このトピックでは、igGrid の非バインド列機能の概要について説明します。

  • 列を非バインドとして設定 (igGrid): このトピックでは、クライアント側およびサーバー側で igGrid に非バインド列を設定する方法を示します。これには、JavaScript と ASP.NET のコード スニペットが含まれます。

  • 非バインド列の生成の概要 (igGrid): このトピックは、非バインド列にデータを生成する方法の概念的な概要を示し、オプション (ローカル/リモート) を簡単に説明します。

このトピックの内容

このトピックは、以下のセクションで構成されます。

非バインド列にデータをリモートで追加 - 概要

igGrid は、デフォルトで非バインド列をサポートしますが、設定が必要です。以下の表は、構成オプションをまとめたものです。

非バインド列の値を設定するには 以下を実行します。
ビューでチェーンを使用 列定義の一部としてクライアント上に非バインド値をシリアル化します。 クライアント側のプロパティ unboundValues と同等の UnboundColumnWrapper.UnboundValues(List list) メソッドを使用します。このメソッドは、列定義の一部としてクライアント上の unboundValues プロパティのオブジェクト リストをシリアル化します。
プライマリ キーにより非バインド列の値を設定します Grid.SetUnboundValues(string key, Dictionary values) メソッドを View で使用します。
プライマリ キーを使用せずに非バインド列値を設定します Grid.SetUnboundValues(string key, List values) メソッドを View で使用します。
コントローラーで GridModel クラスを使用 列定義の一部としてクライアント上に非バインド値をシリアル化します。 UnboundColumn.UnboundValues プロパティを使用します。
プライマリ キーを使用して非バインド列の値を設定します GridModel.SetUnboundValues(string key, Dictionary values) メソッドを使用します。
プライマリ キーを使用せずに非バインド列の値を設定します GridModel.SetUnboundValues(string key, List values) メソッドを使用します。

非バインド列にデータをリモートで追加するシナリオ

以下の表は、igGrid リモートで非バインド列にデータを追加する場合にサポートされるシナリオをまとめたものです。

凡例:

回避策
既知の回避策はありません
修正予定です
リモート データ (DataSourceUrl が設定されています) MergeUnboundColumns オプション値 ローカル機能 リモート機能
View で SetUnboundValues( string columnKey, List unboundValues) の使用 いいえ true リモート機能は、DataSourceUrl が設定されていないため適用できません。
false
はい - 非バインド列にデータは追加されません。ビューのグリッド構成が持続しないためです。これは、グリッド構成がすべての設定においてデフォルト値で復元され、MergeUnboundColumns はデフォルトで false であるということです。 true igGrid は、「既知の問題および制限」トピックで説明されているように、非バインド列に対してリモート機能を無効にします。
false
View で SetUnboundValues( string columnKey, Dictionary unboundValues) の使用 いいえ true リモート機能は、DataSourceUrl が設定されていないため適用できません。
false
はい - 非バインド列にデータは追加されません。ビューのグリッド構成が持続せず MergeUnboundColumns が false になるためです。 true リモート機能は、「既知の問題および制限」トピックで説明されているように、非バインド列に対して無効です。
false
Model で SetUnboundValues( string columnKey, List unboundValues) の使用 いいえ true リモート機能は、DataSourceUrl が設定されていないため適用できません。
false
はい - 非バインド列にデータは設定しませんが、「既知の問題および制限」トピックで説明されているように、リモートのページングを有効にするとデータは各ページで同じになります。 true リモート機能は、「既知の問題および制限」トピックで説明されているように、非バインド列に対して無効です。
false
Model で SetUnboundValues( string columnKey, Dictionary unboundValues) の使用 いいえ true リモート機能は、DataSourceUrl が設定されていないため適用できません。
false
はい true リモート機能は、「既知の問題および制限」トピックで説明されているように、非バインド列に対して無効です。
false

コード例

以下の表は、このトピックで使用したコード例をまとめたものです。

プライマリ キーを使用してビューの非バインド列にチェーンで追加 (コード例)

説明

この例では、Grid<T>.SetUnboundValues(string key, Dictionary<object, object> values) メソッドを使用して非バインド列のデータを設定します。

このオーバーロードは、2 つのパラメーターを受け付けます。「列キー」および <PrimaryKey, Unbound Value> ペアのディクショナリです。ディクショナリ内の PrimaryKeyigGrid 内の行のプライマリ キーを指し示し、「Unbound Value」は、キーが「列キー」に等しい非バインド列に設定される値です。

注: プライマリ キーを定義した後でのみ、このオーバーロードを使用します。

SetUnboundValuesMergeUnboundColumns = TRUE を使用すると、ページング、並べ替え、フィルタリング等の操作を実施後に非バインド値がバインド データに追加されます。行識別子と非バインド値の間に明確に定義された相関関係があるためで、これはページング、並べ替え、フィルタリングがリモートである場合に追加の操作は必要ないということです。

コード

モデル:

C# の場合:

namespace UnboundColumns.Models
{
    public class Product
    {
        public int ProductID { get; set; }
        public string Name { get; set; }
        public string ProductNumber { get; set; }
        public DateTime ReleaseDate { get; set; }
    }
}

これは、4 つのフィールドを含む非常にシンプルな Product モデルです。

ビュー:

C# の場合:

@using Infragistics.Web.Mvc
@model IQueryable<UnboundColumns.Models.Product>
@(Html.Infragistics()
.Grid(Model)
.ID("grid1")
.PrimaryKey("ProductID")
.AutoGenerateColumns(false)
.Columns(col =>
{
    col.For(c => c.ProductID).HeaderText("Product ID");
    col.Unbound("InStock")
        .HeaderText("In Stock")
        .DataType("bool");
})
.MergeUnboundColumns(true)
.SetUnboundValues("InStock", (Dictionary<object, object>)ViewData["ProductsInStock"])
.DataBind()
.Render())

View は非常にシンプルです。厳密に型指定されたモデル IQueryable<UnboundColumns.Models.Product> があります。これは、データをバインドするため Ignite UI for MVC Grid により使用されるモデルです。グリッドは、キー InStock で 1 つの非バインド列に構成されます。このキーは Grid<T>.SetUnboundValues(string columnKey, List<object> unboundValues) への呼び出しによりデータへバインドされます。コードは、プライマリ キーによってグリッド データを持つ非バインド値とグリッド ラッパーが一致するように、プライマリ キーを定義します。

コントローラー:

C# の場合:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        Dictionary<object, object> productsInStock =
        new Dictionary<object, object>();
        productsInStock.Add(1, true);
        productsInStock.Add(2, false);
        productsInStock.Add(3, false);
        ViewData["ProductsInStock"] = productsInStock;
        return View(this.GetProducts().AsQueryable());
    }
    private List<Product> GetProducts()
    {
        List<Product> products = new List<Product>()
        {
            new Product() { ProductID = 1, Name = "Adjustable Race", ProductNumber = "AR-5381" },
            new Product() { ProductID = 2, Name = "Bearing Ball", ProductNumber = "BA-8327" },
            new Product() { ProductID = 3, Name = "BB Ball Bearing", ProductNumber = "BE-2349" }
        };
        return products;
    }
}

コントローラーには 2 つのメソッドがります。GetProducts は、製品のサンプル リストを返すプライベート メソッドです。Index アクション メソッドは productsInStock と呼ばれる非バインド値のディクショナリ インスタンスを構築し、ViewData 変数内にキー ProductsInStock で保存します。最終的に GetProducts の結果はビューに移されます。

プライマリ キーを使用せずにビューの非バインド列にチェーンで追加 (コード例)

説明

このオーバーロードは、列キーおよび値のリストをパラメーターとして受け付けます。リストの値は、指定した「列キー」で列のセルに設定されます。指定されたキーで非バインド列の提供に失敗した場合、またはキーがバインド列のものである場合は、カスタム例外がスローされます。

プライマリ キーが未定義の場合はこのメソッドを使用します。

定義済みのプライマリ キーがある場合、オーバーロード GridModel.SetUnboundValues(string key, Dictionary<object, object> values) の使用をお勧めします。この場合、リストを使用するとパフォーマンスに悪影響を及ぼします。行識別子とリスト項目の間に相関関係を作るためデータ ソース全体がトラバースされるためです。値の非バインドリストで項目の順序に従ってリレーションシップを構築します。

リストに含まれるのと同じ数の値を設定します。行数がリストの長さより長い場合、残りの行に値は設定されません。

注: Grid<T>.SetUnboundValues (<Column key>, <List of values>) オーバーロードを定義済みプライマリ キー無しで使用すると、プライマリ キー、その他の行識別子および非バインド値の間にマッピングは存在しません。リモートのフィルタリング、並べ替えまたはページングを使用する場合に、この点を検討してください。

SetUnboundValues および MergeUnboundColumns = “true” を使用する場合、フィルタリング、並べ替え、ページング等の操作を実施後バインド データに非バインド値を追加します。

コード

モデル:

C# の場合:

namespace UnboundColumns.Models
{
    public class Product
    {
        public int ProductID { get; set; }
        public string Name { get; set; }
        public string ProductNumber { get; set; }
        public DateTime ReleaseDate { get; set; }
    }
}

これは、4 つのフィールドを含む非常にシンプルな Product モデルです。

コントローラー:

C# の場合:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        List<object> productsInStock =
        new List<object>();
        productsInStock.Add(true);
        productsInStock.Add(false);
        productsInStock.Add(false);
        ViewData["InStock"] = productsInStock;
        return View(this.GetProducts().AsQueryable());
    } 
    private List<Product> GetProducts()
    {
        List<Product> products = new List<Product>()
        {
            new Product() { ProductID = 1, Name = "Adjustable Race", ProductNumber = "AR-5381" },
            new Product() { ProductID = 2, Name = "Bearing Ball", ProductNumber = "BA-8327" },
            new Product() { ProductID = 3, Name = "BB Ball Bearing", ProductNumber = "BE-2349" }
        };
        return products;
    }
}

コントローラーには 2 つのメソッドがります。GetProducts は、製品のサンプル リストを返すプライベート メソッドであり、公開用 Index アクション メソッドは、非バインド列によって使用されるオブジェクトのリストを作成します。このリストは、InStock と呼ばれる ViewData 変数に保存されます。最終的に、Index アクション メソッドは製品のデータをビューに渡します。

ビュー:

C# の場合:

@using Infragistics.Web.Mvc
@model IQueryable<UnboundColumns.Models.Product>
@(Html.Infragistics()
.Grid(Model)
.ID("grid1")
.AutoGenerateColumns(false)
.Columns(col =>
{
    col.Unbound("InStock")
        .HeaderText("In Stock")
        .DataType("bool");
})
.SetUnboundValues("InStock", (List<object>)ViewData["InStock"])
.DataBind()
.Render())

厳密に型指定されたビューにはモデル IQueryable<UnboundColumns.Models.Product> があります。Ignite UI for MVC Grid は、このモデルを使用してデータをバインドします。コードは、UnboundColumnWrapper<T>.UnboundValues(List<object> list) への呼び出しによりデータへバインドされたキー InStock を持つ 1 つの非バインド列でグリッドを構成します。

プライマリ キーを使用してコントローラーで非バインド列に追加 (コード例)

説明

この例では、GridModel.SetUnboundValues(string key, Dictionary<object, object> values) メソッドを使用して非バインド列データを設定します。

このオーバーロードは、2 つのパラメーターを受け付けます。「列キー」および <PrimaryKey, Unbound Value> ペアのディクショナリです。ディクショナリ内の PrimaryKey は igGrid 内の行のプライマリ キーをポイントし、「非バインド値」は「列キー」に等しいキーで非バインド列に設定されます。

注: プライマリ キーが定義される場合にのみ、このオーバーロードを使用します。

SetUnboundValuesMergeUnboundColumns = TRUE を使用する場合、フィルタリング、並べ替え、ページング等の操作を実施後にバインド データに非バインド値を追加します。行識別子と非バインド値の間に明確に定義された相関関係があるためで、これは、リモートでページング、並べ替え、フィルタリングを行う場合に追加の操作は必要ないということを意味します。

コード

モデル:

C# の場合:

namespace UnboundColumns.Models
{
    public class Product
    {
        public int ProductID { get; set; }
        public string Name { get; set; }
        public string ProductNumber { get; set; }
        public DateTime ReleaseDate { get; set; }
    }
}

これは、4 つのフィールドを含む非常にシンプルな製品モデルです。

ビュー:

C# の場合:

@using Infragistics.Web.Mvc
@model GridModel
@Html.Infragistics().Grid(Model)

ビューは、厳密に型指定された GridModel モデルでコントローラー内にグリッドを構成するために使用されており非常にシンプルです。

コントローラー:

C# の場合:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        GridModel gridModel = GetGridModel();
        return View(gridModel);
    }
    private GridModel GetGridModel()
    {
        GridModel gridModel = new GridModel();
        gridModel.DataSource = this.GetProducts().AsQueryable();
        gridModel.PrimaryKey = "ProductID";
        gridModel.AutoGenerateColumns = false;
        gridModel.MergeUnboundColumns = true;
        gridModel.Columns.Add(new GridColumn()
        {
            Key = "ProductID",
            HeaderText = "Product ID"
        });
        gridModel.Columns.Add(new UnboundColumn()
        {
            Key = "InStock",
            HeaderText = "In Stock"
        });
        Dictionary<object, object> productsInStock =
        new Dictionary<object, object>();
        productsInStock.Add(1, true);
        productsInStock.Add(2, false);
        productsInStock.Add(3, false);
        gridModel.SetUnboundValues("InStock", productsInStock);
        return gridModel;
    }
    private List<Product> GetProducts()
    {
        List<Product> products = new List<Product>()
        {
            new Product() { ProductID = 1, Name = "Adjustable Race", ProductNumber = "AR-5381" },
            new Product() { ProductID = 2, Name = "Bearing Ball", ProductNumber = "BA-8327" },
            new Product() { ProductID = 3, Name = "BB Ball Bearing", ProductNumber = "BE-2349" }
        };
        return products;
    }
}

コントローラーには 3 つのメソッドがります。GetProducts は、製品のサンプル リストを返すプライベート メソッドです。Index アクション メソッドは GetGridModel メソッドを呼び出し、その結果を ビューに渡します。GetGridModel メソッドは GridModel クラスを使用してグリッドを構成します。PrimaryKey プロパティが設定されている点にご注意ください。これは、この SetUnboundValues メソッドのオーバーロードを使用する場合は必須です。メソッドの終わりにおいて新しい Dictionary<object, object> が作成および設定され、GridModel.SetUnboundValues への呼び出しが行われます (通常、別のデータ ソースからの値を作成するかオンザフライで計算します)。

プライマリ キーを使用せずにコントローラーで非バインド列に追加 (コード例)

説明

このオーバーロードは、列キーおよび値のリストをパラメーターとして受け付けます。リストの値は指定した「列キー」で列のセルに設定されます。指定されたキーを持つ非バインド列がない場合、またはキーがバインド列のものである場合は、カスタム例外がスローされます。

プライマリ キーが未定義であっても、このメソッドを使用します。

定義済みのプライマリ キーがある場合、オーバーロード GridModel.SetUnboundValues(string key, Dictionary<object, object> values) の使用をお勧めします。この場合、リストを使用するとパフォーマンスに悪影響を及ぼします。行識別子とリスト項目の間に相関関係を作るためデータ ソース全体がトラバースされるためです。値の非バインドリストで項目の順序に従ってリレーションシップを構築します。

リストに含まれるのと同じ数の値を設定します。 行数がリストの長さより長い場合、残りの行に値は設定されません。

注: プライマリ キーを割り当てず GridModel.SetUnboundValues (<Column key>, <List of values>) オーバーロードを使用すると、オーバーロードは、プライマリ キー (またはその他の行識別子) と非バインド値の間にマッピングなしという結果になります。リモートのフィルタリング、並べ替え、ページングを使用する場合にこの点を考慮する必要があります。

SetUnboundValues および MergeUnboundColumns = “true” を使用する場合、フィルタリング、並べ替え、ページング等の操作を実施後バインド データに非バインド値を追加します。

コード

モデル:

C# の場合:

namespace UnboundColumns.Models
{
    public class Product
    {
        public int ProductID { get; set; }
        public string Name { get; set; }
        public string ProductNumber { get; set; }
        public DateTime ReleaseDate { get; set; }
    }
}

これは、4 つのフィールドを含む非常にシンプルな Product モデルです。

ビュー:

C# の場合:

@using Infragistics.Web.Mvc
@model GridModel
@Html.Infragistics().Grid(Model)

ビューは、厳密に型指定された GridModel モデルでコントローラー内にグリッドを構成するために使用されており非常にシンプルです。

コントローラー:

C# の場合:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        GridModel gridModel = GetGridModel();
        return View(gridModel);
    }
    private GridModel GetGridModel()
    {
        GridModel gridModel = new GridModel();
        gridModel.DataSource = this.GetProducts().AsQueryable();
        gridModel.AutoGenerateColumns = false;
        gridModel.MergeUnboundColumns = true;
        gridModel.Columns.Add(new UnboundColumn()
        {
            Key = "InStock",
            HeaderText = "In Stock"
        });
        List<object> productsInStock =
        new List<object>();
        productsInStock.Add(true);
        productsInStock.Add(false);
        productsInStock.Add(false);
        gridModel.SetUnboundValues("InStock", productsInStock);
        return gridModel;
    }
    private List<Product> GetProducts()
    {
        List<Product> products = new List<Product>()
        {
            new Product() { ProductID = 1, Name = "Adjustable Race", ProductNumber = "AR-5381" },
            new Product() { ProductID = 2, Name = "Bearing Ball", ProductNumber = "BA-8327" },
            new Product() { ProductID = 3, Name = "BB Ball Bearing", ProductNumber = "BE-2349" }
        };
        return products;
    }
}

コントローラーには 3 つのメソッドがります。GetProducts は、製品のサンプル リストを返すプライベート メソッドです。公開用の Index アクション メソッドは GetGridModel メソッドを呼び出し、その結果を ビューに渡します。GetGridModel メソッドは GridModel クラスを使用してグリッドを構成します。PrimaryKey プロパティが設定されていない点にご注意ください。メソッドの終わりにおいて新しい List<object> を作成および設定し、GridModel.SetUnboundValues を呼び出します (通常、別のデータ ソースからの値を作成するかオンザフライで計算します)。

関連コンテンツ

トピック

このトピックの追加情報については、以下のトピックも合わせてご参照ください。

オンラインで表示: GitHub