Borrar fila en Datagrid en c#

Iniciado por zapala76, 22 Enero 2012, 03:58 AM

0 Miembros y 1 Visitante están viendo este tema.

zapala76

Hola, como estan? Querá saber si alguien me podria ayudar para borrar filas en un datagrid, el tema es el siguiente, lleno un datagrid desde una DB con cuatro filas, y tengo que borrar tres, pero al querer borrar la tercer fila me sale un error de que el indice esta fuera de rango, ya que el datagrid se redimensiona, y al borrar la segunda fila el datagrid de 4 filas en un principio pasa a tener dos, por lo que no se puede borrar la tercer fila que yo quiero boorar y por eso me sale el error de fuera de indice. Espero haberme explicado bien y gracias de antemano.-

4rkn63l

Bueno, conozco dos formas de eliminar filas de un datagrid, la primera es seleccionar la fila a eliminar y presionar la tecla suprimir, y la otra es mediante codigo que mas o menos el procedimiento seria recuperar el indice de la fila actualmente seleccionada y eliminarla con el metodo RemoveAt de la coleccion Rows del datagrid. El problema puede estar en que al momento de eliminar x fila ya sea de la primera manera o la segunda no exista una fila seleccionada.

Algo importantisimo a tomar en cuenta es que si los datos del datagrid estan enlazados a una tabla de una base de datos deberas eliminar la fila en la tabla de la bases de datos y luego actualizar el datagrid.

zapala76

Gracias por responder, y aprovecho para comentar que el datagrid esta enlazado a una DB, los datos de la BD los pngo e un BindingList y de ahi lleno el datagri, pero en dicho datagrid no quiero sacar filas seleccionadas, sino filas que cumplan cierta condicion, por eso no quiero borrar las filas de la BD.

Otra opcion que me serviria es pasar los datos que cumplan la condicion a un segundo datagrid. Igualmente muchas gracias por el tiempo y saludos.-

4rkn63l

Si lo que quieres es filtrar datos, podrias formar la consulta incluyendo una clausula where con la condicion que te interesa, enviarla a la base de datos y el resultado volcarlo en el datagrid. O para evitar muchas peticiones al servidor puedes hacer un "select *" de la tabla que contiene los datos, almacenar permanentemente el resultado en un datatable por ejemplo y luego recorrer las filas de ese datatable y si x fila cumple con la condicion entonces agregarla al datagrid. Obviamente cada vez que filtres datos antes deberias de limpiar el datagrid para que solo queden las filas que te interesan.

BlackZeroX

#4
Cita de: zapala76 en 22 Enero 2012, 03:58 AM
...
lleno un datagrid desde una DB con cuatro filas, y tengo que borrar tres, pero al querer borrar la tercer fila me sale un error de que el indice esta fuera de rango, ya que el datagrid se redimensiona
...

Ya tienes la(s) solucion(es) que son bastantes obvias!¡.

Te dejo los codigos en C++/CLI (usando .NET)... lo podras transpasar a C# demasiado facil.

1.- Elimina restando el numero de filas eliminadas al indice a eliminar, si realizas cuentas este "indice" SIEMPRE te dara "0"... el codigo por obvias razones sera:
Código (c++) [Seleccionar]

while(this->gridCalendar->SelectedRows->Count > 0)
this->gridCalendar->Rows->Remove(this->gridCalendar->SelectedRows[0]);


2.- Empiesa a eliminar la fila por el ultimo indice... de la coleccion de Filas seleccionadas...
Código (c++) [Seleccionar]

while(this->gridCalendar->SelectedRows->Count > 0)
this->gridCalendar->Rows->Remove(this->gridCalendar->SelectedRows[this->gridCalendar->SelectedRows->Count - 1]);


3.- for each...

NOTA: Para actualizar los cambios puedes dejar de lado TODAS las instrucciones SQL realizando un simple update del DataTable...

Dulces Lunas!¡.
The Dark Shadow is my passion.

zapala76

Gracias por las respuestas y de paso pongo lo que use para solucionar el problema:

t = 0;
                    for (int f = 0; f < cun; f++)
                    {
                        int pru = Convert.ToInt16(dgv_herma_Examen.Rows[f].Cells["idtitular"].Value);
                        string capo = dgv_herma_Examen.Rows[f].Cells["Exa_pagado"].Value.ToString();
                        if (capo == "Si")
                        {
                            dgv_herma_Examen.Rows.RemoveAt(f);
                            f = f - 1;

                        }
                        t++;
                        if (t == cun)
                        {
                            f = t;
                        }
                    }
"cun" es la cantidad de filas que tiene el datagrid, lo demas creo que se entiende, gracias y saludos.-