none
COLOCAR DATOS EN UN CAMPO VACIO DE UN DATAGRIDVIEW AL LLENARLO CON DATOS DE UNA TABLA MYSQL

    Pregunta

  • Muy buenos dias amigos del foro, necesito de su ayuda para solucionar un problema.

    Tengo un datagridview (visual basic 2010) en el cual cargo datos desde una tabla (Mysql), tengo un campo en particular llamado (fechaEnt), cuando el producto sale de deposito y se entrega al cliente se pone en este campo la fecha del dia.

    Lo que yo necesito es que cuando se carquen los datos en el datagrid para hacer la consulta me coloque en el campo del grid en el cual no haya fecha de entrega la palabra "Pendiente" por ejemplo para no mostrarlo vacio.

    2° tengo un campo en otra tabla llamado "Estado" necesito reemplazar el cero por "Inactivo" y el uno por "Activo".

    Desde ya Muchisimas Gracias Por La Ayuda que me puedan brindar.

    sábado, 12 de noviembre de 2016 12:32

Respuestas

  • Seguramente no estás cargando datos DIRECTAMENTE desde la base de datos al datagridview. Lo más normal es que los estés cargando desde la base de datos a un DataTable, y luego el DataTable lo conectes mediante databinding al datagridview. Pues bien, un buen sitio para hacer lo que quieres es el propio DataTable. Ahçi están todos los datos cargados, por lo que los puedes recorrer con un bucle y comparar los valores que quieras. Y si como resultado de esa comparación decides meter un valor en otra columna del datatable, lo que metas ahí se verá en el grid.

    Por ejemplo, puedes hacer cosas como esta:

    For Each dr as DataRow in elDataTable.Rows
        If String.IsNulOrEmpty(dr("columnaFecha")) Then dr("columnaFecha")="Pendiente"
    Next

    Similarmente, puedes hacer cosas parecidas con el campo "Estado".

    Otra opción es manipular los datos directamente en la sentencia SELECT. Ahi puedes poner cosas tales como "Select ..., COALESCE(campoFecha, "Pendiente") as campoFecha, ...." para que los datos te vengan ya convertidos antes de cargarlos en el datatable. Esto requiere conocer el dialecto peculiar de SQL que entiende tu base de datos. El ejemplo que te he puesto funcionaría con SQL Server si el campo fecha tiene NULL cuando está vacío (pero no si tiene una cadena vacía). Tendrás que ajustarlo conforme con las características de tu base de datos.

    • Marcado como respuesta dj mac40 lunes, 14 de noviembre de 2016 15:15
    sábado, 12 de noviembre de 2016 13:51
  • Hola:
    Otra forma.

    En un Form con 1 DataGridView, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Try
                Dim lsCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
                'Crear DataTable
                Dim ldtDataTable As New DataTable
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(lsCadenaSQL)
                    Dim lsQuery As String = "Select FirstName, City, Region From Employees"
                    ' crear adaptador
                    Using daDataAdapter As New SqlDataAdapter(lsQuery, loConexion)
                        ' utilizar el dataadapter para llenar el datatable
                        daDataAdapter.Fill(ldtDataTable)
                    End Using
                End Using
                Me.DataGridView1.DataSource = ldtDataTable
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            ' estilo principal para todas las celdas
            Dim styEstilo As DataGridViewCellStyle
            styEstilo = New DataGridViewCellStyle()
            styEstilo.BackColor = Color.LightYellow
            styEstilo.ForeColor = Color.DarkViolet
            styEstilo.Font = New Font("Arial", 10, FontStyle.Bold)
            styEstilo.Alignment = DataGridViewContentAlignment.TopCenter
            styEstilo.NullValue = "Pendiente"
            styEstilo.SelectionBackColor = Color.DarkGreen
            styEstilo.SelectionForeColor = Color.LightSkyBlue
            styEstilo.WrapMode = DataGridViewTriState.[True]
            Me.DataGridView1.DefaultCellStyle = styEstilo
            Me.DataGridView1.AllowUserToAddRows = False
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta dj mac40 lunes, 14 de noviembre de 2016 15:15
    domingo, 13 de noviembre de 2016 9:06
  • Hola:
    Este ejemplo es con una tabla llamada equipo con 2 campos:
    id_equipo     smallint
    alta              bit
    Si se ejecuta la siguiente consulta
    SELECT   id_equipo, alta FROM equipo where id_equipo>230 and id_equipo<240
    El resultado es la siguiente imagen

    Si se ejecuta la siguiente consulta
    SELECT   id_equipo, Estado = CASE alta
             WHEN 0 THEN 'Inactivo'
             ELSE 'Activo'
          END
    FROM equipo where id_equipo>230 and id_equipo<240
    El resultado es la siguiente imagen

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta dj mac40 jueves, 24 de noviembre de 2016 10:08
    lunes, 14 de noviembre de 2016 21:36

Todas las respuestas

  • Seguramente no estás cargando datos DIRECTAMENTE desde la base de datos al datagridview. Lo más normal es que los estés cargando desde la base de datos a un DataTable, y luego el DataTable lo conectes mediante databinding al datagridview. Pues bien, un buen sitio para hacer lo que quieres es el propio DataTable. Ahçi están todos los datos cargados, por lo que los puedes recorrer con un bucle y comparar los valores que quieras. Y si como resultado de esa comparación decides meter un valor en otra columna del datatable, lo que metas ahí se verá en el grid.

    Por ejemplo, puedes hacer cosas como esta:

    For Each dr as DataRow in elDataTable.Rows
        If String.IsNulOrEmpty(dr("columnaFecha")) Then dr("columnaFecha")="Pendiente"
    Next

    Similarmente, puedes hacer cosas parecidas con el campo "Estado".

    Otra opción es manipular los datos directamente en la sentencia SELECT. Ahi puedes poner cosas tales como "Select ..., COALESCE(campoFecha, "Pendiente") as campoFecha, ...." para que los datos te vengan ya convertidos antes de cargarlos en el datatable. Esto requiere conocer el dialecto peculiar de SQL que entiende tu base de datos. El ejemplo que te he puesto funcionaría con SQL Server si el campo fecha tiene NULL cuando está vacío (pero no si tiene una cadena vacía). Tendrás que ajustarlo conforme con las características de tu base de datos.

    • Marcado como respuesta dj mac40 lunes, 14 de noviembre de 2016 15:15
    sábado, 12 de noviembre de 2016 13:51
  • Hola:
    Otra forma.

    En un Form con 1 DataGridView, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Try
                Dim lsCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
                'Crear DataTable
                Dim ldtDataTable As New DataTable
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(lsCadenaSQL)
                    Dim lsQuery As String = "Select FirstName, City, Region From Employees"
                    ' crear adaptador
                    Using daDataAdapter As New SqlDataAdapter(lsQuery, loConexion)
                        ' utilizar el dataadapter para llenar el datatable
                        daDataAdapter.Fill(ldtDataTable)
                    End Using
                End Using
                Me.DataGridView1.DataSource = ldtDataTable
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            ' estilo principal para todas las celdas
            Dim styEstilo As DataGridViewCellStyle
            styEstilo = New DataGridViewCellStyle()
            styEstilo.BackColor = Color.LightYellow
            styEstilo.ForeColor = Color.DarkViolet
            styEstilo.Font = New Font("Arial", 10, FontStyle.Bold)
            styEstilo.Alignment = DataGridViewContentAlignment.TopCenter
            styEstilo.NullValue = "Pendiente"
            styEstilo.SelectionBackColor = Color.DarkGreen
            styEstilo.SelectionForeColor = Color.LightSkyBlue
            styEstilo.WrapMode = DataGridViewTriState.[True]
            Me.DataGridView1.DefaultCellStyle = styEstilo
            Me.DataGridView1.AllowUserToAddRows = False
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta dj mac40 lunes, 14 de noviembre de 2016 15:15
    domingo, 13 de noviembre de 2016 9:06
  • Muy buenos dias amigos Alberto y Carlos muchisimas gracias por los codigos que me brindaron, hice las pruebas correspondientes y la verdad que funcionan los dos, pero adopte el del amigo carlos por que no solo llene el campo vacio con la leyenda que queria, si no que tambien, le puse color a las letras para que resalte ese campo.

    Lo que no pude hacer es, como les habia comentado en mi pregunta principal, es como reemplazar si el campo tiene 1 por la palabra "activo" y el cero por "Inactivo", mire sus codigos pero no se como hacer para modificarlos para que lo haga, ya que funcionan solo si el campo esta vacio, y el campo en cuestion tiene 1 o 0.

    Desde ya Muchisimas Gracias mis Amigos por la ayuda brindada y espero me ayuden a resolver este ultimo problema.

    lunes, 14 de noviembre de 2016 15:31
  • Hola:
    Este ejemplo es con una tabla llamada equipo con 2 campos:
    id_equipo     smallint
    alta              bit
    Si se ejecuta la siguiente consulta
    SELECT   id_equipo, alta FROM equipo where id_equipo>230 and id_equipo<240
    El resultado es la siguiente imagen

    Si se ejecuta la siguiente consulta
    SELECT   id_equipo, Estado = CASE alta
             WHEN 0 THEN 'Inactivo'
             ELSE 'Activo'
          END
    FROM equipo where id_equipo>230 and id_equipo<240
    El resultado es la siguiente imagen

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta dj mac40 jueves, 24 de noviembre de 2016 10:08
    lunes, 14 de noviembre de 2016 21:36
  • Hola amigo Carlos Muchisimas Gracias por el codigo que me facilitaste. Ahora si puede lograr lo que necesitaba te agradezco muchisimo por tu tiempo para responder mi pregunta.
    jueves, 24 de noviembre de 2016 10:13