インフラジスティックス・ジャパン株式会社のBlog

インフラジスティックス・ジャパン株式会社のチームメンバーが技術トレンド、製品Tips、サポート情報からライセンス、日々の業務から感じることなど、さまざまなトピックについてお伝えするBlogです。

[ASP.NET MVC] igGrid の各種設定を Controller 側で行う方法

弊社の igGrid (jQuery コントロール) では、ASP.NET MVC を利用する場合はグリッドの定義や各種設定を行うのに View 側で Razor 構文を用いるケースが一般的です。

以下はその例です。

View 側の Grid 定義部分

@(Html.Infragistics().Grid(Model.Customers.AsQueryable())
    .ID("testGrid")
    .AutoGenerateColumns(false)
    .Columns(column =>
    {
        column.For(x => x.ID).DataType("int").HeaderText("id").Hidden(true);
        column.For(x => x.Name).DataType("string").HeaderText("Name").Hidden(false);
        column.For(x => x.IsActive).DataType("boolean").HeaderText("Type").Hidden(false);
    })
    .Features(feature => {
        feature.Sorting().CaseSensitive(true);
        feature.Filtering().Mode(FilterMode.Simple);
    })
    .PrimaryKey("CustomerID")
    .DataSource(Model.TestsVO.AsQueryable())
    .DataBind()
    .Render()
)

元データ

        private IEnumerable<Customer> GetCustomers()
        {
            return new List<Customer>
            {
                new Customer { ID=1, Name="John Smith", IsActive=true },
                new Customer { ID=2, Name="Bob Richards", IsActive=false },
                new Customer { ID=3, Name="Marge Wright", IsActive=false },
                new Customer { ID=4, Name="Dwight Long", IsActive=true },
                new Customer { ID=5, Name="Amy Grant", IsActive=true },
            };
        }

しかし、場合によってはカラムの数やその設定値、機能に関するプロパティ設定などを、データやセッション情報に応じてサーバ側で可変に処理したい場合があります。そのような場合には、GridModel クラスを使ってController側でそれらを処理する事ができます。

View側

@(Html.Infragistics().Grid("testGrid", Model))

Controller側

    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            GridModel grid = new GridModel();
            grid.DataSource = GetCustomers().AsQueryable();
            grid.Width = "500px";


            //バインドしているCustomerクラスのプロパティをFor文で回してカラム定義する。
            Type t = typeof(Customer);
            //メンバを取得する
            MemberInfo[] members = t.GetMembers(
                BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.Static |
                BindingFlags.DeclaredOnly);
            foreach (MemberInfo m in members.Where(p => p.MemberType == MemberTypes.Property))
            {
                //メンバの型と、名前を表示する
                Console.WriteLine("{0} - {1}", m.MemberType, m.Name);

                    GridColumn column = new GridColumn()
                    {
                        HeaderText = m.Name,
                        Key = m.Name,
                        DataType = "string",
                        Hidden = false
                    };
                    // ID列を非表示に設定
                    if (column.Key == "ID")
                        column.Hidden = true;
                    grid.Columns.Add(column);
            }
            return View(grid);

        }

...以下省略

 

上記のコードでは、GridModel クラスのインスタンスを生成し、各プロパティ設定を行い、その GridModel を View 側へ返しています。View 側では Model をそのまま設定すれば Controller 側で設定した内容でグリッドが生成されます。
各カラムの設定は GridColumn を生成して列の設定を行い GridModel の Columns コレクションにループ文で追加していっています。(※上記サンプルでは、元データのクラスのメンバをループ文で全て追加指定ます。)

Controller 側でサーバ処理に応じて設定ができるというだけでなく、書き慣れたC#(VBでも可)で書けるので、Razor構文に慣れていない方でもスラスラ書けるのは良いですね!

image

 

本稿のサンプル:
igGrid_GridModel.zip

製品の評価版で試してみたい方は、こちらから