none
Evitar que se edite una fila de un datgridview siempre en cuando la fila anterior a esa este vacia RRS feed

  • Pregunta

  • Buenas noches,tengo un problema con un DGV, para empezar mi datagridview al iniciar el formulario por defecto se llena con cierto numero de filas (20), eso lo hice con un for next para que iniciara con las 20 filas listas para rellenar,

    Hago eso para que el usuario rellene los datos correspondientes a esa tabla

    hasta alli va bien , ahora quiero que se valide, que el usuario no pueda escribir en la fila que quiera sino en la  que sigue en orden

    es decir comienza por la primera fila y que el control gridview lo obligue o no le permita ingresar datos en ninguna otra fila , mas en la que le sigue a la primera y asi consecutivamente.

    Esto ya lo he visto  en un sistema hecho en vb 6.0 , es que estoy  migrando ese sistema al .net y tiene que ser muy parecido al anterior. y ese efecto en el grid es necesario  y busco e intento pero no encuentro como hacerlo :(

    Por favor espero sus respuestas y ayuda

    Gracias

    • Cambiado Enrique M. Montejo miércoles, 16 de abril de 2014 8:15 Pregunta sobre controles de Windows Forms.
    viernes, 11 de abril de 2014 7:12

Todas las respuestas

  • Hola:

    Yo me miraría los eventos del DGV y así empezaría a plantearme como hacerlo:

    http://msdn.microsoft.com/es-es/library/system.windows.forms.datagridview_events(v=vs.110).aspx

    Con un primer vistazo sería usar el evento ROW_ENTER y usar el .RowIndex de este evento para comprobar, que el .Row que estas seleccionando está vacio e ir comprobando los anteriores hasta que encuentres el ultimo disponible.

    Cuando encuentras el último disponible, te posicionas en este mediante .CurrentCell y/o .CurrentRow, quedaría mas o menos:

    Private Sub dataGridView1_RowEnter(ByVal sender As Object, _
        ByVal e As DataGridViewCellEventArgs) _
        Handles dataGridView1.RowEnter
    
        Dim i As Integer = e.RowIndex
    
        ' Aquí tienes que poner la condición de que la fila 
        ' está disponible. En este ejemplo, que la primera
        ' celda esté vacia.
        Do While i >= 0 AndAlso dataGridView1.Rows(i-1).Cells(0).Value = ""
           i = i - 1
        Loop
    
        If i <> e.RowIndex Then
          dataGridView1.CurrentRow = dataGridView1.Rows(i)
        End If
    
    End Sub 
    
    Lo he escrito directamente sin probar, puede haber algun fallo, pero es la idea.

    Saludos

    • Propuesto como respuesta LG DES lunes, 28 de abril de 2014 9:01
    viernes, 11 de abril de 2014 12:05
  • Gracias por la respuesta, pero quiero implementar tu ejemplo y sale error en la ultima linea

    If i <> e.RowIndex Then * dataGridView1.CurrentRow = dataGridView1.Rows(i) End If

    ademas de eso he intenado cambiar la linea para evitar el error, pero aun asi el formulario donde 

    esta el datagridview no funciona oasea no carga el form

    Atte

    Jaime21

    viernes, 11 de abril de 2014 12:46
  • Hola:

    En vez de .currentrow es .currentcell, nunca me acuerdo que el .currentrow no funciona.

    Y tal como te comenté, no es una solución definitiva, es una idea de como afrontar el problema, no hay control de errores ni nada. Quita el Handles .RowEnter para ver si es problema del código del RowEnter()

    Saludos

    lunes, 14 de abril de 2014 7:41