jQuery MiniUI

 找回密码
 立即注册
查看: 6741|回复: 7
打印 上一主题 下一主题

为什么我获取不到tree的id,报错:未将实例引用到对象 [复制链接]

Rank: 2

跳转到指定楼层
楼主
发表于 2017-8-10 18:12:29 |显示全部楼层 |倒序浏览
本帖最后由 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代表父节点


附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Rank: 2

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

恩恩,数据已经出来了,但是显示的数据就和datagrid一样并不是树状结构啊,为什么treegrid不能自动生成树状结构啊,如果我用递归算法的话吗,怎么写啊

Rank: 2

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

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

Rank: 2

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


这个还是像表格一样是一条一条的,而不是示例上的那种树状结构,我想把这种格式转化为demo里面的那种,但是我不知道用递归算法怎么和树状结构联合起来用啊
附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Rank: 2

5#
发表于 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);
        }

Rank: 2

6#
发表于 2017-8-11 11:27:27 |显示全部楼层
dforce 发表于 2017-8-11 11:23
treeColumn="MenuName"
这列对应的是一列的name,不是field,你没有设置。

您的意思是,我要在后面加上个nameField=“MenuName”?

Rank: 2

7#
发表于 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"}
                ]
        }
]

Rank: 2

8#
发表于 2017-8-11 14:37:00 |显示全部楼层
嗯呢,我现在通过中转站只能获取上面哪一种,但是我想要在中转站把它处理成后面那一种,就是这一点我不知道应该怎么敲

Archiver|普加软件

GMT+8, 2024-5-10 22:58 , Processed in 1.031526 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部