JqGrid树状体排序问题
我希望你能帮助我,我有一个这样的结构:JqGrid树状体排序问题,jqgrid,jqgrid-asp.net,treegrid,Jqgrid,Jqgrid Asp.net,Treegrid,我希望你能帮助我,我有一个这样的结构: - root A -child_A1 -child_A1_1 -child_A1_2 -child_A1_3 -child_A2 -child_A2_1 -child_A2_2 -child_A2_3 - root B - child_B1 -child_B1_1 -child_B1_2
- root A
-child_A1
-child_A1_1
-child_A1_2
-child_A1_3
-child_A2
-child_A2_1
-child_A2_2
-child_A2_3
- root B
- child_B1
-child_B1_1
-child_B1_2
-child_B1_3
- root A
-child_A1
-child_A2
-child_A1_1
- root B
- child_B1
-child_B1_1
-child_B1_2
-child_B1_3
-child_A1_2
-child_A1_3
-child_A2_1
-child_A2_2
-child_A2_3
但当我在TreeGrid中显示数据时,它显示如下:
- root A
-child_A1
-child_A1_1
-child_A1_2
-child_A1_3
-child_A2
-child_A2_1
-child_A2_2
-child_A2_3
- root B
- child_B1
-child_B1_1
-child_B1_2
-child_B1_3
- root A
-child_A1
-child_A2
-child_A1_1
- root B
- child_B1
-child_B1_1
-child_B1_2
-child_B1_3
-child_A1_2
-child_A1_3
-child_A2_1
-child_A2_2
-child_A2_3
有人知道为什么吗。。???请帮助,我搜索了有关此错误的信息,但运气不好
以下是我的JavaScript:
<script type="text/javascript">
$(document).ready(function () {
var lastsel;
$(function () {
jQuery('#tree').jqGrid({
url: '/Ubicacion/TreeGrid/',
datatype: 'json',
height: 250,
colNames: ['Nombre', 'Descripcion'],
colModel: [
{ name: 'Nombre', index: 'Nombre', width: 100, sortable: true, editable: true, edittype: "text"},
{ name: 'Descripcion', index: 'Descripcion', width: 80, editable: true, edittype: "text" }
],
caption: 'Listado de Ubicaciones',
treeGridModel: 'adjacency',
sortname: 'Nombre',
loadonce: true,
height: 'auto',
width: '500',
pager: "#pager",
treeGrid: true,
ExpandColumn: 'Id',
ExpandColClick: true,
});
});
});
我明白了!您需要对列表进行递归排序,因为它的呈现顺序与您从数据库中提取的顺序完全相同
private static List<MENU> Listado = new List<MENU>();
private static List<MENU> lstOrdenada = new List<MENU>();
public List<MENU> MenuRecursivo()
{
//the whole list of MENU
Listado = (from m in db.MENU where m.men_eliminado == "N" select m).ToList();
// a list where we'll put the ordered items
lstOrdenada = new List<MENU>();
foreach (MENU item in Listado.Where(x => x.ID_MENU == x.id_menu_padre).ToList()) // in my case, only the root items match this condition
{
lstOrdenada.Add(item);
GMenuHijo(item.ID_MENU, ref lstOrdenada);
}
return lstOrdenada;
}
private static List Listado=new List();
私有静态列表lstOrdenada=新列表();
公共列表菜单cursivo()
{
//全部菜单
Listado=(从db.MENU.eliminado==“N”选择m.ToList()中的m开始);
//我们将在其中放置订购物品的列表
lstOrdenada=新列表();
foreach(Listado.Where(x=>x.ID\u MENU==x.ID\u MENU\u padre.ToList())中的菜单项//在我的例子中,只有根项符合此条件
{
添加(项目);
GMenuHijo(项目ID_菜单,参考lstOrdenada);
}
返回lstOrdenada;
}
`
然后,对于每个根项目,递归地查找下一个级别:
private static void GMenuHijo(int idPadre, ref List<MENU> lst)
{
List<MENU> listado2 = Listado.Where(x => x.id_menu_padre == idPadre && x.ID_MENU != x.id_menu_padre).ToList();
if (listado2.Count > 0)
{
foreach (MENU item in listado2)
{
lst.Add(item);
GMenuHijo(item.ID_MENU, ref lst);
}
}
}
private static void GMenuHijo(int-idPadre,ref-List-lst)
{
List listado2=Listado.Where(x=>x.id\u menu\u padre==idPadre&&x.id\u menu!=x.id\u menu\u padre).ToList();
如果(listado2.Count>0)
{
foreach(列表ADO2中的菜单项)
{
一、增加(项目);
GMenuHijo(项目ID_菜单,参考lst);
}
}
}
我遇到了同样的问题。jqGrid似乎希望数据已经在树结构中排序(即,它不在客户端执行排序),但我可能错了。下面是我创建的一些扩展,用于执行一个通用IEnumerable的树排序,该IEnumerable包含具有指定ID和父ID属性的对象。如果将父ID属性中的对象放置在根位置,则该属性中的对象将为null
public static class TreeSortExtensions
{
public static IEnumerable<T> OrderByTreeStructure<T>(
this IEnumerable<T> source,
string objectIDProperty,
string parentIDPropery)
{
IEnumerable<T> result = source;
if (!string.IsNullOrEmpty(objectIDProperty) && !string.IsNullOrEmpty(parentIDPropery))
{
result = source.GetChildrenOfTreeNode(null, objectIDProperty, parentIDPropery, true);
}
return result;
}
public static IEnumerable<T> GetChildrenOfTreeNode<T>(
this IEnumerable<T> source,
object parent,
string property,
string parentProperty,
bool recurse)
{
if (!string.IsNullOrEmpty(property) && !string.IsNullOrEmpty(parentProperty))
{
IEnumerable<T> children;
if (parent == null)
{
children = source.Where(x => x.GetPropertyValue(parentProperty) == null);
}
else
{
var parentIDValue = parent.GetPropertyValue(property);
children = source.Where(x => (x.GetPropertyValue(parentProperty) != null) &&
(x.GetPropertyValue(parentProperty).Equals(parentIDValue)));
}
foreach (T child in children)
{
yield return child;
if (recurse)
{
var grandChildren = source.GetChildrenOfTreeNode(child, property, parentProperty, true).ToArray();
foreach (T grandchild in grandChildren)
{
yield return grandchild;
}
}
}
}
}
public static object GetPropertyValue(this object obj, string property)
{
return obj.GetType().GetProperty(property).GetValue(obj, null);
}
}
var result1 = someEnumerable.OrderByTreeStructure("SomeIDProperty", "SomeParentIDProperty");
var result2 = someDbContext.SomeTable.OrderByTreeStructure("ID", "ParentID");