我有两个表:部门和用户。该部门是一个树型结构,其字段为PDeptID和DeptID(其键),因此我将其放入XtraTreeList组件中。
User表与DeptAndUser表链接到Department,其中有DeptID,UserId字段。
我想用Department设置TreeList,当我点击部门时,右边的网格控件将显示该部门的所有用户。
我如何实现这个想法?
答案 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事件。