弊社の 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構文に慣れていない方でもスラスラ書けるのは良いですね!
本稿のサンプル:
サンプルのダウンロード