Principales respuestas
Marcar con el ratón

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
- Propuesto como respuesta Focus Media viernes, 15 de octubre de 2010 9:31
- Marcado como respuesta Enrique M. MontejoModerator miércoles, 14 de septiembre de 2011 17:43
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
Argentinajueves, 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
- Propuesto como respuesta Focus Media viernes, 15 de octubre de 2010 9:31
- Marcado como respuesta Enrique M. MontejoModerator miércoles, 14 de septiembre de 2011 17:43
martes, 27 de julio de 2010 11:02