jQuery MiniUI

标题: 为什么我获取不到tree的id,报错:未将实例引用到对象 [打印本页]

作者: xiejunli    时间: 2017-8-10 18:12:29     标题: 为什么我获取不到tree的id,报错:未将实例引用到对象

本帖最后由 xiejunli 于 2017-8-10 18:13 编辑

获取tree的id,根据id把数据显示到treegrid里,有思路但实现不来,求具体代码  谢谢各位啦数据传递就和三层顺序一致,
1.DAL
public DataTable GetTreeGrid(Hashtable data)
        {
            string sorttext=string.Empty;
            sorttext = "MenuID ASC";
            StringBuilder steWhere=new StringBuilder();
            if (!string.IsNullOrEmpty(data["ID"].ToString()))//判断指定的字符串是null还是字符串
            {
                steWhere.Append("and AppID=@ID");//1
            }
            string sql = @"select MenuID as id,MenuName as text,AppID,ParentID from S_Menu where 1=1" + steWhere.ToString();
            SqlParameter[] parameters ={
                                          new SqlParameter("@ID",SqlDbType.Int,4)//里面的参数要和1处保持一致
                                      };
            parameters[0].Value = Util.StrToInt(data["ID"].ToString(), 0);
            return DbHelperSQL.Query(sql, parameters).Tables[0];
        }


2.中转站
public void getTreeGrid()
        {
            string json = string.Empty;
            String submitJSON = RequestHelper.GetString("ID");
            Hashtable data = new Hashtable();
            if (!string.IsNullOrEmpty(submitJSON))
            {
                data = JSON.JsonDecode(submitJSON);
                DataTable dt = new Learn.BLL.S_Menu().GetTreeGrid(data);
                json = JSON.DataTableToJSON(dt);
            }
            Response.Write(json);
        }

3.页面
div:tree
div:treegrid  属性:onNodesSelect="nodeselect"
<script>
......
tree.on("nodeselect", function (e) {
            var id = e.node.id;
            grid.load({ ID: id });
        });

</script>

sqlserver表:AppID=MenuID时表示为该节点下的,ParentID代表父节点
[attach]9694[/attach]


作者: dforce    时间: 2017-8-11 09:30:06

你这里是什么问题?
你的tree有数据有id字段吗?
可以参考一下我们树形联动的示例
http://www.miniui.com/demo/#src=tree/detailgrid.html

作者: xiejunli    时间: 2017-8-11 10:38:06

dforce 发表于 2017-8-11 09:30
你这里是什么问题?
你的tree有数据有id字段吗?
可以参考一下我们树形联动的示例

恩恩,数据已经出来了,但是显示的数据就和datagrid一样并不是树状结构啊,为什么treegrid不能自动生成树状结构啊,如果我用递归算法的话吗,怎么写啊
作者: dforce    时间: 2017-8-11 10:45:43

xiejunli 发表于 2017-8-11 10:38
恩恩,数据已经出来了,但是显示的数据就和datagrid一样并不是树状结构啊,为什么treegrid不能自动生成树 ...

1 看你数据有没有父子关系
2 treegrid需要专门设置一下节点列,treeColumn="指定一列的name“
http://www.miniui.com/demo/#src=treegrid/treegrid.html
可以看一下我们示例里面的设置。
作者: xiejunli    时间: 2017-8-11 10:53:55

dforce 发表于 2017-8-11 10:45
1 看你数据有没有父子关系
2 treegrid需要专门设置一下节点列,treeColumn="指定一列的name“
http://www ...

有父子关系,我也设置了节点列,但出来的数据还是和表格一样,而不是上下级的树状结构

作者: xiejunli    时间: 2017-8-11 10:57:04

本帖最后由 xiejunli 于 2017-8-11 10:58 编辑
xiejunli 发表于 2017-8-11 10:53
有父子关系,我也设置了节点列,但出来的数据还是和表格一样,而不是上下级的树状结构
...

[attach]9696[/attach]
这个还是像表格一样是一条一条的,而不是示例上的那种树状结构,我想把这种格式转化为demo里面的那种,但是我不知道用递归算法怎么和树状结构联合起来用啊

作者: dforce    时间: 2017-8-11 11:08:31

xiejunli 发表于 2017-8-11 10:57
这个还是像表格一样是一条一条的,而不是示例上的那种树状结构,我想把这种格式转化为demo里面的那种,但 ...

贴html代码,以及数据。我来看一下
作者: xiejunli    时间: 2017-8-11 11:18:17

   1.页面
<div class="mini-splitter" style="width:100%;height:100%;">
        <div size="200" showCollapseButton="true">
            <div class="mini-toolbar" style="padding:2px;border-top:0;border-left:0;border-right:0;">               
                <span style="padding-left:5px;">系统目录</span>                 
            </div>
            <div class="mini-fit">
                <ul id="tree1" class="mini-tree" url="<%=this.ResolveUrl("~") %>data/learn/menuServer.aspx?method=getTree" style="width:100%;"
                    showTreeIcon="true" textField="MenuName" idField="MenuID" parentField="ParentID" iconField="Icon" resultAsTree="false">        
                </ul>
            </div>
        </div>
        <div showCollapseButton="true">
            <div class="mini-toolbar" style="padding:2px;border-top:0;border-left:0;border-right:0;">
                <a class="mini-button" iconCls="icon-106">新增</a>
                <a class="mini-button" iconCls="icon-015">修改</a>     
                <a class="mini-button" iconCls="icon-101">删除</a>            
            </div>
            <div class="mini-fit" >
                <div id="treegrid1" class="mini-treegrid" style="width:100%;height:100%;" showTreeIcon="false"
                    borderStyle="border:0;" treeColumn="MenuName" idField="MenuID" parentField="AppID"
                    url="<%=this.ResolveUrl("~") %>data/learn/menuServer.aspx?method=getTreeGrid" >
                    <div property="columns">
                        <div field="MenuID" width="120" headerAlign="center" allowSort="true">ID</div>      
                        <div field="MenuName" width="120" headerAlign="center" allowSort="true">菜单名称</div>            
                        <div field="URL" width="100" allowSort="true">URL</div>
                        <div field="Icon" width="100" allowSort="true" renderer="icon">图标</div>
                    </div>
                </div>  
            </div>
        </div>        
    </div>
    <script type="text/javascript">
        mini.parse();
        var path = '<%=this.ResolveUrl("~") %>';
        var tree = mini.get("tree1");
        var grid = mini.get("treegrid1");
        $(function () {
            tree.load();
            grid.load();
        });
        //点击tree获取节点id传到中转站
        tree.on("nodeselect", function (e) {
            grid.load({ submitData: JSON.stringify({ id: e.node.MenuID }) });
        });

    </script>
2.中转站
        public void getTreeGrid()
        {
            string json = string.Empty;
            String submitJSON = RequestHelper.GetString("submitData");
            Hashtable data = new Hashtable();
            if (!string.IsNullOrEmpty(submitJSON))
            {
                data = JSON.JsonDecode(submitJSON);
                DataTable dt = new Learn.BLL.S_Menu().GetTreeGrid(data);
                json = JSON.ToJson(dt);  //就是要处理这个数据,把它转换为demo里面txt文档里的格式
            }
            Response.Write(json);
        }


作者: dforce    时间: 2017-8-11 11:23:55

xiejunli 发表于 2017-8-11 11:18
1.页面

        

treeColumn="MenuName"
这列对应的是一列的name,不是field,你没有设置。
作者: xiejunli    时间: 2017-8-11 11:27:27

dforce 发表于 2017-8-11 11:23
treeColumn="MenuName"
这列对应的是一列的name,不是field,你没有设置。

您的意思是,我要在后面加上个nameField=“MenuName”?
作者: dforce    时间: 2017-8-11 11:29:20

xiejunli 发表于 2017-8-11 11:27
您的意思是,我要在后面加上个nameField=“MenuName”?

看我前面贴的示例
作者: xiejunli    时间: 2017-8-11 12:01:39

本帖最后由 xiejunli 于 2017-8-11 14:35 编辑
dforce 发表于 2017-8-11 11:29
看我前面贴的示例

我在field=“MeunName”这一行里加上name=“MenuName”,还是不出来啊。这个是需要处理中转站里返回的datatable数据,把它转换为demo里面txt里的样式,这个应该怎么处理啊,我在网上搜了下用递归处理数据,但是都不能实际用到
就是把这种表格数据结构
        {id: "base", text: "Base", menuID:1}
        {id: "ajax", text: "Ajax",ParentID:base},
        {id: "json", text: "JSON",ParentID:base},
        {id: "date", text: "Date",ParentID:base},
        {id: "control", text: "Control",ParentID:base},
        {id: "messagebox", text: "MessageBox",ParentID:base},
        {id: "window", text: "Window",ParentID:base}
转换为下面这种树形结构
[
        {id: "base", text: "Base",
                children: [
                        {id: "ajax", text: "Ajax"},
                        {id: "json", text: "JSON"},
                        {id: "date", text: "Date"},
                        {id: "control", text: "Control"},
                        {id: "messagebox", text: "MessageBox"},
                        {id: "window", text: "Window"}
                ]
        },
        {id: "forms", text: "Forms",
                children: [
                        {id: "button", text: "Button"},
                        {id: "listbox", text: "ListBox"},
                        {id: "checkboxlist", text: "CheckBoxList"},
                        {id: "radiolist", text: "RadioList"},
                        {id: "calendar", text: "Calendar"},
                        {id: "textbox", text: "TextBox"},
                        {id: "password", text: "Password"},
                        {id: "textarea", text: "TextArea"},
                        {id: "combobox", text: "ComboBox"},
                        {id: "datepicker", text: "DatePicker"},
                        {id: "spinner", text: "Spinner"},
                        {id: "treeselect", text: "TreeSelect"},
                        {id: "fileupload", text: "FileUpload"}
                ]
        }
]
作者: dforce    时间: 2017-8-11 12:14:35

xiejunli 发表于 2017-8-11 12:01
我在field=“MeunName”这一行里加上name=“MenuName”,还是不出来啊。这个是需要处理中转站里返回的dat ...

你的数据字段没对应,parentId应该对应父节点的id,也就是”base",而不是1.
作者: xiejunli    时间: 2017-8-11 14:37:00

嗯呢,我现在通过中转站只能获取上面哪一种,但是我想要在中转站把它处理成后面那一种,就是这一点我不知道应该怎么敲
作者: dforce    时间: 2017-8-11 14:54:57

xiejunli 发表于 2017-8-11 14:37
嗯呢,我现在通过中转站只能获取上面哪一种,但是我想要在中转站把它处理成后面那一种,就是这一点我不知道 ...

1 我们树可以接收第一种格式的数据
2 MiniUI是界面控件,不是基础框架,不提供数据转换类的处理方法




欢迎光临 jQuery MiniUI (http://miniui.com/discuss/) Powered by Discuz! X2