C sharp - delete de gridview

 
Vista:

delete de gridview

Publicado por sandra (1 intervención) el 28/09/2007 22:54:16
Hola a todos, les cuento que tengo mi gridview y en el link de delete quiero primero hacer la consulta que ese registro no esté relacionado con otra tabla "por lo de la llave foranea" ya que se rebienta el aplicativo por ese lado, y sino es está en otra tabla, pues que elimine. tengo el sigte codigo hasta ahora:

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int idSitio = int.Parse(GridView1.SelectedRow.Cells[0].Text);
TextBox1.Text = idSitio.ToString();

sitioData SitioData = new sitioData();
sitioDA SitioDa = new sitioDA();
SitioData = SitioDa.consultarSitioId(idSitio);

}

Ahora no se si es GridView1_RowDeleting o GridView1_RowDeled

Primero capturo el id para buscarlo haber si está en la base de datos, la idea es que si lo encuentra saque un mensaje y si no está que lo elimine "no se como hacerlo" pero es que con solo el codigo que tengo arriba me saca el sigte error.

Object reference not set to an instance of an object. en la primera línea

Gracias por su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:delete de gridview

Publicado por Iván K (55 intervenciones) el 29/09/2007 00:09:15
Que honda Sandra.

El error se debe a la popiedad GridView1.SelectedRow que estas utilizando, ya que se tiene que estar seleccionado primero el renglón que quieres borrar por lo que tienes que activar la propiedad 'AutoGenerateSelectButton', con esto para que funcione lo que tienes, el usuario tendría que dar click en la liga de 'Seleccionar y luego a la liga de eliminar para que no te arroje el error (SelectedRow es nulo). y luego el índice de la celda, checalo bién ya que a lo mejor es el 1, ya que la en la celda 0 está la liga de eliminar, por lo que veo a lo mejor el valor Id debe de ser el índice 1.

Para que no actives la propiedad 'AutoGenerateSelectButton', haz uso del argumento que recibes del evento GridView1_RowDeleting 'e', con esto esa línea primera que tienes reemplazala por esta, para que puedas obtener el valor Id.

int idSitio = int.Parse(GridView1.Rows[e.RowIndex].Cells[1].Text);

prueba con esto para haber si se corrige tu error.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:validacion de llave foranea

Publicado por sandra (1 intervención) el 29/09/2007 21:34:16
Hola Ivan gracias por tu ayuda, me toca esperar a probarlo en la ofis el lunes ya que se me daño la pc de la casa.

Te cuento que si puedo obtener el id, cuando hago el GridView1_SelectedIndexChanged lcon a siguiente linea, el indice no 1 ya que cambie de lugar el delete.

int idSitio = int.Parse(GridView1.SelectedRow.Cells[0].Text);

y pues yo tratè de instanciar la grilla como GridView = new GridView(); pero no funcionò.

Pero te pregunto una cosita, al dar click en delete si elimina pero saca error por la llave foranea y sino està en otra tabla el dato no hay problema.

Como tu validas que no te saque error cuando ese registro està en otro tabla.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:validacion de llave foranea

Publicado por Iván K (55 intervenciones) el 30/09/2007 17:13:27
Es muy simple, dentro del mismo evento GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e), con el argumento, después de que buscas que sí existe el valor Id en otra tabla y mandas el mensaje de error de queno se puede eliminar, la única instrucción que pondrías es la siguiente:

e.Cancel = true;

Todos los eventos en los que tengan que validarse ciertos valores, reciben en su argumento esta propiedad, al iniciar siempre tendrán esta propiedad Cancel = false, indicando que no se cancele el evento hasta que lo pongas en true para que no realize nada.

Esto debe de funcionar.

Saludos Sandra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:erro de ejecucion

Publicado por sandra (17 intervenciones) el 01/10/2007 17:23:24
Hola Ivan, que pena molestarte, es que tengo un problemita con esta linea:

int idSitio = int.Parse(GridView1.Rows[e.RowIndex].Cells[1].Text);

Me sale el sigte error: Input string was not in correct format.

Gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:erro de ejecucion

Publicado por Iván K (55 intervenciones) el 01/10/2007 17:53:47
Que honda Sandra.

El error se debe a que el método int.Parse() le estas mandando una cadena (GridView1.Rows[e.RowIndex].Cells[1].Text) con un formato que no es entero, chécate si el valor de la celda 1 (Cells[1]) corresponde al valor Id que quieres leer, guíate por el diseño de la rejilla que te muestra la página, sabiendo que c# empieza a contar desde cero, si está bien este dato, verifica que si el registro o línea que quieres borrar, no tiene un valor nulo, este valor, al leerlo mediante GridView1.Rows[e.RowIndex].Cells[1].Text, te retornaría una cadena vacia "", este dato también te marcaría error por que la cadena vacia no se puede convertir a número.

Te recomiendo que pruebes primero que dato estas leyendo mediante GridView1.Rows[e.RowIndex].Cells[1].Text, utilizando:
TextBox1.Text = GridView1.Rows[e.RowIndex].Cells[1].Text;

para que veas el valor al que le está dando click para borrar y si se puede convertir a número.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:encontré el error, pero

Publicado por sandra (17 intervenciones) el 01/10/2007 18:36:46
Hola Ivan la línea que me diste está bien, lo que pasa es que el campo que debo traer que es "IdRazonSocial" lo tengo no visible y al colocarlo visible si me trae el valor. Pero es que en el gridview no debe verse ir el id, ya que primero los usuarios no lo necesitan y segundo me pidieron que no se viera, además que sobra que el valor es autonumerico y como se ha eliminado algunos registros el consecutivo no está estricto.

Como lo dejo oculto y que no me afecte las líneas :

int idSitio = int.Parse(GridView1.Rows[e.RowIndex].Cells[1].Text);
txtIdRazonSocial.Text = idSitio.ToString();

Gracias y tu ayuda me ha servido mucho y que pena estar abusando de ti.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:encontré el error, pero

Publicado por Iván K (55 intervenciones) el 01/10/2007 19:41:01
Que honda Sandra, y no hay problema, no es ninguna molestia para mí.

Ya estuve verificando, y no se por qué cuando NO haces visible el campo de la columna con el valor Id y después cuando quieres obtener el valor de ese campo invisible te trae una cadena vacía pero te encontré una solución y que sería mendiante esconder las celdas.

En el evento Load de la página escribe el siguiente código:

protected void Page_Load(object sender, EventArgs e)
{
GridView1.HeaderRow.Cells[1].Visible = false;
foreach (GridViewRow gvrRenglon in GridView1.Rows)
foreach (TableCell tcCelda in gvrRenglon.Cells)
if (gvrRenglon.Cells.GetCellIndex(tcCelda) == 1)
tcCelda.Visible = false;
}

Lo que pasa aquí es primero esconder la celda en donde aparece el título de encabezado del valor del identificador social, que vendría siendo la primera línea de código. Las otras cuatro líneas de código es para que esconda de la misma manera los valores Id para cada uno de los valores que tengas en la base de datos y que serán mostrados en el GridView. Si te fijas, se obtiene renglón (1er. foreach) y columna (2do. foreach) y después se verifica si la celda es la perteneciente al del valor Id mediante la instrucción If y después dicha celda se hace visible.

Si encuentró otro tipo de solución te avisó ya que este proceso, para tablas en las que se tenga demasiada información, puede ser algo tardada la carga de la página.

Hojalá y esto te funcione Sandra.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:super-mil gracias Ivan

Publicado por sandra (17 intervenciones) el 02/10/2007 15:39:14
Hola, funcionó de maravilla, mil y mil gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar