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

