Как связать две таблицы (master-detail) в древовидном списке devexpress? - PullRequest
0 голосов
/ 20 января 2012

У меня есть две таблицы: отдел и пользователь. Отдел представляет собой древовидную структуру с полями PDeptID и DeptID (его ключ), поэтому я поместил его в компонент XtraTreeList.

Таблица пользователей связана с отделом с таблицей DeptAndUser, и в ней есть поля DeptID, UserId.

Я хочу настроить TreeList с Отделом, и когда я щелкаю по отделу, правый элемент управления сеткой отображает всех пользователей в этом отделе.

Как мне реализовать эту идею?

1 Ответ

1 голос
/ 20 января 2012

У меня обычно есть поле id в виде TreeListColumn, которое я могу выбрать, чтобы оно не отображалось в тех случаях, когда оно бесполезно для пользователя. Таким образом, у меня все еще есть легкий доступ к моим идентификаторам объектов.

Существует несколько возможностей, основанных только на предоставленной информации, для доступа к фактическим пользователям, которые соответствуют 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 и использовать его в качестве источника данных для сетки. Независимо от вашей методологии получения / хранения пользовательских данных, вам, скорее всего, потребуется обработать событие focusNodeChanged.

...