FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 9304|回复: 9
打印 上一主题 下一主题

关于FineUI树控件的数据绑定问题

[复制链接]
跳转到指定楼层
楼主
发表于 2016-1-12 10:54:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如图,在数据库里已经查询出了数据 使用“level”列来定义行级别(根)0-1-2-3,现在想把数据绑定到FineUI的树控件,请问后台代码该怎么写呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
沙发
发表于 2016-1-12 13:06:08 | 只看该作者
一个个treenote添加
板凳
 楼主| 发表于 2016-1-12 14:43:11 | 只看该作者
zy32002 发表于 2016-1-12 13:06
一个个treenote添加

可以详细说明下么,官网的示例看不太懂
地板
发表于 2016-1-12 15:02:05 | 只看该作者
tree.Nodes.Add(node);
5#
发表于 2016-1-12 22:39:36 | 只看该作者
本帖最后由 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 。
-----
本人学艺不精,只知道这些,希望对你有帮助。
6#
 楼主| 发表于 2016-1-13 22:58:59 | 只看该作者
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);
                }
            }
        }

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

下一楼上图
7#
 楼主| 发表于 2016-1-13 23:20:43 | 只看该作者
Primates 发表于 2016-1-12 22:39
我的Tree数据表结构如下:
MenuID  |  MenuName  |  MenuURL  |  ParentID  |  MenuIcon  |  MenuLevel  |  ...

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

已发送 txt文本 请查收
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-24 09:35 , Processed in 0.049967 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表