none
Como obtener los valores de filas de una columna de un DataTable?

    Question

  • Hola Comunidad

    Agradecería que me puedan ayudar en la siguiente situación: Como obtener los valores de filas de una columna de un DataTable?, estoy haciendo un modulo de Permisos de usuarios que por medio de los campos de una BD muestra si es true o false y los necesito asignar a cada control, dejo una imagen para mayor detalle: 

    recorro cada una de las filas para asignar el valor pero se queda con la ultima que dice 'false', necesito que sea tal cual a la imagen, de todas maneras esto es dinámico para otro form pueden ser diferentes las filas de la Table va directamente relacionado a la cantidad de controles que tiene el form por eso utilizo el for each.

    Saludos

    Mauricio Hernández

    Wednesday, March 07, 2012 6:02 PM

Answers

  • "mauriciohz" escribió:

    > recorro cada una de las filas para asignar el valor pero se queda con
    > la ultima que dice 'false', necesito que sea tal cual a la imagen,

    Hola, Mauricio.

    Es normal que ello suceda, porque por cada elemento del bucle estás sobrescribiendo los valores de los campos valor1, valor2 y valor3, con lo que éstos se quedarán con el valor del último registro o fila existente en el objeto DataTable.

    Si solamente son tres filas las que tienes que leer (las que figuran en la imagen), para asignarle el valor a los tres campos que tienes declarados como Boolean a nivel de la clase frmTransaccionesServicioSentido, en lugar de leer los valores del campo del objeto DataRow, lee los valores de la celda 'Valor_control' correspondiente al control DataGridView:

      ' Valor de la primera fila
      valor1 = CBool(DataGridView1.Rows(0).Cells("valor_control").Value)

      ' Valor de la segunda fila
      valor2 = CBool(DataGridView1.Rows(1).Cells("valor_control").Value)

      ' Valor de la tercera fila
      valor3 = CBool(DataGridView1.Rows(2).Cells("valor_control").Value)

    Fíjate que sencillo, sin necesidad de recorrer las filas del objeto DataTable subyacente supuestamente enlazado con el control DataGridView. :-)

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.


    Thursday, March 08, 2012 3:15 PM
    Moderator
  • primeramente una pregunta, tieens en claro que estas recuperando un lista de elementos, no ?

    partamos de esa base, no recuperas una fila unica y puntual del grid recuperas una lista por lo tanto volcar esto nuevamente a un

    botonCargarDatos.enable

    no aplica

    si quieres ahcer eso deberias identificar y seleccionar una unaica row del grid, tomar su valor y asignarlo, por ejemplo

    Dim row As DataRow = dt.Rows(2)

    botonCargarDatos.enable = Convert.ToBoolean(row("valor_control"))

    alli estarias tomando la fila numero 3, recuerda que el indice comienza en cero, y asignandola al control

     pero seleccionas una unico registro, si cargas varios no puede determianr luego cual asignar

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Thursday, March 08, 2012 3:26 PM

All replies

  • pero valor1, valor2, valor3 que serian ? variables simples

    proque recuerda que en el for que realizas se va pisando cada informacion

    ahora si haces

    Dim valor1 As New List(Of String)

    For Each row As DataRow in dt.Rows

       valor1.Add(CStr(row("valor_control")))

    Next

    esa es una lista de informacion, lo mismo aplcias para las otras dos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Wednesday, March 07, 2012 6:20 PM
  • Hola Leandro, Gracias por contestar

    las variables las declaro en el form asi:

    Public Class frmTransaccionesServicioSentido
        Private _rol As Integer
        Private valor1 As Boolean
        Private valor2 As Boolean
        Private valor3 As Boolean

    y el metodo de esta manera:

        Private Sub PermisoUsuario()
            Dim dt As DataTable = clsUsuario.ObtenerPermisoUsuario(_rol)
            For Each row As DataRow In dt.Rows
                valor1 = CBool(row("valor_control")) 'boton cargar datos
                valor2 = CBool(row("valor_control")) 'boton exportar exel
                valor3 = CBool(row("valor_control")) 'boton buscar datos
            Next

    end sub

    estuve revisando el código que enviaste pero como se obtienen los valores de esas listas 

    lo hice así:

     'obtener permisos de usuarios por rol
        Private Sub PermisoUsuario()
            Dim dt As DataTable = clsUsuario.ObtenerPermisoUsuario(_rol)
            Dim valor1 As New List(Of String)
            Dim valor2 As New List(Of String)
            Dim valor3 As New List(Of String)
            For Each row As DataRow In dt.Rows
                valor1.Add(CStr(row("valor_control")))
                valor2.Add(CStr(row("valor_control")))
                valor3.Add(CStr(row("valor_control")))
            Next
            'como hago para asignar el valor booleano a los controles 
            'ejemplo botonCargarDatos.enable = valor1
        End Sub

    Saludos 

    M.H.

    Wednesday, March 07, 2012 6:38 PM
  • "mauriciohz" escribió:

    > recorro cada una de las filas para asignar el valor pero se queda con
    > la ultima que dice 'false', necesito que sea tal cual a la imagen,

    Hola, Mauricio.

    Es normal que ello suceda, porque por cada elemento del bucle estás sobrescribiendo los valores de los campos valor1, valor2 y valor3, con lo que éstos se quedarán con el valor del último registro o fila existente en el objeto DataTable.

    Si solamente son tres filas las que tienes que leer (las que figuran en la imagen), para asignarle el valor a los tres campos que tienes declarados como Boolean a nivel de la clase frmTransaccionesServicioSentido, en lugar de leer los valores del campo del objeto DataRow, lee los valores de la celda 'Valor_control' correspondiente al control DataGridView:

      ' Valor de la primera fila
      valor1 = CBool(DataGridView1.Rows(0).Cells("valor_control").Value)

      ' Valor de la segunda fila
      valor2 = CBool(DataGridView1.Rows(1).Cells("valor_control").Value)

      ' Valor de la tercera fila
      valor3 = CBool(DataGridView1.Rows(2).Cells("valor_control").Value)

    Fíjate que sencillo, sin necesidad de recorrer las filas del objeto DataTable subyacente supuestamente enlazado con el control DataGridView. :-)

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.


    Thursday, March 08, 2012 3:15 PM
    Moderator
  • primeramente una pregunta, tieens en claro que estas recuperando un lista de elementos, no ?

    partamos de esa base, no recuperas una fila unica y puntual del grid recuperas una lista por lo tanto volcar esto nuevamente a un

    botonCargarDatos.enable

    no aplica

    si quieres ahcer eso deberias identificar y seleccionar una unaica row del grid, tomar su valor y asignarlo, por ejemplo

    Dim row As DataRow = dt.Rows(2)

    botonCargarDatos.enable = Convert.ToBoolean(row("valor_control"))

    alli estarias tomando la fila numero 3, recuerda que el indice comienza en cero, y asignandola al control

     pero seleccionas una unico registro, si cargas varios no puede determianr luego cual asignar

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Thursday, March 08, 2012 3:26 PM