Seleccion de filas en un DataGridView en Columan tipo CheckBox

02/03/2007 - 16:26 por MemoZuniga | Informe spam
Hola
Tengo un dilema con el DataGridView
Estoy desarrollando una aplicacion windows en VB.Net 2005 y aqui esta el
dilema
En una forma utilizo este DataGridView, Lo puedo Llenar con la informacion
que necesito del SQL, La muestro
- Al mostrar la informacion tengo una columna que es un CheckBox
- Al ver esto el usuario puede hacer click en el renglon deceado en la
columna de CheckBox y puede marcar el numero de renglones que decee

- 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

Preguntas similare

Leer las respuestas

#6 SoftJaén
03/03/2007 - 11:41 | Informe spam
"MemoZuniga" escribió:

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.

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.
Respuesta Responder a este mensaje
#7 MemoZuniga
05/03/2007 - 16:50 | Informe spam
Mil Gracias Sr,

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



"SoftJaén" wrote:

"MemoZuniga" escribió:

> 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.

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.





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida