none
Cargar un kendo treeview a traves de una consulta Linq RRS feed

  • Pregunta

  • Buenas tardes amigos del foro, estoy algo confundido en un proceso que estoy realizando yo se que este no es un foro de Kendo() pero la consulta que estoy realizando si pertenece a esta categoría.  Les presento mi escenario.

    Tengo una tabla conformada de esta manera

    idstatu TipoUsuario EstadoAct EstadoDisp
      00000002   Helpdesk Aprobada Anulada
      00000001   Helpdesk Aprobada Asignada
      00000004   Helpdesk Asignada Asignada
      00000003   Helpdesk Por Revision Asignada

    quiero crear una variable IEnumerable(of TreeViewItemModel) a traves de esta consulta:

    Dim inline As List(Of TreeViewItemModel) = New List(Of TreeViewItemModel)

            inline = (From item0 In model
                      Select New TreeViewItemModel With {
                          .Text = item0.TipoUsuario,
                          .Expanded = False,
                          .Items = (From item1 In model.Where(Function(x) x.TipoUsuario = item0.TipoUsuario)
                                    Select New TreeViewItemModel With {
                                        .Text = item1.EstadoAct,
                                        .Expanded = False,
                                        .Items = (From item2 In model.Where(Function(y) y.TipoUsuario = item0.TipoUsuario And y.EstadoAct = item1.EstadoAct)
                                                  Select New TreeViewItemModel With {
                                                      .Text = item2.EstadoDisp,
                                                      .Expanded = False
                                                  }
                                    Distinct).ToList()
                                    }
                      Distinct).ToList()
                      }
                  Distinct).ToList()

    El problema esta es que me repite los nodos a pesar de que le coloco la clausula Distinct. Espero puedan ayudarme.


    José Antonio Gómez Linarez Técnico Superior en Informática

    jueves, 12 de febrero de 2015 20:34

Respuestas

  • Realice otra solución no es la mas elegante pero aquí se las dejo por si alguien tiene un problema similar, le pueda ayudar

     Dim ListTreeView As Dictionary(Of String, Dictionary(Of String, List(Of String))) = New Dictionary(Of String, Dictionary(Of String, List(Of String)))

            For Each item In ((model.OrderBy(Function(x) x.TipoUsuario)).OrderBy(Function(y) y.EstadoAct)).OrderBy(Function(z) z.EstadoDisp)
                If Not ListTreeView.ContainsKey(item.TipoUsuario) Then
                    ListTreeView.Add(item.TipoUsuario, New Dictionary(Of String, List(Of String)))
                End If
                If Not ListTreeView.Item(item.TipoUsuario).ContainsKey(item.EstadoAct) Then
                    ListTreeView.Item(item.TipoUsuario).Add(item.EstadoAct, New List(Of String))
                End If
                If Not ListTreeView.Item(item.TipoUsuario).Item(item.EstadoAct).Contains(item.EstadoDisp) Then
                    ListTreeView.Item(item.TipoUsuario).Item(item.EstadoAct).Add(item.EstadoDisp)
                End If
            Next


            inline = (From item0 In ListTreeView.Keys
                      Select New TreeViewItemModel With {
                          .Text = item0,
                          .Expanded = False,
                          .Items = (From item1 In ListTreeView.Item(item0).Keys
                                    Select New TreeViewItemModel With {
                                        .Text = item1,
                                        .Expanded = False,
                                        .Items = (From item2 In ListTreeView.Item(item0).Item(item1)
                                                  Select New TreeViewItemModel With {
                                                      .Text = item2,
                                                      .Expanded = False
                                                  }).ToList()
                                    }).ToList()
                      }).ToList()


    José Antonio Gómez Linarez Técnico Superior en Informática

    viernes, 13 de febrero de 2015 20:09

Todas las respuestas

  • Este es el resultado de la carga del TreeView

    • Helpdesk
      • Aprobada
        • Anulada
        • Asignada
      • Aprobada
        • Anulada
        • Asignada
      • Asignada
        • Asignada
      • Por Revision
        • Asignada
    • Helpdesk
      • Aprobada
        • Anulada
        • Asignada
      • Aprobada
        • Anulada
        • Asignada
      • Asignada
        • Asignada
      • Por Revision
        • Asignada
    • Helpdesk
      • Aprobada
        • Anulada
        • Asignada
      • Aprobada
        • Anulada
        • Asignada
      • Asignada
        • Asignada
      • Por Revision
        • Asignada
    • Helpdesk
      • Aprobada
        • Anulada
        • Asignada
      • Aprobada
        • Anulada
        • Asignada
      • Asignada
        • Asignada
      • Por Revision
        • Asignada

    José Antonio Gómez Linarez Técnico Superior en Informática


    jueves, 12 de febrero de 2015 20:37
  • Realice otra solución no es la mas elegante pero aquí se las dejo por si alguien tiene un problema similar, le pueda ayudar

     Dim ListTreeView As Dictionary(Of String, Dictionary(Of String, List(Of String))) = New Dictionary(Of String, Dictionary(Of String, List(Of String)))

            For Each item In ((model.OrderBy(Function(x) x.TipoUsuario)).OrderBy(Function(y) y.EstadoAct)).OrderBy(Function(z) z.EstadoDisp)
                If Not ListTreeView.ContainsKey(item.TipoUsuario) Then
                    ListTreeView.Add(item.TipoUsuario, New Dictionary(Of String, List(Of String)))
                End If
                If Not ListTreeView.Item(item.TipoUsuario).ContainsKey(item.EstadoAct) Then
                    ListTreeView.Item(item.TipoUsuario).Add(item.EstadoAct, New List(Of String))
                End If
                If Not ListTreeView.Item(item.TipoUsuario).Item(item.EstadoAct).Contains(item.EstadoDisp) Then
                    ListTreeView.Item(item.TipoUsuario).Item(item.EstadoAct).Add(item.EstadoDisp)
                End If
            Next


            inline = (From item0 In ListTreeView.Keys
                      Select New TreeViewItemModel With {
                          .Text = item0,
                          .Expanded = False,
                          .Items = (From item1 In ListTreeView.Item(item0).Keys
                                    Select New TreeViewItemModel With {
                                        .Text = item1,
                                        .Expanded = False,
                                        .Items = (From item2 In ListTreeView.Item(item0).Item(item1)
                                                  Select New TreeViewItemModel With {
                                                      .Text = item2,
                                                      .Expanded = False
                                                  }).ToList()
                                    }).ToList()
                      }).ToList()


    José Antonio Gómez Linarez Técnico Superior en Informática

    viernes, 13 de febrero de 2015 20:09