none
Trabajo con datagridview RRS feed

  • Pregunta

  • Tengo un datagridview que cargo desde mi base de datos, pero tengo creada una columna de antemano con las horas (estas varian en dependencia de tiempo de cada cita).

    Quisiera saber como hago para que cuando cargue el datagridview con los datos de mi base de datos, me cargue las filas en depedencia de la hora con la que fue guardada el dato en la base de dato, en relación a la hora que tiene la fila ya establecida (previamente fijas)

    Gracias de antemano.

    viernes, 4 de agosto de 2017 6:14

Respuestas

  • Aqui les envio mi último intento

     Try
                conectar()
                consulta = "SELECT Horario, [Primer nombre], [Segundo nombre], [Primer apellido], [Segundo apellido] FROM Agenda WHERE Fecha = '" & Agenda.mc_calendario.SelectionRange.Start.Date & "'"
                comando = New OleDbCommand(consulta, cnn)
                comando.CommandType = CommandType.Text
                comando.ExecuteNonQuery()
                adaptador = New OleDbDataAdapter(comando)
                tabla = New DataTable
                For Each row In dgv.Rows
                    For Each fila In tabla.Rows
                        If fila.Cells.Item("Horario").Value.ToString = row.cells.item("Horario").value.ToString Then
                            Dim param As String() = {fila.cells("Primer nombre").value.ToString, fila.cells("Segundo nombre").value.ToString,
                        fila.cells("Primer apellido").value.ToString, fila.cells("Segundo apellido").value.ToString}
                            dgv.Rows.Add(param)
                        End If
                    Next
                Next
                desconectar()
                dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.Bisque
                dgv.Sort(dgv.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
            Catch ex As Exception
                desconectar()
                MsgBox(ex.Message)
            End Try

    De esta última forma no me funciona, me llega a reconocer que hay horas en el datagrid y que las mismas horas están en el datatable, pero ¿Cómo lleno la fila que corresponde a la hora que encontró, en el datagrid con los datos del datatable?


    • Editado Yenier.H.C domingo, 6 de agosto de 2017 7:06 especificar más
    • Marcado como respuesta Yenier.H.C domingo, 6 de agosto de 2017 19:24
    domingo, 6 de agosto de 2017 7:06

Todas las respuestas

  • Hola Yenier:

    Te pediría que fueras mas claro en tu exposición. Vamos a ver, la columna que tiene las horas creo entender que las visualizas y que por lo tanto las tienes guardadas en tu base de datos, si es así y entiendo por segunda vez que lo único que necesitas es ordenarlas, no?. Si lo que quieres es ordenarlas simplemente a tu consulta de selección con la cual cargas el datagridview, nada más le tienes que poner la cláusula ORDER BY, para que ordene esa columna. Suponiendo que si la columna se llama horas, sería más o menos así: SELECT ....... where ... and Horas ORDER BY Asc o Desc.

    Si no es eso lo que quieres, por favor, amplía y clarifica tu pregunta.

    Un saludo.

    Gemma

    viernes, 4 de agosto de 2017 14:54
  • La primera columna es fija, creada desde el diseño y quisiera que cuando cargue los datos desde la base de datos llene solo las filas que corresponda a la hora y si hay una fila que no tiene datos en esa o esas horas dejarla en blanco
    sábado, 5 de agosto de 2017 2:54
  • aqui se observa la primera columna pero quiero que me llene la segunda y siga así para las que las horas están tomadas y sino, se quede en blanco. No se si me hago entender. Gracias de antemano.

    sábado, 5 de agosto de 2017 2:57
  • Hola

    Al momento de cargar los datos en las columnas que tienen la hora deberías comparar la hora del objeto DataGridView/columna Horario si las horas son iguales cargar la información y en donde no cumpla la condición no va a cargar nada quedara en blanco.

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    sábado, 5 de agosto de 2017 3:19
  • como sería eso? Si ud fuera tan amable de indicarme en código como sería.

    "Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas". Albert Einstein.

    sábado, 5 de agosto de 2017 3:24
  • No, no necesitas hacer las cosas por separado porque eso incurriría realizar varias consultas contra la tabla o varias operaciones en memoria. Pienso que la lista de horas -que muestras en la imagen adjunta- debe participar de la consulta de selección como un conjunto mas, la idea es combinar las horas con los datos y recuperar el match en un sólo paso, por ejemplo:

    SELECT
        t.Hora,
        ISNULL(a.Actividad, '-')
    FROM
        (VALUES ('08:00'), ('08:15'), ('08:30'), ('08:45')) AS t (Hora)
        LEFT JOIN Actividades a ON t.Hora = a.Hora
    GO

    Claro, la consulta se puede mejorar y ajustar según tu esquema de tablas pero el objetivo es que te hagas una idea de como afrontar el caso.



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    sábado, 5 de agosto de 2017 5:27
  • Muchas gracias por la ayuda, pero he entendido hasta el 40% de la solución que me das, si fueras tan amable de explicarme. Mi correo es: yenierhc@hotmail.com

    "Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas". Albert Einstein.


    • Editado Yenier.H.C sábado, 5 de agosto de 2017 11:59 agregar información
    sábado, 5 de agosto de 2017 11:59
  • Las series de tiempo las podemos generar desde la consulta de selección, la idea es cruzar las horas generadas con algún evento que coincida en el tiempo.

    Te sugiero adjuntar la consulta de selección que utilizas para cargar los eventos -o lo que fuese-, indícanos además de que tipo es la columna que contiene la hora del evento, ¿time?, ¿varchar?¿datetime?, de ser un tipo varchar indícanos que formato tiene el tiempo y algo importante: ¿el tiempo de los eventos tiene la misma frecuencia de 15 minutos?

    Quizá nos sirva y te sirva mostrarnos unas cuantas filas de la tabla que contiene los eventos.



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    sábado, 5 de agosto de 2017 15:58
  • El código que estoy tratando de usar pero no se que poner en el For es:

     Try
                conectar()
                consulta = "SELECT Horario, [Primer nombre], [Segundo nombre], [Primer apellido], [Segundo apellido] FROM Agenda WHERE Fecha = '" & Agenda.mc_calendario.SelectionRange.Start.Date & "'"
                comando = New OleDbCommand(consulta, cnn)
                comando.CommandType = CommandType.Text
                comando.ExecuteNonQuery()
                adaptador = New OleDbDataAdapter(comando)
                tabla = New DataTable
                For Each fila In tabla.Rows
                    For Each row In dgv.Rows
                        If fila.Cells.Item("Horario").Value.ToString = row.cells.item("Horario").value.ToString Then


                        End If
                    Next
                Next
                'adaptador.Fill(tabla)
                'dgv.DataSource = tabla
                desconectar()
                dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.Bisque
                dgv.Sort(Agenda.dgv_listado.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
            Catch ex As Exception
                desconectar()
                MsgBox(ex.Message)
            End Try

    domingo, 6 de agosto de 2017 6:02
  • Aqui les envio mi último intento

     Try
                conectar()
                consulta = "SELECT Horario, [Primer nombre], [Segundo nombre], [Primer apellido], [Segundo apellido] FROM Agenda WHERE Fecha = '" & Agenda.mc_calendario.SelectionRange.Start.Date & "'"
                comando = New OleDbCommand(consulta, cnn)
                comando.CommandType = CommandType.Text
                comando.ExecuteNonQuery()
                adaptador = New OleDbDataAdapter(comando)
                tabla = New DataTable
                For Each row In dgv.Rows
                    For Each fila In tabla.Rows
                        If fila.Cells.Item("Horario").Value.ToString = row.cells.item("Horario").value.ToString Then
                            Dim param As String() = {fila.cells("Primer nombre").value.ToString, fila.cells("Segundo nombre").value.ToString,
                        fila.cells("Primer apellido").value.ToString, fila.cells("Segundo apellido").value.ToString}
                            dgv.Rows.Add(param)
                        End If
                    Next
                Next
                desconectar()
                dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.Bisque
                dgv.Sort(dgv.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
            Catch ex As Exception
                desconectar()
                MsgBox(ex.Message)
            End Try

    domingo, 6 de agosto de 2017 6:32
  • Aqui les envio mi último intento

     Try
                conectar()
                consulta = "SELECT Horario, [Primer nombre], [Segundo nombre], [Primer apellido], [Segundo apellido] FROM Agenda WHERE Fecha = '" & Agenda.mc_calendario.SelectionRange.Start.Date & "'"
                comando = New OleDbCommand(consulta, cnn)
                comando.CommandType = CommandType.Text
                comando.ExecuteNonQuery()
                adaptador = New OleDbDataAdapter(comando)
                tabla = New DataTable
                For Each row In dgv.Rows
                    For Each fila In tabla.Rows
                        If fila.Cells.Item("Horario").Value.ToString = row.cells.item("Horario").value.ToString Then
                            Dim param As String() = {fila.cells("Primer nombre").value.ToString, fila.cells("Segundo nombre").value.ToString,
                        fila.cells("Primer apellido").value.ToString, fila.cells("Segundo apellido").value.ToString}
                            dgv.Rows.Add(param)
                        End If
                    Next
                Next
                desconectar()
                dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.Bisque
                dgv.Sort(dgv.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
            Catch ex As Exception
                desconectar()
                MsgBox(ex.Message)
            End Try

    De esta última forma no me funciona, me llega a reconocer que hay horas en el datagrid y que las mismas horas están en el datatable, pero ¿Cómo lleno la fila que corresponde a la hora que encontró, en el datagrid con los datos del datatable?


    • Editado Yenier.H.C domingo, 6 de agosto de 2017 7:06 especificar más
    • Marcado como respuesta Yenier.H.C domingo, 6 de agosto de 2017 19:24
    domingo, 6 de agosto de 2017 7:06