FineUI 官方论坛

标题: 关于FineUI树控件的数据绑定问题 [打印本页]

作者: 尐倫Hua    时间: 2016-1-12 10:54
标题: 关于FineUI树控件的数据绑定问题
如图,在数据库里已经查询出了数据 使用“level”列来定义行级别(根)0-1-2-3,现在想把数据绑定到FineUI的树控件,请问后台代码该怎么写呢?
[attach]8468[/attach]

作者: zy32002    时间: 2016-1-12 13:06
一个个treenote添加
作者: 尐倫Hua    时间: 2016-1-12 14:43
zy32002 发表于 2016-1-12 13:06
一个个treenote添加

可以详细说明下么,官网的示例看不太懂
作者: zy32002    时间: 2016-1-12 15:02
tree.Nodes.Add(node);
作者: Primates    时间: 2016-1-12 22:39
本帖最后由 Primates 于 2016-1-12 23:42 编辑

我的Tree数据表结构如下:
MenuID  |  MenuName  |  MenuURL  |  ParentID  |  MenuIcon  |  MenuLevel  |  MenuSort  | ....
----
楼主的表和上述大同小异,Tree控件需要取两个字段,分别是 MenuID 和 ParentID ,采用.Net的 DataSet 的 Relations 进行关联(下文红色代码):

public void GetMenuTree(DataTable menusDataTable,FineUI.Tree menuTree)
{
    DataSet ds = new DataSet();
    ds.Tables.Add(menusDataTable);
    ds.Relations.Add("TreeRelation", ds.Tables[0].Columns["MenuId"], ds.Tables[0].Columns["ParentId"]);
     foreach (DataRow row in ds.Tables[0].Rows)
     {
        if (row.IsNull("ParentId"))
          {
             TreeNode node = new TreeNode();
              node.Text = row["MenuName"].ToString();
              node.IconUrl = row["MenuIcon"].ToString();
              node.Expanded = true;
              menuTree.Nodes.Add(node);
              ResolveSubTree(row, node);
         }
      }
  }
protected void ResolveSubTree(DataRow dataRow, TreeNode treeNode)
  {
      DataRow[] rows = dataRow.GetChildRows("TreeRelation");
      if (rows.Length > 0)
        {
          treeNode.Expanded = false;
          foreach (DataRow row in rows)
          {
             TreeNode node = new TreeNode();
             node.Text = row["MenuName"].ToString();
             node.NavigateUrl = row["MenuURL"].ToString();
             node.IconUrl = row["MenuIcon"].ToString();
             treeNode.Nodes.Add(node);
             ResolveSubTree(row, node);
        }
     }
  }-----
注:FineUI 的 Tree 控件似乎(是似乎,仅是个人体验,没有官方确认)要求 ParentID 的顶级ID为 NULL —— 这句话不知道说清楚了没有。楼主提出来的数据库表 Tree_Pre 字段的顶级 ID 是数字0,会导致 ds.Relations.Add("TreeRelation", ds.Tables[0].Columns["MenuId"], ds.Tables[0].Columns["ParentId"]); 无法创建关联,因为 MenuID 的最小值为 1,ParentID 不可能指向 0 。
-----
本人学艺不精,只知道这些,希望对你有帮助。

作者: 尐倫Hua    时间: 2016-1-13 22:58
Primates 发表于 2016-1-12 22:39
我的Tree数据表结构如下:
MenuID  |  MenuName  |  MenuURL  |  ParentID  |  MenuIcon  |  MenuLevel  |  ...

根节点的问题解决了
方法是
ds.Relations.Add("TreeRelation", ds.Tables[0].Columns["Tree_ID"], ds.Tables[0].Columns["Tree_Pre"],false);

但现在新的问题又来了
我想指定NodeID
private void LoadTree1()
        {
            DataTable table = deparbll.GetTree2();
            DataSet ds = new DataSet();
            ds.Tables.Add(table);
            ds.Relations.Add("TreeRelation", ds.Tables[0].Columns["Tree_ID"], ds.Tables[0].Columns["Tree_Pre"],false);

            foreach (DataRow row in ds.Tables[0].Rows)
            {
                if (Convert.ToInt32(row["Tree_Pre"]) == 0)
                {
                    FineUIPro.TreeNode item = new FineUIPro.TreeNode();
                    item.Text = row["Tree_FieldName"].ToString();
                    item.NodeID = row["Tree_ID"].ToString(); //指定"学院"的节点ID为学院的ID
                    item.EnableClickEvent = true;
                    Tree1.Nodes.Add(item);

                    ResolveSubTree(row, item);
                }
            }
        }

        private void ResolveSubTree(DataRow dataRow, FineUIPro.TreeNode treeNode)
        {
            DataRow[] rows = dataRow.GetChildRows("TreeRelation");
            if (rows.Length > 0)
            {
                //// 如果是目录,则默认展开
                //treeNode.Expanded = true;
                foreach (DataRow row in rows)
                {
                    FineUIPro.TreeNode item = new FineUIPro.TreeNode();
                    item.Text = row["Tree_FieldName"].ToString();
                    item.NodeID = row["Tree_Pre"].ToString(); //指定的节点ID为数据库中的父ID即"Tree_Pre"
                    item.EnableClickEvent = true;
                    treeNode.Nodes.Add(item);

                    ResolveSubTree(row, item);
                }
            }
        }

这样一来就出现了下面的问题

下一楼上图
作者: 尐倫Hua    时间: 2016-1-13 23:20
Primates 发表于 2016-1-12 22:39
我的Tree数据表结构如下:
MenuID  |  MenuName  |  MenuURL  |  ParentID  |  MenuIcon  |  MenuLevel  |  ...

好吧 上面的问题错了 自己也解决了  但我想在点击节点的时候获取节点ID 比如点击或展开"学院"的时候就获取它的节点ID 该如何操作?而且根据三石的教程案例来做也不得 启用点击回发会新增一个树菜单,因为我的树控件数据绑定是写在page_load中的
作者: 尐倫Hua    时间: 2016-1-13 23:30
行了。。。所有问题已经解决 感谢回帖帮助我的人 么么哒
作者: HI,終遇你    时间: 2016-8-12 14:46
您可以把树控件的那个代码发我看看么?谢谢1401620014@qq.com
作者: 尐倫Hua    时间: 2016-8-17 10:55
HI,終遇你 发表于 2016-8-12 14:46
您可以把树控件的那个代码发我看看么?谢谢

已发送 txt文本 请查收




欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/) Powered by Discuz! X3.4