如何在devexpress treelist中连接两个表(master-detail)?

时间:2012-01-20 11:04:10

标签: .net devexpress master-detail xtratreelist

我有两个表:部门和用户。该部门是一个树型结构,其字段为PDeptID和DeptID(其键),因此我将其放入XtraTreeList组件中。

User表与DeptAndUser表链接到Department,其中有DeptID,UserId字段。

我想用Department设置TreeList,当我点击部门时,右边的网格控件将显示该部门的所有用户。

我如何实现这个想法?

1 个答案:

答案 0 :(得分:1)

我通常将id字段作为TreeListColumn,我可以选择在不对用户有用的情况下显示。这样我仍然可以轻松访问我的对象id。

有几种可能性仅基于提供的信息来访问与departmentId匹配的实际用户。例如,如果列表中包含所有用户,则可以使用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事件。