クライアントのリストを階層の最初のレベルとして表示する DevExpress MVC TreeList を実装しようとしています。ただし、1 つのクライアントを開くと、2 番目のレベルに、関連する注文のリストと各注文の OrderTotal が表示される必要があります。
私が探しているものに似ているhttp://demos.devexpress.com/MVCxTreeListDemos/DataBinding/DataBindingのデモに基づいて自分自身をベースにしようとしています。例として Northwind データベースを使用しています。
TreeList が基づいている必要があるモデルは、次の構造を持たなければならないという点で具体的でなければなりません (おそらく私はこれについて間違っています):
CustomerId、Order.CustomerId、CustomerName、OrderTotal、OrderDate、ShipCity
2 つ目は、階層構造を満たすために「ParentId」である必要があります。
コントローラーにあるものは次のとおりです。
[ValidateInput(false)]
public ActionResult OrderTreeListPartial()
{
var model = db.Orders.GroupBy(o => o.Customer)
.Select(group => new
{
CustomerId = group.Key.CustomerID,
ParentId = group.Select(g=>g.CustomerID),
CustomerName = group.Key.CompanyName,
OrderTotal = group.Sum(g => g.OrderTotal),
OrderDate = group.Select(g => g.OrderDate),
City = group.Select(g => g.ShipCity)
});
return PartialView("_OrderTreeListPartial", model);
}
そして、_OrderTreeListPartial に次のものがあります。
@{
var treeList = Html.DevExpress().TreeList(settings =>
{
settings.Name = "OrderTreeList";
settings.CallbackRouteValues = new { Controller = "TreeList", Action = "OrderTreeListPartial" };
settings.SettingsEditing.AddNewNodeRouteValues = new { Controller = "TreeList", Action = "OrderTreeListPartialAddNew" };
settings.SettingsEditing.UpdateNodeRouteValues = new { Controller = "TreeList", Action = "OrderTreeListPartialUpdate" };
settings.SettingsEditing.DeleteNodeRouteValues = new { Controller = "TreeList", Action = "OrderTreeListPartialDelete" };
settings.SettingsEditing.NodeDragDropRouteValues = new { Controller = "TreeList", Action = "OrderTreeListPartialMove" };
settings.CommandColumn.Visible = true;
settings.CommandColumn.NewButton.Visible = true;
settings.CommandColumn.DeleteButton.Visible = true;
settings.CommandColumn.EditButton.Visible = true;
settings.AutoGenerateColumns = false;
settings.KeyFieldName = "CustomerId";
settings.ParentFieldName = "ParentId";
settings.RootValue = 0;
settings.Columns.Add(
column =>
{
column.FieldName = "CustomerName";
}
);
settings.Columns.Add(
column =>
{
column.FieldName = "OrderDate";
}
);
settings.Columns.Add(
column =>
{
column.FieldName = "OrderTotal";
column.PropertiesEdit.DisplayFormatString = "{0:C}";
}
);
settings.Columns.Add(
column =>
{
column.FieldName = "City";
}
);
settings.SettingsPager.Visible = true;
settings.SettingsSelection.Enabled = true;
});
if (ViewData["EditError"] != null)
{
treeList.SetEditErrorText((string)ViewData["EditError"]);
}
}
@treeList.Bind(Model).GetHtml()
問題は、コントローラーの LINQ 式にあると思います。実は、私は LINQ の専門家ではなく、将来のプロジェクトのために DevExpress 拡張機能を評価しています。私のLINQでも、TreeListの準備方法でも、助けていただければ幸いです。