我有两个表:部门和用户。部门是一个树型结构,带有字段 PDeptID 和 DeptID(它的键),所以我把它放到 XtraTreeList 组件中。
User 表通过 DeptAndUser 表链接到 Department,其中包含 DeptID、UserId 字段。
我想设置带有部门的 TreeList,当我单击部门时,右侧的网格控件将显示该部门中的所有用户。
我如何实现这个想法?
我有两个表:部门和用户。部门是一个树型结构,带有字段 PDeptID 和 DeptID(它的键),所以我把它放到 XtraTreeList 组件中。
User 表通过 DeptAndUser 表链接到 Department,其中包含 DeptID、UserId 字段。
我想设置带有部门的 TreeList,当我单击部门时,右侧的网格控件将显示该部门中的所有用户。
我如何实现这个想法?
我通常将 id 字段作为 TreeListColumn ,在对用户无用的情况下,我可以选择不显示。这样我仍然可以轻松访问我的对象 ID。
仅基于提供的信息来访问与部门 ID 匹配的实际用户,有几种可能性。例如,如果您有一个列表中的所有用户,您可以使用 linq 只获取与 treeList 中选择的部门匹配的用户,然后将其用于数据源。
例如:
VB.NET:
Private Sub TreeList1_FocusedNodeChanged(sender As Object, e As DevExpress.XtraTreeList.FocusedNodeChangedEventArgs) Handles TreeList1.FocusedNodeChanged
If e.Node IsNot Nothing Then
Dim id As Integer = CInt(e.Node.GetValue("Id"))
Dim ds As List(Of UserInfo) = (From user As UserInfo In UserList Where user.DeptId = id Select user).ToList
GridControl1.DataSource = ds
GridControl1.RefreshDataSource()
End If
End Sub
C#:
private void treeList1_FocusedNodeChanged(object sender, DevExpress.XtraTreeList.FocusedNodeChangedEventArgs e)
{
if (e.Node != null) {
int id = Convert.ToInt32(e.Node.GetValue("Id"));
List<UserInfo> ds = (from user in UserList where user.DeptId == id select user).ToList;
GridControl1.DataSource = ds;
GridControl1.RefreshDataSource();
}
}
如果您的部门对象实际上有一个用户列表作为属性,您可以直接从 treeList 数据源中的该实例访问该列表,并将其用作网格的数据源。无论您获取/存储用户数据的方法是什么,您都可能需要处理focusedNodeChanged 事件。