Mensaje dentro de Acceso y trabajo con datos

Gridview con chekbox y evento checkedchanged

Responder 
#1 - 03/12/2009 10:27:59 Reporta abuso | Link Permanente
Miores
Usuario no registrado
Gridview con chekbox y evento checkedchanged

Responder Citar
Buenas,

Tengo un gridView con un checkbox en cada fila, con la idea de ir marcando y con el evento del onchange, realiza una actualización en la base de datos de 0 ó 1 dependiendo si se marca o desmarca.  El problema es que cuando se lanza el evento CheckedChanged, se realiza tantas veces como checkbox marcados, pero si desmarcas un checkbox que anteriormente habías marcado (supongamos que te equivocas y lquieres desmarcarlo), lo ignora y no realiza la actualización correspondiente en la BBDD aunque visualmente no aparece marcado.  ¿Alguna otra idea para realizar la pantalla o solucionar el problema?

Muchas gracias,

  Miores



Volver arriba

Respuestas
Mostrar de en 15
#2 - 04/12/2009 17:27:31 Reporta abuso | Link Permanente
miores
Usuario no registrado
RE: Gridview con chekbox y evento checkedchanged

Responder Citar
buenas:

Finalmente he solucionado el problema. Dado que una vez que se lanzaba el evento del checkedchanged, no detectaba volver a cambiar al estado, utilizo dos checkbox que cargo en el DataBound de gridview, visible marcado o visible sin marcar.  De este modo, se ejecutan dos eventos distintos para poder realizar siempre la actualización.

Saludos,
Volver arriba

#3 - 03/12/2009 17:54:27 Reporta abuso | Link Permanente
miores
Usuario no registrado
RE: Gridview con chekbox y evento checkedchanged

Responder Citar
Un ejemplo del codigo, utilizo Master y el UpdatePanel, versión Framework 2.0

<asp:UpdatePanel ID="uppagina" runat="server" UpdateMode="Always"><ContentTemplate>
<div>
<asp:Label ID="centro" Text="texto" runat="server" />
<asp:Panel ID="pan" runat="server" Height="700px" >
<asp:GridView Width="98%" ID="gvBuscarReglas" runat="server" CaptionAlign="Left" CellPadding="0" HorizontalAlign="Left" AutoGenerateColumns="False" DataKeyNames="nasiento" EnableViewState="False" BorderStyle="None" BorderWidth="1px" OnPageIndexChanging ="gvBuscarReglas_PageIndexChanging" > <PagerSettings Mode="NextPreviousFirstLast" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="c_ncontacto" Checked='<%# Bind("mod347") %>' runat="server" AutoPostBack="true" OnCheckedChanged="chkApunte_CheckedChanged"/>
<asp:HiddenField ID="hfCodigo" runat="server" Value='<%# Eval("nasiento") %>' />
<asp:HiddenField ID="hfApunte" runat="server" Value='<%# Eval("apunte") %>' />
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center" CssClass="CELDA" />
<ItemStyle CssClass="CELDA" Width="30px" HorizontalAlign="Center" />
<ControlStyle Width="30px" />
</asp:TemplateField> <asp:TemplateField HeaderText="Codigo">
<ItemTemplate>
<a href="" >0800002</a>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel> </div>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
 
 

protected void chkApunte_CheckedChanged(object sender, EventArgs e) 

{


CheckBox dd = (CheckBox)sender;
GridViewRow objFila = (GridViewRow)dd.Parent.Parent;
HiddenField Codigo = (HiddenField)objFila.FindControl("hfCodigo");
HiddenField Apunte = (HiddenField)objFila.FindControl("hfApunte");
bool valor = dd.Checked;
if (valor)
centro.Text= "Marcado: " + objFila.RowIndex.ToString();
else
centro.Text= "No marcado " + objFila.RowIndex.ToString(); 

}



He visto que probando en otro ejemplo, con dos gridview.  si en el primero tengo un Radiobutton que al pulsar, en el evento Onchage me pinta el gridview anterior,  el evento del CheckBox funciona correctamente, sólo se ejecuta para el row correspondiente y tanto si se marca como si se desmarca. 
He intentado modificar el EnableViewState=true, porque en este segundo ejemplo sí tiene sentido,  pero da igual.

¿alguna sugerencia?

Gracias,



Volver arriba
Mostrar de en 15

Hospedado en domitienda