none
Cambiar representación de valores en un DataGridView - VB.Net 2010 RRS feed

  • Pregunta

  • Hola buen día (tarde, noche según lean esta publicación :D )

    Tengo un ligero problema con una aplicación en primer lugar la aplicación la desarrolle en VB6 (vaya que es una actualizacion pasarla de VB6 a VB.Net 2010 xD ) hace tres años para la escuela donde me titule, querían un sistema que les lleve el control de la bolsa de trabajo para los egresados para no hacerles largo el cuento la semana pasada me pidieron corregir algunos detalles porque se les empezaron a presentar problemas hace unas semanas, ligeros pero ya estaban estresando a la gente. En fin, eso no es lo importante. Lo que realmente interesa es un detallito que tengo con la representación de los valores en los DataGridView:

    En la base de datos (estaba en ACCESS 2003, con la actualización fue migrada a MySQL) se encuentra la tabla de Carreras, cuenta con tres campos: IdCarrera (clave primaria), Carrera (nombre de la carrera o área de estudio) y Situación (determina si el área de estudio se encuentra vigente en el plan de estudios de la escuela, de tipo bit: 0=No vigente, 1=Vigente). Entonces cuando despliego la información en el formulario todo esta perfecto, solo oculto la clave primaria, ordeno los datos por nombre de la carrera, el detalle surge cuando se muestra la situación de las carreras, me muestra ceros y unos, ya intente de varias maneras cambiar esta representación a "Vigente" y "No vigente" pero siempre me marca error, entonces mi duda es ¿cómo puedo cambiar la representación de estos valores? 0=No vigente, 1=Vigente.

    El código que tengo es el siguiente y hasta el momento solo tengo la carga de los datos en el DataGridView:

        Sub CarrerasCargar()
            Dim CadCon As String = "DataSource=localhost;Database=basededatos;userid=usuario;password=clavesecreta;"
            Dim Conexion As New MySqlConnection(CadCon)
            Dim Tabla As New DataTable
            Dim Adaptador As New MySqlDataAdapter("SELECT * FROM tblcarreras ORDER BY Carrera", CadCon)
            Try
                Dim Comando As New MySqlCommandBuilder(Adaptador)
                Adaptador.Fill(Tabla)
                With frmCatalogos
                    .dgvCarreras.Columns.Clear()
                    .dgvCarreras.DataSource = Tabla
                    .dgvCarreras.Columns(0).Visible = False 'clave primaria
                    .dgvCarreras.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 'nombre del área de estudio
                    .dgvCarreras.Columns(2).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells 'situación
                End With
            Catch ex As Exception
                MsgBox("No se pueden mostrar los datos")
            Finally
                CadCon = Nothing
                Tabla = Nothing
                Adaptador = Nothing
                Conexion.Close()
            End Try
        End Sub

    Esto lo hacía en el VB6, una asignación común como si de una variable cualquiera se tratara o de un mshflexgrid pero no me resultó:

        Private Sub SituacionCambiar01()
            Dim fila As Integer
            With frmCatalogos
                For fila = 0 To .dgvCarreras.RowCount - 1
                    If .dgvCarreras.Item(2, fila).Value = 0 Then 'no vigente
                        .dgvCarreras.Item(2, fila).Value = "No Vigente"
                    Else 'vigente
                        .dgvCarreras.Item(2, fila).Value = "Vigente"
                    End If
                Next
            End With
        End Sub

    Despúes hice esto, pero tampoco resulto:

    frmCatalogos.dgvCarreras.Item(2, fila).Value.ToString = "No Vigente"

    Como pueden ver en la primer sección de código los registros se agregan de un solo golpe, entonces tengo pensado que se lean uno por uno y antes de insertarlo al DataGridView validar el campo "Situación", si es 0 cambiarlo a "No Vigente", si es 1 cambiarlo a "Vigente" y el resto de los valores, pero no tengo idea de como hacerlo (leer registro por registro modificar la representación simbólica e insertarlo al DataGridView en VB.Net 2010), si es la forma adecuada de hacerlo o si alguién tiene una mejor forma de realizarlo se lo agradecería mucho.

    Saludos coordiales. :)


    "No hay pregunta tonta, lo que hay son tontos que no preguntan"


    viernes, 19 de octubre de 2012 1:46

Respuestas

  • Hola,

    Cómo siempre, hay varias maneras de solucionar ese inconveniente, te voy a decir dos formas, en el orden de la que mas me gusta a la que menos me gusta:

    -La primera es que dejes que tu motor de base de datos se encargue de pasarte la información exactamente cómo la necesitas; seamos francos, quien sabe mas de procesar información ....

    La clave está en modificar el select con el que obtienes la información de la tabla carreras, me imagino que en este momento es algo cómo:

    SELECT	IdCarrera, Carrera, Situación  
    FROM	Carreras

    Lo que propongo es que lo cambies por algo cómo:

    SELECT	IdCarrera, Carrera,
    		CASE WHEN Situación  = 0 THEN 'No vigente'
    		WHEN Situación  = 1 THEN 'Vigente'
    		END AS Situación
    FROM	Carreras

    Utilizando la clausula CASE.

    -La otra solución que te propongo, es que recorras el datatable (en tu caso el objeto Tabla) utilizando un ciclo For Each, y que cambies uno por uno los números por las cadenas de "Vigente" y "No vigente",

    Espero te sirva alguna de las dos soluciones.


    Un saludo, Cristian Pérez

    • Marcado como respuesta Jorge García V viernes, 19 de octubre de 2012 18:46
    viernes, 19 de octubre de 2012 13:10

Todas las respuestas

  • Hola,

    Cómo siempre, hay varias maneras de solucionar ese inconveniente, te voy a decir dos formas, en el orden de la que mas me gusta a la que menos me gusta:

    -La primera es que dejes que tu motor de base de datos se encargue de pasarte la información exactamente cómo la necesitas; seamos francos, quien sabe mas de procesar información ....

    La clave está en modificar el select con el que obtienes la información de la tabla carreras, me imagino que en este momento es algo cómo:

    SELECT	IdCarrera, Carrera, Situación  
    FROM	Carreras

    Lo que propongo es que lo cambies por algo cómo:

    SELECT	IdCarrera, Carrera,
    		CASE WHEN Situación  = 0 THEN 'No vigente'
    		WHEN Situación  = 1 THEN 'Vigente'
    		END AS Situación
    FROM	Carreras

    Utilizando la clausula CASE.

    -La otra solución que te propongo, es que recorras el datatable (en tu caso el objeto Tabla) utilizando un ciclo For Each, y que cambies uno por uno los números por las cadenas de "Vigente" y "No vigente",

    Espero te sirva alguna de las dos soluciones.


    Un saludo, Cristian Pérez

    • Marcado como respuesta Jorge García V viernes, 19 de octubre de 2012 18:46
    viernes, 19 de octubre de 2012 13:10
  • Es correcto mi estimado, muy interesante tu primera propuesta, no había manejado las sentencias de SQL a ese nivel, muchísimas gracias

    Saludos :D


    "No hay pregunta tonta, lo que hay son tontos que no preguntan"

    viernes, 19 de octubre de 2012 18:46