首页 新闻 会员 周边

.Net MVC EasyUI-datagrid如何与tree连用

0
悬赏园豆:100 [已解决问题] 解决于 2014-08-06 11:58

功能主要实现当点击tree中的父节点的时候,重新加载datagrid的数据,显示点击的那个父节点下的数据在datagrid中。求具体代码!

就是说点击tree中的父节点之后,将父节点下的子节点数据全部显示在datagrid中!

孤独狂少的主页 孤独狂少 | 初学一级 | 园豆:35
提问于:2014-08-04 18:32
< >
分享
最佳答案
0

大概思路,如下

1、将父节点的数据,如id和name数据加载到tree上

2、给tree上加上onClick,点击父节点的,可以获取当前节点node的数据,比如node.Id等,通过node.id去找对应的子节点数据

3、将子节点的数据转成datagrid需要的json格式的数据

收获园豆:90
秋壶冰月 | 大侠五级 |园豆:5903 | 2014-08-04 19:01

思路是知道了,但是我后台绑定的tree数据出来全是undefined,看不了数据,大神求助

孤独狂少 | 园豆:35 (初学一级) | 2014-08-05 10:02

@孤独狂少: 估计你后台构造的数据,识别不了,后台构造这样的json格式数据,

{
        "id":14,
        "text":"about.html"
}
秋壶冰月 | 园豆:5903 (大侠五级) | 2014-08-05 10:47

@秋壶冰月: 谢谢了,后台我也是这样构造的,但是不知道是哪里出了问题,你可以帮我看看代码吗?

public JsonResult Details()
{
StringBuilder json = new StringBuilder();
var query = from a in db.CommonCode
//首先需要查询所有父节点ParentId == 0
where a.ParentId == 0
orderby a.Sort ascending
select new
{
a.ID, //自增ID
a.ParentId, //父节点,关联上级公共码编号ID
a.CodeTitle, //类型
a.Sort, //排序
a.CreateDate //创建时间
};
var data = query.ToList();
//判断data的总数是否大于0,如果大于0,则将父级菜单进行拼接
if (data.Count() > 0)
{
//拼接需要的Json格式为[{},{},{},{}]形式,必须拼接成这种方式,否则数据会显示不出来
//Json有多种格式,这里使用[{},{},{},{}]形式
json.Append("["); //开始拼接
//首先将所有父级节点遍历循环出来以"'ID:'"+这里为查询出来的数据+',',方式拼接
//Json格式每一个字段后面都有一个逗号,所以这里需要拼接一个逗号,即',',拼接的字段使用单引号
for (int i = 0; i < data.Count(); i++)
{
//Append将查询出来的数据追加拼接
json.Append("{");
json.Append("'ID':" + data[i].ID + ',');
json.Append("'text':'" + data[i].CodeTitle + "',");
json.Append("'state':'closed',");//这句话的意思是在显示treegrid的时候成展开状态还是关闭状态
#region 子级json拼接
//父级拼接完成之后,需要继续拼接子级,首先也是将数据查询出来
var query2 = from a in db.CommonCode
orderby a.Sort ascending
select new
{
a.ID, //自增ID
a.ParentId, //父节点,关联上级公共码编号ID
a.CodeTitle, //类型
a.Sort, //排序
a.CreateDate //创建时间
};
//这里非常重要,这个ID是通过父级筛选后的ID,而不是子级中查询出来的ID
int id = data[i].ID;
//这里在上面的查询中加上条件ParentId即为父级查询出来的ID,然后将其Tolist之后用data2接收
var data2 = query2.Where(a => a.ParentId == id).ToList();
//这里同父级拼接一样,判断data2是否大于0
if (data2.Count() > 0)
{
//如果大于0,开始拼接子级children
json.Append("'children':["); //子级拼接方式'children':[{},{},...]
for (int j = 0; j < data2.Count(); j++)
{
//这里同上面的父级拼接一样
json.Append("{");
json.Append("'ID':" + data2[j].ID + ',');
json.Append("'text':'" + data2[j].CodeTitle + "'");
//这里是子级判断
//判断是否最后一组数据,不加逗号
//因循环从0开始,所以+上1则等于总数
if ((j + 1) == data2.Count())
json.Append("}");//如果循环出来的总数等于data.count,则不加逗号
else
json.Append("},");//否则需要加上逗号
}
json.Append("]");//结束子级children拼接
}
else
//如果data2为空,则没有子级,子级里面为‘[]’即什么都没有
json.Append("'children':[]");
#endregion
//这里是父级判断
//判断是否最后一组数据,不加逗号
//因循环从0开始,所以+上1则等于总数
if ((i + 1) == data.Count())
json.Append("}"); //如果循环出来的总数等于data.count,则不加逗号
else
json.Append("},");//否则需要加上逗号
}
json.Append("]");//结束拼接
}
//将json字符串转为实体对象
//CodeP为公共码表自定义实体类
var jsonData = JsonConvert.DeserializeObject<IList<CodeP>>(json.ToString());
//将json对象输出到页面
return Json(jsonData, JsonRequestBehavior.AllowGet);

}

 

最后一个问题,求帮忙呀大哥!

孤独狂少 | 园豆:35 (初学一级) | 2014-08-05 11:15

@孤独狂少: 还没解决吗?

秋壶冰月 | 园豆:5903 (大侠五级) | 2014-08-05 22:25

@秋壶冰月: 已经解决了,非常感谢您!

孤独狂少 | 园豆:35 (初学一级) | 2014-08-06 11:57

@孤独狂少: 客气了,嘿嘿

秋壶冰月 | 园豆:5903 (大侠五级) | 2014-08-06 13:39
其他回答(1)
0

TreeNode treeNode = selectTreeNode.SelectedNode;//你选中的那个节点
if (treeNode == null)
return;
var item = treeNode.Tag as Model;//将List中模型每个Item,绑定到Tag上,这样你只需要,或者某个某个节点,然后遍历该节点的所有子节点,然后将每个子节点的var item = treeNode.Tag as Model加入到一个List里面去,然后绑定到datagrid里面就可以了。

收获园豆:10
@大龙哥 | 园豆:183 (初学一级) | 2014-08-05 09:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册