Visual Basic.NET - Actualizar las celdas de un Datagridview con los valores de otro Datagridview

 
Vista:
Imágen de perfil de Matt
Val: 180
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Actualizar las celdas de un Datagridview con los valores de otro Datagridview

Publicado por Matt (75 intervenciones) el 04/10/2020 01:18:56
Hola!

Por favor necesito ayuda...
Estoy tratando de enviar los valores de un DataGridView1(el de abajo) a un DataGridView2(el de arriba), como se muestra en la siguiente imagen:

2a

El DataGridView2 no esta enlazado con ninguna tabla ni nada, este se llena en el evento Load de la forma con el siguiente código (Aquí no hay ningún problema):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DataGridView2.Columns.Add(0, "Horario")
            Dim I As Integer
            For Each item As String In ComboBox4.Items 'get the column names from this ComboBox
                DataGridView2.Columns.Add(I, item)
                I += 1
            Next
 Dim limite As Integer
            Dim StartTime As TimeSpan = TimeSpan.Parse("08:00") 'Abre del negocio
            Dim EndTime As TimeSpan = TimeSpan.Parse("17:00") 'Cierra el negocio
            Dim duration = EndTime - StartTime
            Dim durationInmins = duration.TotalMinutes
            limite = Math.Abs(durationInmins) / 10
 
            'Genera los diferentes horarios en la columna: [Horario]
            Dim temp As Date = #01/01/0001 08:00#
            Dim starter As Date = temp
            starter = starter.AddMinutes(-10)
            Dim minu As Double = 10.0
            For s As Integer = 0 To limite
                starter = starter.AddMinutes(minu)
                DataGridView2.Rows.Add(starter.ToShortTimeString())
            Next

El DataGridView1 se llena con una tabla de mi base de datos, yo necesito poner en el DataGridView1 los nombres en las correspondientes columnas y en los correspondientes horarios, tal como se muestra en la imagen.
Hasta ahora he podido ingresar valores a las celdas correspondientes, pero solo manualmente, yo necesito que se haga de forma automática y para cada una de las columnas en el DataGridView1.
El siguiente código es el intento que hago, pero no me funciona como yo necesito:
1
2
3
4
5
6
7
8
9
10
For Each col As DataGridViewColumn In DataGridView2.Columns
                For Each row As DataGridViewRow In DataGridView1.Rows
                    Dim time_row As String = row.Cells("Horario_Inicia").Value
                    If row.Cells("Barbero").Value = "Max" Then
                        DataGridView2.Item(2, 2).Value = (row.Cells("Barbero").Value) '(Col, row)
                    Else
                        DataGridView2.Rows.Add()
                    End If
                Next
            Next

Ayúdenme por favor, realmente necesito hacer esto.
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
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Actualizar las celdas de un Datagridview con los valores de otro Datagridview

Publicado por Phil Rob (1548 intervenciones) el 04/10/2020 10:19:54
Hola Matt,

Te propongo de cambiar mi algoritmo anterior por esta :

1
2
3
4
5
6
DataGridView2.Columns.Add("Horario", "Horario")
Dim I As Integer
For Each item As String In ComboBox4.Items 'get the column names from this ComboBox
    DataGridView2.Columns.Add(item, item)
    I += 1
Next

Explico. Los parametros estan DataGridView2.Columns.Add(NombreDeLaColumna, TextoDelHeader). Esta permite de tocar un valor para el indicio de la columna y para el nombre de la columna. Cuando escribes DataGridView2.Columns.Add(0, "Horario"), el nombre es el mismo que el indicio. Perdemos una posibilidad.
Con ....Add("Horario", "Horario"), podemos hacer DataGridView2.Item(0, Linea).Valor ... o ...DataGridView2.Item("Horario", Linea).Valor.

Después, debería ser mas fácil de escribir un algoritmo parece a esta (no he testar, este es aproximativo) :

1
2
3
4
5
6
7
8
9
10
For RDGV1 As Integer = 0 to DataGridView1.Rows.count - 1
Dim Barbero As String = DataGridView1.Item(0, RDGV1).Valor     ' o DataGridView1.Item("Barbero", RDGV1).Valor   si columna llamada
Dim HorarioInicial As String = DataGridView1.Item(1, RDGV1).Valor
  For RDGV2 As Integer =  0 to DataGridView2.Rows.count - 1
     If DataGridView2.Item("Horario", RDGV2).Valor = HorarioInicial Then
         DataGridView2.Item(Barbero, RDGV2).Valor = Barbero
         Exit For
     End If
  Next
Next


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: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Actualizar las celdas de un Datagridview con los valores de otro Datagridview

Publicado por Phil Rob (1548 intervenciones) el 04/10/2020 17:00:36
Continuación ...

He tenido poco tiempo este tarde, entonces he testado mi proposición de esta mañana.

Todo el código que quieres es en el procedimiento Button1_Click.
Me he permitido de simplificar los cálculos de los horarios y he escrito Value y no Valor ... ).

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
49
50
51
52
53
54
55
Class Form8
 
    Private Sub Form8_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        ' Dar valores para testar en ComboBox4 y en DataGiirdView1
 
        ComboBox4.Items.Add("Azerty")
        ComboBox4.Items.Add("Qwerty")
        ComboBox4.Items.Add("Qwarto")
        ComboBox4.Items.Add("Panzani")
 
        DataGridView1.AllowUserToAddRows = False
 
        DataGridView1.Columns.Add("Barbero", "Barbero")
        DataGridView1.Columns.Add("Horario_Inicial", "Horario_Inicial")
 
        Dim Momento As Date = #8:00:00 AM#
        Dim minu As Integer = 10
 
        For R As Integer = 0 To ComboBox4.Items.Count - 1
            DataGridView1.Rows.Add(ComboBox4.Items(R), Momento.ToShortTimeString())
            Momento = Momento.AddMinutes(minu)
        Next
 
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        DataGridView2.Columns.Add("Horario", "Horario")
        For I As Integer = 0 To ComboBox4.Items.Count - 1
            DataGridView2.Columns.Add(ComboBox4.Items(I), ComboBox4.Items(I))
        Next
 
        Dim StartTime As Date = #8:00:00 AM#    'Abre del negocio
        Dim EndTime As Date = #5:00:00 PM#    'Cierra el negocio
        Dim Momento As Date = StartTime
        Dim minu As Integer = 10
        While Momento <= EndTime
            DataGridView2.Rows.Add(Momento.ToShortTimeString())
            Momento = Momento.AddMinutes(minu)
        End While
 
        For RDGV1 As Integer = 0 To DataGridView1.Rows.Count - 1
            Dim Barbero As String = DataGridView1.Item("Barbero", RDGV1).Value
            Dim HorarioInicial As String = DataGridView1.Item("Horario_Inicial", RDGV1).Value
            For RDGV2 As Integer = 0 To DataGridView2.Rows.Count - 1
                If DataGridView2.Item("Horario", RDGV2).Value = HorarioInicial Then
                    DataGridView2.Item(Barbero, RDGV2).Value = Barbero
                    Exit For
                End If
            Next
        Next
 
    End Sub
 
End Class

Matt20201004
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