locked
Marcar con el ratón RRS feed

  • Pregunta

  • Hola,

    Tengo el siguiente problema que no se como solucionar. Tengo en mi aplicación un datagridview he programado unas acciones en el evento  DataGridView1_CellEndEdit, dentro ejecuto el siguiente bucle para eliminar las filas que hay y volverlo a cargar con las modificaciones

    While DataGridView1.RowCount <> 1

    filas = DataGridView1.RowCount - 1

    DataGridView1.Rows.Remove(DataGridView1.Rows(filas))

    end while

    Si el usuario cambia el valor de la celda y pulsa una tecla todo funciona perfectamente pero si cambia y selecciona la celda siguiente con el ratón se produce el siguiente error

    "

     

    La operación no es válida porque origina una llamada reentrante a la función SetCurrentCellAddressCore."

    He observado que borrar bien todas las filas y salta el error al borrar la fila en la que se pulsa el ratón

    Muchísimas gracias.

     

    jueves, 24 de junio de 2010 7:34

Respuestas

  • Hola:

    ¿Y usar una vista como DataSource del Grid?

    Cualquier cambio en los datos que 'afecten' a la condicion del filtro 'RowFilter' se mostrarán/ocultarán automáticamente en el Grid.

    Saludos

    martes, 27 de julio de 2010 11:02

Todas las respuestas

  • hola

    hay algo que no entendi, o sea estas removiendo las filas de la grilla luego de una edicion ?

    no le veo mucho sentido a esta operacion

     

    por el mensaje pareceria que indica que se esta creando uan llamada recursiva de la funcion

    por ahi si explicas cuale s el objetivo, se peudan buscar otras alternativas

    saludo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 24 de junio de 2010 12:17
  • Hola,

    Lo que ocurre es lo siguiente cargo el programa que me actualiza la grilla con 10 filas, el usuario hace un filtro y de esas 10 escoge 5 a esas 5 le cambia una celda y actualizo y refresco la selección y lo que se me ocurrió fue para refrescar la grilla borrarla y volverla a cargar. Entonces si despues de la edicion pulsan enter no hay problema pero si al poner el valor nuevo en lugar de enter pulsan con el ratón da el error.

     

    Muchísimas gracias

    jueves, 24 de junio de 2010 13:35
  • Hola,

     

    lo que estas haciendo con el while lo podes hacer con:

    datagridview1.rows.clear

    eso borra todas las filas del dgv

     

    ahora, tengo el mismo problema pero con un acceso a datos:

    tengo una grilla con 3 columnas: codigo, descripcion y activo

    se supone que si pongo que no esta activo no tiene que aparecer en la lista, y para no tener que acceder al servidor y perder tiempo cuando destildo la casilla de Activo estoy tratando de que me borre la fila... pero imposible, rompe con ese error que tenes vos tambien...

     

    y queres que te diga lo peor, me fije en otro form que hacia esto lo mas bien y sin errores y ahora me lo esta haciendo... ¬¬

    ¿alguna sugerencia?

     

    domingo, 25 de julio de 2010 3:24
  • Lo pude resolver! :D:D:D

     

    mira, en lugar de usar el evento cellendedit usa cellvaluechange

    pero armate un mecanismo para que cuando cargue saltee el codigo de este evento, porque te puede quedar haciendo un bucle constante.

    en mi caso use una variable boolean que antes de cargar el dgv esta en false, cuando cargo se pone en true.

    y para que edite despues puse que al terminar la rutina del cellvaluechange ponga otra variable booleana como false

    y que cuando haga el evento cellendedit la ponga como true.

     

    te paso los codigos para ver si con eso te guias, aunke no creo que sean muy claros! :)

    PD: estoy usando MySQL aunque las variables de las consultas se llamen sql...xD

     

    Dim cargado As Boolean = False
    Dim editar As Boolean = False
    
    
      Private Sub dgvListado_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvListado.CellEndEdit
        editar = True
      End Sub
    
      Private Sub dgvListado_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvListado.CellValueChanged
        If cargado And editar Then
    
          If dgvListado.Rows(e.RowIndex).Cells(1).Value <> Nothing Then
            Dim sql As String
            Dim con As New Manejo_del_Servidor
            sql = "UPDATE rubro SET rDesc='" & dgvListado.Rows(e.RowIndex).Cells(1).Value & "' WHERE rid = " & dgvListado.Rows(e.RowIndex).Cells(0).Value & ";"
            'UPDATE nombretabla SET nomcolumna=expresion WHERE condicion ;
            con.Consultar(sql)
            sql = "UPDATE rubro SET activo = '" & dgvListado.Rows(e.RowIndex).Cells(2).Value & "' WHERE rid = " & dgvListado.Rows(e.RowIndex).Cells(0).Value & ";"
            con.Consultar(sql)
            con.Dispose()
            editar = False
            If rbtnActivo.Checked() Then
              If Me.dgvListado.Rows(e.RowIndex).Cells("activo").Value = "0" Then
                Me.dgvListado.Rows.RemoveAt(e.RowIndex)
              End If
            Else
              If rbtnInactivo.Checked Then
                If Me.dgvListado.Rows(e.RowIndex).Cells("activo").Value = "1" Then
                  Me.dgvListado.Rows.RemoveAt(e.RowIndex)
                End If
              End If
            End If
          End If
    
        End If
      End Sub
    
    
    
      Private Sub rubro_add_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim sql As String
        Dim con As New Manejo_del_Servidor
    
        sql = "SELECT rubro.rid as Id, rubro.rdesc as Descripcion" & _
          " FROM rubro;"
        dgvListado.Rows.Clear()
        'con.Conectar()
        rbtnActivo.Checked = True
        refrescar()
    
        If dgvListado.Rows.Count() > 0 Then
          dgvListado.Rows(0).Selected = True
        End If
        cargado = True
      End Sub
    

     

    domingo, 25 de julio de 2010 15:21
  • Hola:

    ¿Y usar una vista como DataSource del Grid?

    Cualquier cambio en los datos que 'afecten' a la condicion del filtro 'RowFilter' se mostrarán/ocultarán automáticamente en el Grid.

    Saludos

    martes, 27 de julio de 2010 11:02