c# 遍历部门集合 设置 Level,IsLeaf,Expanded 等属性 需要符合jqgrid 树形表格结构 按照数据进行排序
时间: 2024-03-05 21:53:21 浏览: 98
C#遍历类的属性
假设你有一个部门集合 `List<Department>`,其中每个部门对象有如下属性:
```csharp
public class Department
{
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
public int Level { get; set; }
public bool IsLeaf { get; set; }
public bool Expanded { get; set; }
}
```
其中 `Id` 是部门的唯一标识,`Name` 是部门名称,`ParentId` 是父部门的标识,`Level` 是部门所在的层级,`IsLeaf` 表示该部门是否是叶子节点,`Expanded` 表示该节点是否默认展开。
为了符合 jqGrid 树形表格的结构,需要进行如下处理:
1. 对部门集合进行排序,按照 `ParentId` 和 `Id` 排序。这样可以保证父节点在前,子节点在后的顺序。
```csharp
var sortedDepartments = departments.OrderBy(d => d.ParentId).ThenBy(d => d.Id).ToList();
```
2. 遍历部门集合,设置每个部门的 `Level`、`IsLeaf` 和 `Expanded` 属性。
```csharp
foreach (var department in sortedDepartments)
{
int parentId = department.ParentId;
if (parentId == 0)
{
// 根节点
department.Level = 0;
department.IsLeaf = false;
department.Expanded = true;
}
else
{
// 非根节点
var parentDepartment = sortedDepartments.SingleOrDefault(d => d.Id == parentId);
if (parentDepartment != null)
{
department.Level = parentDepartment.Level + 1;
department.IsLeaf = true;
parentDepartment.IsLeaf = false;
parentDepartment.Expanded = true;
}
}
}
```
上述代码中,首先判断当前部门是否为根节点(即 `ParentId` 为 0),如果是根节点,则将其 `Level` 设为 0,`IsLeaf` 设为 false(因为根节点一定不是叶子节点),`Expanded` 设为 true(因为根节点默认展开)。
如果当前部门不是根节点,则找到其父部门对象,计算当前部门的 `Level`,并将父部门的 `IsLeaf` 设为 false(因为父部门肯定是非叶子节点),`Expanded` 设为 true(因为父部门默认展开)。
最后遍历完部门集合后,每个部门对象就都符合 jqGrid 树形表格的结构了。
阅读全文