0

私はKendoTreeviewを持っています。私は MVC4 と KendoUI の最新のものを使用しています。私はSQLサーバーとC#も使用しています

「MyDB」というデータベースと、そのデータベースに「Products」という単一のテーブルがあるとします。

テーブル「製品」: ID -- int -- pk 名前 -- nvarchar(50) 親 -- int -- FK

製品にサブ製品を持たせたい...

わかりました、今私が持っているコントローラーで:

 public JsonResult ProductsForTreeView(int? id)
    {
         var dataContext = new ProductsDBContext();
         var products = from e in dataContext.Products
               where (  id.HasValue ? e.Parent == id : e.Parent == 0) 
               select new
                          {
                              id = e.Id,
                              Name = e.Name,
                              hasChildren = e.Id
                          };

 return Json(products , JsonRequestBehavior.AllowGet);
    }

そしてビュー:

@(Html.Kendo().TreeView()
      .Name("treeview")
      .DataTextField("Name")
      .HighlightPath(true)
      .DataSource(dataSource => dataSource
                                    .Read(read => read
                                                      .Action("ProductsForTreeView", "SiteMap")
                                    )
      )
    )

これは機能し、ツリービューがすべてのノードの横に + を表示していることを除いて、ツリービューを正しく表示します(ALMOST!)...子があるかどうかに関係なく。

LINQ を変更するか、JavaScript を使用して、子要素のない "+" を削除する必要があります...

「+」のクラス名は「k-icon k-plus」です。

ツリービューがこの「+」をすべてのノードに追加しないようにするにはどうすればよいですか? 子を持つノードにのみ表示する必要があります。

4

1 に答える 1

0

問題はJSONを返すことだと思います。.hasChildrenプロパティがtrueに設定されている場合、expand('+') アイコンが追加されます。

したがって、.hasChildrenプロパティには、そのノードに子/子がある場合にのみtrue となるブール値が必要です。あなたの場合、ブール値ではないと思うe.Idを使用しました。

これを試して:

hasChildren = e.Products.Any()

または、ドキュメントを確認してください。 http://demos.kendoui.c​​om/web/treeview/remote-data.html

お役に立てれば。

于 2013-02-21T03:59:36.807 に答える