DATASET DATAGRID ITEMINDEX DATASETINDEX

25/05/2005 - 18:53 por Jose Fernandez | Informe spam
Hola
Tengo un nuevo problema.

Tengo un datagrid (dg) que lo "filleo" con un Datatable(Tables[1]) de un
Dataset (Ds).

dg.DataSource=Ds.Tables[1];

El datagrid tiene activado los eventos Delete, Update, Edit.

Eso va bien.

Ahora. esta es la situacion. Ese dataset tiene 3 records. Cuando borro en el
dataset(mediante el metodo dg_DeleteCommand(object Source, EventArgs e))
cualquier record que no sea el ultimo, luego recibo el siguiente error si
trato de Editar o Insertar o cualquier accion con un nuevo registro en el
datagrid. El error que recido es el siguiente

System.Data.DeletedRowInaccessibleException: Deleted row information cannot
be accessed.

El error me da pienso porque en el Dataset se mantiene ese row ocupado
aunque marcado como Deleted en el RowState property y cuando trato de tomar
el valor del supuesto Item, encuentra que no es el index en el dataset que
devuelve el datagrid.

Algo curioso es que en el evento Delete_Command yo tenia previamente este
codigo y no me daba problemas

DataRow oRow= oDs.Tables[1].Rows[e.Item.ItemIndex];
oDs.Tables[1].Rows.Remove(oRow);
ActualizarGrilla(SubCategorias,1);

PERO con este metodo, el dataset no reconoce cambios (ds.HasChanges()
premanece FALSE) y yo necesito que si lo reconozca. Solo con el metodo
siguiente me cambia la propiedad HasChange a TRUE

DataRow oRow= oDs.Tables[1].Rows[e.Item.ItemIndex];
oRow.Delete();
ActualizarGrilla(SubCategorias,1);

Encontre que hay dos propiedades en e.item. Una es ItemIndex y la otra es
DataSetIndex. Tenia esperanzas que DataSetIndex me devolviera el indice en
el dataset justo como lo habia traido de la base de datos.. pero no.
ALGUIEN CONOCE las diferencias entre uno y otro? Yo no se las veo, pero las
debe tener.
Alguien sabe como se puede resolver este problema?
Saludos

Preguntas similare

Leer las respuestas

#1 Jose Antonio Torralba
28/05/2005 - 12:25 | Informe spam
Hola Jose!

La diferencia entre Remove y Delete es la siguiente (sacado de la
documentación del VS -> DataRow(Clase) ):
"Puede eliminar un DataRow de DataRowCollection llamando al método Remove de
DataRowCollection, o bien llamando al método Delete del objeto DataRow. El
método Remove quita de la colección la fila. En cambio, Delete marca el
DataRow que se va a quitar. La eliminación real se produce cuando se llama
al método AcceptChanges. Al llamar a Delete, se puede comprobar mediante
programación qué filas están marcadas para eliminación antes de
eliminarlas."

Creo que tu problema es que cuando en tu segundo código utilizas
oRow.Delete() y llamas a ActualizarGrilla() no utlizas AcceptChanges lo que
provoca que el Row siga ahí. No puedes utlizar Remove, porque este método lo
que hace es eliminar el registro del DataTable pero no del origen de datos.

Espero que te sirva, un saludo!

"Jose Fernandez" escribió en el mensaje
news:
Hola
Tengo un nuevo problema.

Tengo un datagrid (dg) que lo "filleo" con un Datatable(Tables[1]) de un
Dataset (Ds).

dg.DataSource=Ds.Tables[1];

El datagrid tiene activado los eventos Delete, Update, Edit.

Eso va bien.

Ahora. esta es la situacion. Ese dataset tiene 3 records. Cuando borro en


el
dataset(mediante el metodo dg_DeleteCommand(object Source, EventArgs e))
cualquier record que no sea el ultimo, luego recibo el siguiente error si
trato de Editar o Insertar o cualquier accion con un nuevo registro en el
datagrid. El error que recido es el siguiente

System.Data.DeletedRowInaccessibleException: Deleted row information


cannot
be accessed.

El error me da pienso porque en el Dataset se mantiene ese row ocupado
aunque marcado como Deleted en el RowState property y cuando trato de


tomar
el valor del supuesto Item, encuentra que no es el index en el dataset que
devuelve el datagrid.

Algo curioso es que en el evento Delete_Command yo tenia previamente este
codigo y no me daba problemas

DataRow oRow= oDs.Tables[1].Rows[e.Item.ItemIndex];
oDs.Tables[1].Rows.Remove(oRow);
ActualizarGrilla(SubCategorias,1);

PERO con este metodo, el dataset no reconoce cambios (ds.HasChanges()
premanece FALSE) y yo necesito que si lo reconozca. Solo con el metodo
siguiente me cambia la propiedad HasChange a TRUE

DataRow oRow= oDs.Tables[1].Rows[e.Item.ItemIndex];
oRow.Delete();
ActualizarGrilla(SubCategorias,1);

Encontre que hay dos propiedades en e.item. Una es ItemIndex y la otra es
DataSetIndex. Tenia esperanzas que DataSetIndex me devolviera el indice en
el dataset justo como lo habia traido de la base de datos.. pero no.
ALGUIEN CONOCE las diferencias entre uno y otro? Yo no se las veo, pero


las
debe tener.
Alguien sabe como se puede resolver este problema?
Saludos


Respuesta Responder a este mensaje
#2 Jose Fernandez
30/05/2005 - 21:24 | Informe spam
Creo que lo unico que me queda es en el evento DELETE del datagrid ir
llenando un array con los items que voy borrando y despues quitarlos de la
base de datos. podria hacer esto directamente en el evento pero no quiero
hacer cambios en la base de datos hasta que el usuario no haya terminado de
trabajar con el dataset.

gracias por la respuesta.

"Jose Antonio Torralba gmail.com>" <joseatorralba<ARROBA> wrote in message
news:Ow8gd%
Hola Jose!

La diferencia entre Remove y Delete es la siguiente (sacado de la
documentación del VS -> DataRow(Clase) ):
"Puede eliminar un DataRow de DataRowCollection llamando al método Remove
de
DataRowCollection, o bien llamando al método Delete del objeto DataRow. El
método Remove quita de la colección la fila. En cambio, Delete marca el
DataRow que se va a quitar. La eliminación real se produce cuando se llama
al método AcceptChanges. Al llamar a Delete, se puede comprobar mediante
programación qué filas están marcadas para eliminación antes de
eliminarlas."

Creo que tu problema es que cuando en tu segundo código utilizas
oRow.Delete() y llamas a ActualizarGrilla() no utlizas AcceptChanges lo
que
provoca que el Row siga ahí. No puedes utlizar Remove, porque este método
lo
que hace es eliminar el registro del DataTable pero no del origen de
datos.

Espero que te sirva, un saludo!

"Jose Fernandez" escribió en el mensaje
news:
Hola
Tengo un nuevo problema.

Tengo un datagrid (dg) que lo "filleo" con un Datatable(Tables[1]) de un
Dataset (Ds).

dg.DataSource=Ds.Tables[1];

El datagrid tiene activado los eventos Delete, Update, Edit.

Eso va bien.

Ahora. esta es la situacion. Ese dataset tiene 3 records. Cuando borro en


el
dataset(mediante el metodo dg_DeleteCommand(object Source, EventArgs e))
cualquier record que no sea el ultimo, luego recibo el siguiente error si
trato de Editar o Insertar o cualquier accion con un nuevo registro en el
datagrid. El error que recido es el siguiente

System.Data.DeletedRowInaccessibleException: Deleted row information


cannot
be accessed.

El error me da pienso porque en el Dataset se mantiene ese row ocupado
aunque marcado como Deleted en el RowState property y cuando trato de


tomar
el valor del supuesto Item, encuentra que no es el index en el dataset
que
devuelve el datagrid.

Algo curioso es que en el evento Delete_Command yo tenia previamente este
codigo y no me daba problemas

DataRow oRow= oDs.Tables[1].Rows[e.Item.ItemIndex];
oDs.Tables[1].Rows.Remove(oRow);
ActualizarGrilla(SubCategorias,1);

PERO con este metodo, el dataset no reconoce cambios (ds.HasChanges()
premanece FALSE) y yo necesito que si lo reconozca. Solo con el metodo
siguiente me cambia la propiedad HasChange a TRUE

DataRow oRow= oDs.Tables[1].Rows[e.Item.ItemIndex];
oRow.Delete();
ActualizarGrilla(SubCategorias,1);

Encontre que hay dos propiedades en e.item. Una es ItemIndex y la otra es
DataSetIndex. Tenia esperanzas que DataSetIndex me devolviera el indice
en
el dataset justo como lo habia traido de la base de datos.. pero no.
ALGUIEN CONOCE las diferencias entre uno y otro? Yo no se las veo, pero


las
debe tener.
Alguien sabe como se puede resolver este problema?
Saludos






Respuesta Responder a este mensaje
#3 Jose Antonio Torralba
31/05/2005 - 12:33 | Informe spam
No es necesario que utilices un array para almacenar los items borrados ya
que el propio DataSet guarda versiones de la filas, es decir, cuando
eliminas una el DataSet la marca como Deleted. Además el comportamiento de
quieres (no guardar la info en BD hasta que el usuario termine con el
dataset) lo puedes implementar con AcceptChanges y RejectChanges.

Un saludo!

"Jose Fernandez" escribió en el mensaje
news:
Creo que lo unico que me queda es en el evento DELETE del datagrid ir
llenando un array con los items que voy borrando y despues quitarlos de la
base de datos. podria hacer esto directamente en el evento pero no quiero
hacer cambios en la base de datos hasta que el usuario no haya terminado


de
trabajar con el dataset.

gracias por la respuesta.

"Jose Antonio Torralba gmail.com>" <joseatorralba<ARROBA> wrote in message
news:Ow8gd%
> Hola Jose!
>
> La diferencia entre Remove y Delete es la siguiente (sacado de la
> documentación del VS -> DataRow(Clase) ):
> "Puede eliminar un DataRow de DataRowCollection llamando al método


Remove
> de
> DataRowCollection, o bien llamando al método Delete del objeto DataRow.


El
> método Remove quita de la colección la fila. En cambio, Delete marca el
> DataRow que se va a quitar. La eliminación real se produce cuando se


llama
> al método AcceptChanges. Al llamar a Delete, se puede comprobar mediante
> programación qué filas están marcadas para eliminación antes de
> eliminarlas."
>
> Creo que tu problema es que cuando en tu segundo código utilizas
> oRow.Delete() y llamas a ActualizarGrilla() no utlizas AcceptChanges lo
> que
> provoca que el Row siga ahí. No puedes utlizar Remove, porque este


método
> lo
> que hace es eliminar el registro del DataTable pero no del origen de
> datos.
>
> Espero que te sirva, un saludo!
>
> "Jose Fernandez" escribió en el mensaje
> news:
>> Hola
>> Tengo un nuevo problema.
>>
>> Tengo un datagrid (dg) que lo "filleo" con un Datatable(Tables[1]) de


un
>> Dataset (Ds).
>>
>> dg.DataSource=Ds.Tables[1];
>>
>> El datagrid tiene activado los eventos Delete, Update, Edit.
>>
>> Eso va bien.
>>
>> Ahora. esta es la situacion. Ese dataset tiene 3 records. Cuando borro


en
> el
>> dataset(mediante el metodo dg_DeleteCommand(object Source, EventArgs


e))
>> cualquier record que no sea el ultimo, luego recibo el siguiente error


si
>> trato de Editar o Insertar o cualquier accion con un nuevo registro en


el
>> datagrid. El error que recido es el siguiente
>>
>> System.Data.DeletedRowInaccessibleException: Deleted row information
> cannot
>> be accessed.
>>
>> El error me da pienso porque en el Dataset se mantiene ese row ocupado
>> aunque marcado como Deleted en el RowState property y cuando trato de
> tomar
>> el valor del supuesto Item, encuentra que no es el index en el dataset
>> que
>> devuelve el datagrid.
>>
>> Algo curioso es que en el evento Delete_Command yo tenia previamente


este
>> codigo y no me daba problemas
>>
>> DataRow oRow= oDs.Tables[1].Rows[e.Item.ItemIndex];
>> oDs.Tables[1].Rows.Remove(oRow);
>> ActualizarGrilla(SubCategorias,1);
>>
>> PERO con este metodo, el dataset no reconoce cambios (ds.HasChanges()
>> premanece FALSE) y yo necesito que si lo reconozca. Solo con el metodo
>> siguiente me cambia la propiedad HasChange a TRUE
>>
>> DataRow oRow= oDs.Tables[1].Rows[e.Item.ItemIndex];
>> oRow.Delete();
>> ActualizarGrilla(SubCategorias,1);
>>
>> Encontre que hay dos propiedades en e.item. Una es ItemIndex y la otra


es
>> DataSetIndex. Tenia esperanzas que DataSetIndex me devolviera el indice
>> en
>> el dataset justo como lo habia traido de la base de datos.. pero no.
>> ALGUIEN CONOCE las diferencias entre uno y otro? Yo no se las veo, pero
> las
>> debe tener.
>> Alguien sabe como se puede resolver este problema?
>> Saludos
>>
>>
>
>


Respuesta Responder a este mensaje
#4 Jose Fernandez
01/06/2005 - 17:08 | Informe spam
No No.
El DELETE no me resuelve el problema pues si el cliente me borra un registro
intermedio mediante DELETE, ya despues cuando trata de modificar cualquier
registro que tomo el index en el datagrid da error pues en el dataset existe
ese index marcado como deleted pero existe. por lo que da error.
con el RemoveAt me lo borra completo del dataset y despues no se definir
quien fue borrado.
AcceptChanges me borra los rows marcados como deleted y despues no tengo
modo de saber a la hora de actualizar la database.
no veo otra alternativa que esa.
Saludos

"Jose Antonio Torralba gmail.com>" <joseatorralba<ARROBA> wrote in message
news:%23dG$
No es necesario que utilices un array para almacenar los items borrados ya
que el propio DataSet guarda versiones de la filas, es decir, cuando
eliminas una el DataSet la marca como Deleted. Además el comportamiento de
quieres (no guardar la info en BD hasta que el usuario termine con el
dataset) lo puedes implementar con AcceptChanges y RejectChanges.

Un saludo!

"Jose Fernandez" escribió en el mensaje
news:
Creo que lo unico que me queda es en el evento DELETE del datagrid ir
llenando un array con los items que voy borrando y despues quitarlos de
la
base de datos. podria hacer esto directamente en el evento pero no quiero
hacer cambios en la base de datos hasta que el usuario no haya terminado


de
trabajar con el dataset.

gracias por la respuesta.

"Jose Antonio Torralba gmail.com>" <joseatorralba<ARROBA> wrote in
message
news:Ow8gd%
> Hola Jose!
>
> La diferencia entre Remove y Delete es la siguiente (sacado de la
> documentación del VS -> DataRow(Clase) ):
> "Puede eliminar un DataRow de DataRowCollection llamando al método


Remove
> de
> DataRowCollection, o bien llamando al método Delete del objeto DataRow.


El
> método Remove quita de la colección la fila. En cambio, Delete marca el
> DataRow que se va a quitar. La eliminación real se produce cuando se


llama
> al método AcceptChanges. Al llamar a Delete, se puede comprobar
> mediante
> programación qué filas están marcadas para eliminación antes de
> eliminarlas."
>
> Creo que tu problema es que cuando en tu segundo código utilizas
> oRow.Delete() y llamas a ActualizarGrilla() no utlizas AcceptChanges lo
> que
> provoca que el Row siga ahí. No puedes utlizar Remove, porque este


método
> lo
> que hace es eliminar el registro del DataTable pero no del origen de
> datos.
>
> Espero que te sirva, un saludo!
>
> "Jose Fernandez" escribió en el mensaje
> news:
>> Hola
>> Tengo un nuevo problema.
>>
>> Tengo un datagrid (dg) que lo "filleo" con un Datatable(Tables[1]) de


un
>> Dataset (Ds).
>>
>> dg.DataSource=Ds.Tables[1];
>>
>> El datagrid tiene activado los eventos Delete, Update, Edit.
>>
>> Eso va bien.
>>
>> Ahora. esta es la situacion. Ese dataset tiene 3 records. Cuando borro


en
> el
>> dataset(mediante el metodo dg_DeleteCommand(object Source, EventArgs


e))
>> cualquier record que no sea el ultimo, luego recibo el siguiente error


si
>> trato de Editar o Insertar o cualquier accion con un nuevo registro en


el
>> datagrid. El error que recido es el siguiente
>>
>> System.Data.DeletedRowInaccessibleException: Deleted row information
> cannot
>> be accessed.
>>
>> El error me da pienso porque en el Dataset se mantiene ese row
>> ocupado
>> aunque marcado como Deleted en el RowState property y cuando trato de
> tomar
>> el valor del supuesto Item, encuentra que no es el index en el dataset
>> que
>> devuelve el datagrid.
>>
>> Algo curioso es que en el evento Delete_Command yo tenia previamente


este
>> codigo y no me daba problemas
>>
>> DataRow oRow= oDs.Tables[1].Rows[e.Item.ItemIndex];
>> oDs.Tables[1].Rows.Remove(oRow);
>> ActualizarGrilla(SubCategorias,1);
>>
>> PERO con este metodo, el dataset no reconoce cambios (ds.HasChanges()
>> premanece FALSE) y yo necesito que si lo reconozca. Solo con el metodo
>> siguiente me cambia la propiedad HasChange a TRUE
>>
>> DataRow oRow= oDs.Tables[1].Rows[e.Item.ItemIndex];
>> oRow.Delete();
>> ActualizarGrilla(SubCategorias,1);
>>
>> Encontre que hay dos propiedades en e.item. Una es ItemIndex y la otra


es
>> DataSetIndex. Tenia esperanzas que DataSetIndex me devolviera el
>> indice
>> en
>> el dataset justo como lo habia traido de la base de datos.. pero no.
>> ALGUIEN CONOCE las diferencias entre uno y otro? Yo no se las veo,
>> pero
> las
>> debe tener.
>> Alguien sabe como se puede resolver este problema?
>> Saludos
>>
>>
>
>






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