C sharp - gridview y chexkbox

   
Vista:

gridview y chexkbox

Publicado por sandra (17 intervenciones) el 11/10/2007 23:53:26
Hola a todos y gracias por todo, estoy aprendiendo con chekbox y hay algo que tengo mal, por fis me corrigen:lo que hize fue lo siguiente:
1.En mi gridview agregue un checkboxfiel, id CheckBox1
2.Adjunté un botón que debe recorrer el gridview para mirar que fila está chequeada, y si está chequeada hace algo, este es el codigo:

protected void Button1_Click(object sender, EventArgs e)
{int idEstuadiante;
CheckBox chkUsar;
GridView GridView1= new GridView();
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{[color="Red"]chkUsar = (CheckBox)this.GridView1.SelectedRow.Cells[0].FindControl("CheckBox1");
if (chkUsar.Checked)
{int idEstudiante = int.Parse(GridView1.SelectedRow.Cells[1].Text);
txtIdEstudiante.Text = idEstudiante.ToString();}
else {///} }

Pero al ejecutarlo me saca errro: Object reference not set to an instance of an objec en

chkUsar = (CheckBox)this.GridView1.SelectedRow.Cells[0].FindControl("CheckBox1");

Ahora algo curioso que veo en for (int i = 0; i < this.GridView1.Rows.Count; i++) es que Rows muestra solo 8 , supongo que muestra los 8 registros del gridview de la primera pagína y las otras??? no las recorre???????
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

RE:gridview y chexkbox

Publicado por Iván K (55 intervenciones) el 12/10/2007 17:35:04
Que honda Sandra nuevamente, el error que te sale es por lo mismo que te explique en una de los anteriores notas, y es que el SelectedRow nada más funciona cuando utilizas la propiedad AutoGenerateSelectButton y de que el usuario seleccione el renglón.

Trata utilizar este código conforme a lo que quires hacer (quitarías el for y utilizarías un foreach [perdón utilizo más el foreach por que según lo que yo he leído, es más rápido que utilizar un for]):

foreach (GridViewRow gvrRenglon in GridView1.Rows)
{
chkUsar = (CheckBox)gvrRenglon.FindControl("CheckBox1");
if (chkUsar.Checked)
{
idEstudiante = int.Parse(gvrRenglon.Cells[1].Text);
txtIdEstudiante.Text = idEstudiante.ToString()
}
else {///}
}

Haber si esto te ayuda.

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:gridview y chexkbox

Publicado por yeni (1 intervención) el 12/10/2007 21:09:38
Hola Ivan, que pena molestarte pero es que yo estoy haciendo algo parecido he ido unificando. Lo que quiero hacer es que despues de chequear los registros con un botón se recorra el gridview buscando el control chequeado y a que eso capture un dato: lo que he visto en el foro me ha ayudado mucho pero me saca un error :

Use of unassigned local variable 'CheckBox1' y lo raro es el campo si está declarado, te muestro el codigo:

protected void Button1_Click(object sender, EventArgs e)
{
int index = -1;
CheckBox CheckBox1;
GridView Gridview1 = new GridView ();
foreach (GridViewRow row in GridView1.Rows)
{
index = (int)GridView1.DataKeys[row.RowIndex].Value;
bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;
if (CheckBox1.Checked != null)----> aquí el problema
{
string strM= GridView1.SelectedRow.Cells[2].Text;
}
else
GridView1.Enabled = false;
}
}

Gracias por todo
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:gridview y chexkbox

Publicado por Iván K (55 intervenciones) el 12/10/2007 23:10:05
Que honda Yeni.

Mira el error se debe debido a que estas declarando CheckBox1 'CheckBox CheckBox1;' pero nunca lo estas igualando a algún valor, o nunca lo estas instanciando por eso te marca el error de que variable local no está asignada, a lo mejor lo que quieres hacer es en lugar de esta instrucción que tienes:

bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;

reemplazarla por:

CheckBox1 = (CheckBox)row.FindControl("CheckBox1");

con la instrucción anterior ya estas instanciando o asignando un valor a CheckBox1 por lo que ya no te debe marcar el error.

Otra cosa, también está mal la instrucción if (CheckBox1.Checked != null), por que la propiedad Checked siempre tiene que estar comparada con un valor booleano (true o false) y no con null, la instrucción que a mi parecer debes de poner o quieres es la siguiente:

if (CheckBox1 != null && CheckBox1.Checked)

Hojalá y esto te sirva.

Suerte.
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:ya funciona-gracias

Publicado por yenni (1 intervención) el 17/10/2007 23:51:04
Hola Iva, muchisimas gracias y te cuento que me funcionó , por si alguien lo necesite queda así:

protected void Button1_Click(object sender, EventArgs e)
{
int index = -1;
CheckBox CheckBox1;
GridView Gridview1 = new GridView ();
foreach (GridViewRow row in GridView1.Rows)
{
index = (int)GridView1.DataKeys[row.RowIndex].Value;
bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;
if (result == true)
{
...........
else
.................
}
}

}
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