none
no consigo hacer For Each a las celdas de una fila RRS feed

  • Pregunta

  • Buenas 

    Estoy intentando hacer un for Each a una fila para recorrer las celdas de esta fila y que empiece a recorrerlas desde la celda 1

    y si la celda 1 es readonly = true entonces que me ponga la celda 2 en readonly = true asi hasta terminar con todas las celdas

    Gracias 

    For Each Columnas As DataGridViewCellCollection In DGV_Maltas.Rows
                    If Me.DGV_Maltas.CurrentRow.Cells(Columnas).ReadOnly = True Then
                        Me.DGV_Maltas.CurrentRow.Cells(Columnas + 1).ReadOnly = True
                    End If
                    MsgBox(Me.DGV_Maltas.CurrentRow.Cells(Columnas + 1).Value)
                Next

    miércoles, 13 de diciembre de 2017 15:54

Respuestas

  • Buenas JETET

    Estas haciendo un foreach sobre las filas del DGV en vez de sobre las celdas de la fila. Eso es el primer fallo.

    Por otro lado, quizás para este caso concreto, te venga mejor usar un bucle for en vez de foreach, porque la primera celda no te interesa evaluarla (no tiene nada anterior), y te interesa controlar en que celda estas, es cierto que puedes hacerlo con ColumnIndex, pero con el for en este caso a mi me parece que queda mas limpio, prueba:

    For i As Int= 1 To dgv.CurrentRow.Cells.Count Step 1
         dgv.CurrentRow.Cells(i).ReadOnly = dgv.CurrentRow.Cells((i - 1)).ReadOnly
    Next

    Échale un ojo a ver que te parece

    Puede que haya algún error de sintaxis, VB y yo... pero bueno, se entiende el concepto

    Quedo a la espera de tus comentarios

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta JETET miércoles, 13 de diciembre de 2017 16:35
    miércoles, 13 de diciembre de 2017 16:07

Todas las respuestas

  • Buenas JETET

    Estas haciendo un foreach sobre las filas del DGV en vez de sobre las celdas de la fila. Eso es el primer fallo.

    Por otro lado, quizás para este caso concreto, te venga mejor usar un bucle for en vez de foreach, porque la primera celda no te interesa evaluarla (no tiene nada anterior), y te interesa controlar en que celda estas, es cierto que puedes hacerlo con ColumnIndex, pero con el for en este caso a mi me parece que queda mas limpio, prueba:

    For i As Int= 1 To dgv.CurrentRow.Cells.Count Step 1
         dgv.CurrentRow.Cells(i).ReadOnly = dgv.CurrentRow.Cells((i - 1)).ReadOnly
    Next

    Échale un ojo a ver que te parece

    Puede que haya algún error de sintaxis, VB y yo... pero bueno, se entiende el concepto

    Quedo a la espera de tus comentarios

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta JETET miércoles, 13 de diciembre de 2017 16:35
    miércoles, 13 de diciembre de 2017 16:07
  • Revisa el valor de la propiedad ReadOnly de la primera celda de la "fila actual", de ser True, extiende la misma configuración a todas las celdas de la fila, por ejemplo:

    Dim CurrentRow = DGV_Maltas.CurrentRow
    If CurrentRow.Cells(0).ReadOnly Then
    	For index = 1 To CurrentRow.Cells.Count - 1
    		CurrentRow.Cells(index).ReadOnly = True
    	Next
    End If

    miércoles, 13 de diciembre de 2017 16:29
  • Gracias por responder Jorge

    He tenido que cambiar algo el codigo 

    queria hacer un for each por este error que me da al ejecutarlo

     For i = 1 To DGV_Maltas.CurrentRow.Cells.Count Step 1
                    DGV_Maltas.CurrentRow.Cells(i).ReadOnly = DGV_Maltas.CurrentRow.Cells((i - 1)).ReadOnly
                Next

    el error

    miércoles, 13 de diciembre de 2017 16:31
  • Solucionado 

    he tenido que cambiar 

    1000 gracias

    Step 1 por -1

    miércoles, 13 de diciembre de 2017 16:34
  • Ups, en VB no esta el concepto "menor que" para el for por lo que veo...

    Cambia por eso

    For i = 1 To (DGV_Maltas.CurrentRow.Cells.Count - 1) Step 1
                    DGV_Maltas.CurrentRow.Cells(i).ReadOnly = DGV_Maltas.CurrentRow.Cells((i - 1)).ReadOnly
    Next

    Tiene que terminar en Count - 1 porque las filas del control empiezan en 0 y no en 1, por eso, nosotros empezamos en 1 para saltarnos la primera, y paramos en count-1

    Nos comentas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    miércoles, 13 de diciembre de 2017 16:35