- En esta forma tengo un boton que al hacer click necesito que los renglones
que el usuario alla marcado en la columna de CheckBox se quiten y que se
refresque el DatagridViee solo con aquellos que no esten marcados
no se si me explique , estare al pendiente de cualquie duda a mi duda
Mil Gracias
> En esta forma tengo un boton que al hacer click necesito que los
> renglones que el usuario alla marcado (CheckBox) se quiten y que
> se refresque el DatagridViee solo con aquellos que no estan marcados
¿Has leído la respuesta que te he dado anteriormente?
--
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.
y no todos los que estan seleccionados a que crees que se deba?
> ya hice la prueba con lo que me enviaste pero solo me borra una fila
>
> y no todos los que estan seleccionados a que crees que se deba?
¡Vamos a ver! Si tu ejecutas:
' Referenciamos el objeto DataSet al cual está
' vinculado el control DataGridView.
'
Dim ds As DataSet = CType(DataGridView1.DataSource, DataSet)
' Refereciamos el objeto DataTable.
'
Dim dt As DataTable = ds.Tables("NombreDataTable")
' Recorremos sólo las filas seleccionadas.
'
For Each row As DataGridViewRow In DataGridView1.SelectedRows
' Eliminamos la fila.
dt.Rows.RemoveAt(row.Index)
Next
El código te tiene que eliminar TODOS los registros (filas), actualmente
SELECCIONADOS en el control DataGridView. Por tanto, ignoro porque motivo a
tí no te los elimina y a mí sí.
Exacto,
Mis filas a eliminar estan seleccionadas solo y unicamente por medio de la
columna CheckBox ,
lo que necesito eliminar son las filas que en la columna checkbox estan
seleccionadas,
al precionar un boton y que me vuelva a presenta las filas que no han sido
seleccionadas.
Mil Gracias de nuevo,
> Exacto,
> Mis filas a eliminar estan seleccionadas solo y unicamente por medio de la
> columna CheckBox, lo que necesito eliminar son las filas que en la columna
> checkbox estan seleccionadas, al precionar un boton y que me vuelva a
> presenta las filas que no han sido seleccionadas.
¡Me lo imaginaba!
A eso NO se le llama tener seleccionada una fila. Tú lo que tienes es un
campo o columna, con un valor que puede estar marcado o no, pero la fila NO
ESTÁ seleccionada.
En mi opinión personal, lo que tú deseas hacer es "complicarle" un poco la
vida al usuario de tu aplicación. ¿No es más fácil que el usuario seleccione
la fila completa (aquella fila que desea eliminar), y que cuando haga clic
en un botón, se eliminen todas aquellas que haya seleccionado? O mejor aún,
cuando pulse la tecla «Supr», que es lo normal y habitual en estos casos.
Y para seleccionar varias filas alternativas, el usuario únicamente debe
mantener pulsada la tecla «Control» conforme va seleccionando con el ratón
las filas que desea eliminar.
Todo lo que sea salirse de la norma estándar y habitual, repito que, en mi
opinión personal, es complicarle la vida al usuario, porque éste se tiene
que adaptar a otra norma para eliminar filas, ya que primero tiene que
verificar el campo para posteriormente eliminar las filas cuyo campo tipo
CheckBox esté marcado. ¿Para qué quieres marcar un campo de la tabla, si
después lo vas a eliminar? No le veo ningún sentido. :-)
De todas formas, para hacer lo que deseas tendrás que recorrer todas las
filas existentes en el objeto DataTable subyacente, y eliminar aquellas cuyo
campo tipo CheckBox se encuentre marcado. Pero, ¡claro! En este supuesto no
puedes utilizar la colección «SelectedRows» del control DataGridView, puesto
que las filas NO ESTÁN marcadas.
Cambia el bucle «For ... Next» por el siguiente:
For n As Int32 = dt.Rows.Count - 1 To 0 Step -1
' Referenciamos la fila
Dim row As DataRow = dt.Rows(n)
' Si el valor del campo tipo CheckBox está
' marcado (es True), eliminamos la fila.
'
If Convert.ToBoolean(row.Item("NombreColumna")) = True Then
dt.Rows.Remove(row)
End If
Next
Te hago saber que he utilizado el método «Remove» de la colección «Rows»
para eliminar DEFINITIVAMENTE la fila de la colección «Rows», porque el
método «Delete» del objeto DataRow no elimina la fila físicamente de la
colección; sólo la marca como «borrada», por lo que obtendrás la excepción
oportuna si posteriormente deseas acceder a dicha fila.
Es por este motivo que utilice éste tipo de bucle, en lugar del típico bucle
para recorrer una colección (For Each ... Next), y en orden inverso, porque
al eliminar físicamente la fila, se renuevan automáticamente los índices de
la colección, y acceder a un índice que no existe, provoca una excepción.
por su pronta respuesta y esos comentarios que al analizarlos me handado una
vision diferente de los que en mis aplicaciones que puedo realizar,
de nuevo mil gracias