Visual Basic.NET - Datagridview Anidado

 
Vista:

Datagridview Anidado

Publicado por Fernanda (17 intervenciones) el 10/04/2019 23:09:53
Hola,

Existe alguna forma de hacer que al momento de seleccionar una fila de un datagridview se abra en otro datagridview con el detalle, debajo del dato seleccionado?

he buscado información pero no encuentro nada
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 10
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Datagridview Anidado

Publicado por Hector (4 intervenciones) el 11/04/2019 03:17:18
Claro que si se puede, aunque tambien, hay muchas tantas opciones
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar

Datagridview Anidado

Publicado por Fernanda (17 intervenciones) el 11/04/2019 15:38:33
Hola,
Me puedes decir como se hace entonces.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.119
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Datagridview Anidado

Publicado por Phil Rob (508 intervenciones) el 11/04/2019 09:23:36
Hola Fernanda,

Un DataGridView tiene una grande superficie en un Form. Es dificil de lo abrir uno en más ...

¿Queres abir un Form segundario con el DataGridView de detalle?
¿Los detalles que queres mostrar llegan de una nueva seleccion en la base de datos ?
Ej. El primero DataGridView mostra las personas y el segondo mostra los encargos de la persona seleccionado ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Datagridview Anidado

Publicado por Fernanda (17 intervenciones) el 11/04/2019 15:37:26
Hola,
Sería solo un form.
Los datagridview se "llenan" desde dos dataset, .
Exactamente lo que das como ejemplo es lo que necesito hacer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Diego
Val: 681
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Datagridview Anidado

Publicado por Diego (190 intervenciones) el 11/04/2019 12:53:34
Hola Fernanda, una forma que se me ocurre, lo he intentado y quedó bastante bien. En principio tenés que tener 2 datagridview cargados en el form activo. El primero muestra la información principal, es el que utilizas para seleccionar los registros. Ese ya lo tenés. Luego el segundo, queda oculto hasta que se genera el evento SelectionChanged del primero. Utilizando la propiedad LOCATION de tu segundo datagridview y haciendolo visible en ese momento, podés asignarle los detalles utilizando Datasource para cargar esos datos seguramente filtrados por un campo clave que te entrega la selección en el primer datagridview.

Nativamente, no existe un desplegable dentro de un control. Pero es una forma de poder encarar esta necesidad.
Espero haberte podido orientar.

Saludos y +Bytes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Datagridview Anidado

Publicado por Fernanda (17 intervenciones) el 11/04/2019 15:33:19
Hola,

Entiendo la idea...
como se que datos colocar en la propiedad Location?..... porque la idea sería que el segundo datagridview se desplegara abajo del dato seleccionado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Diego
Val: 681
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Datagridview Anidado

Publicado por Diego (190 intervenciones) el 11/04/2019 19:23:18
Hola Fernanda, te doy un ejemplo, después lo ajustas a tu necesidad....
Supone el siguiente escenario, un form con 2 datagridview dg1 (el principal, visible), y dg2 (donde van los detalles, no visible)
Utilice como campo clave un campo "ficticio" llamado ORDEN para filtrar los datos que voy a mostrar en el dg2

<<<<<<<<<<<<< Este código lo ponés en el evento SELECTIONCHANGED del dg1 >>>>>>>>>>>>>

1
2
3
4
5
6
7
8
9
10
11
12
Dim t As DataTable = nothing
 
if dt2.Select("orden =" & dg1.CurrentRow.Cells("orden").Value).count > 0 then
   t = dt2.Select("orden =" & dg1.CurrentRow.Cells("orden").Value).CopyToDataTable
else
  dg2.visible = false
   exit sub 'SALIDA FORZADA
end if
 
dg2.DataSource = t
dg2.Visible = True
dg2.Location = dg1.Location + dg1.GetCellDisplayRectangle(1, dg1.CurrentRow.Index, False).Location + New Point(0, dg1.CurrentRow.Height)

** Si te preguntas... dt2 es la tabla secundaria (la de los detalles)

Creo una DT vacia, verifico que el filtro no arroje vacio. Con el Select creo una tabla con los datos filtrados por el campo clave (ORDEN)
Asocio el datasource al resultado. El resto es posicionamiento del dg2 respecto al dg1 (Posicion del dg1 + la altura de la fila seleccionada + desplazado 1 columna en horizontal para que me permita elegir la fila siguiente del dg1)

Espero haberte podido ayudar.
Saludos y +Bytes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Diego
Val: 681
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Datagridview Anidado

Publicado por Diego (190 intervenciones) el 11/04/2019 19:43:23
Mas facil, te paso un codigo completo, crea un form1 y ponele 2 datagridview con los nombre dg1 y dg2
Asi lo probas...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Imports System.Data
Public Class Form1
    Dim dt1 As New DataTable
    Dim dt2 As New DataTable
    Dim cargando As Boolean = True
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        With dt1
            .Columns.Add("Orden", GetType(Integer))
            .Columns.Add("LEtra", GetType(String))
        End With
 
        With dt2
            .Columns.Add("Orden", GetType(Integer))
            .Columns.Add("dato", GetType(Long))
            .Columns.Add("dato2", GetType(Long))
        End With
 
        For i As Integer = 0 To 30
            Dim n As DataRow = dt1.NewRow
            n("orden") = i
            n("letra") = ChrW(i + 32)
            dt1.Rows.Add(n)
        Next
 
        dg1.DataSource = dt1
 
        For i As Integer = 0 To 100
            Dim n As DataRow = dt2.NewRow
            n("orden") = i Mod 30
            n("dato") = ChrW(i + 32)
            n("dato2") = ChrW(i + 50)
            dt2.Rows.Add(n)
        Next
 
        dg2.Visible = False
        cargando = False
    End Sub
 
    Private Sub dg1_SelectionChanged(sender As Object, e As EventArgs) Handles dg1.SelectionChanged
        If cargando Then Exit Sub
        Dim t As DataTable = dt2.Select("orden =" & dg1.CurrentRow.Cells("orden").Value).CopyToDataTable
 
        dg2.DataSource = t
        dg2.Visible = True
        dg2.Location = dg1.Location + dg1.GetCellDisplayRectangle(1, dg1.CurrentRow.Index, False).Location + New Point(0, dg1.CurrentRow.Height)
    End Sub
End Class

Contanos si va bien.
Saludos y +Bytes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Datagridview Anidado

Publicado por Fernanda (17 intervenciones) el 11/04/2019 22:11:18
Se acerca bastante a lo que necesito ...

me salvaste.... GRACIASSSSSS!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.119
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Datagridview Anidado

Publicado por Phil Rob (508 intervenciones) el 12/04/2019 18:20:20
Arribo un poco tarde ...
Veo que tienes un solucción.
Quizá pueda ser simplifcado : cuando selecciona un linea en el DGV, tienes el identificador de esta personna con cual peudes hacer una nueva requesta SQL ej. SELECT * FROM T_Encargos WHERE (IdPersonna = El_Identificador);
Aquella requesta da una DataTable. Para mostrar el segundo DataGridView, tienes que solo dar su DataSource = ElNuevaDataTable.
Disculpa la demora …
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar