J'ai un GridView avec un TemplateField avec une case à cocher. Mon objectif est de capturer l'événement onclick à l'aide d'autopostback et de définir un indicateur de base de données. Mon seul problème est que le feu de l'événement est deux fois. La première fois que la case à cocher (dans le paramètre de l'expéditeur) contient la valeur cliquée, je l'ai définie en fonction du clic. La deuxième fois, le paramètre sender a une case à cocher toujours cochée = false. Je suis heureux de recevoir des suggestions sur d'autres approches pour résoudre ce problème, mais mon objectif est de définir un indicateur de base de données basé sur l'utilisateur en cochant une case. Je cible .NET Framework 2.0.Si vous cliquez sur la case à cocher, la fonction onCheckedChanged se déclenche deux fois
Voici le code associé:
<div style="margin-left : 1em;margin-right:1em;">
<asp:GridView ID="RouteGridView" runat="server" AllowPaging="True"
AutoGenerateColumns="False" CellPadding="4" DataKeyNames="ROUTE_NUMBER"
ForeColor="#333333" GridLines="None" style="width:100%;"
onselectedindexchanged="RouteGridView_SelectedIndexChanged"
AllowSorting="True" onpageindexchanging="RouteGridView_PageIndexChanging"
onsorting="RouteGridView_Sorting" >
<Columns>
<%-- Column one --%>
<asp:TemplateField HeaderText="Route" SortExpression="ROUTE_NUMBER">
<ItemTemplate>
<asp:LinkButton ID="HyperLink1" runat="server" CommandName="Select" CommandArgument='<%#Eval("ROUTE_NUMBER")%>'
Text='<%# Eval("ROUTE_NUMBER") %>' ></asp:LinkButton>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<%-- Column 2 this is where the problem CheckBox is--%>
<asp:TemplateField HeaderText="Read?"
SortExpression="READ_FLAG">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server"
OnCheckedChanged="ChangeReadFlag"
AutoPostBack="true"
Checked='<%# (string)DataBinder.Eval(Container.DataItem, "READ_FLAG") == "1" %>' Enabled='<%# isSelectedRow(Container) %>' />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<%-- more columns --%
<%-- more columns --%>
</Columns>
</asp:GridView>
Voici le gestionnaire d'événements du code sous-jacent:
protected void ChangeReadFlag(object sender, EventArgs e)
{
if (RouteGridView.SelectedIndex != -1)
{
CheckBox cb = ((CheckBox)sender);
DataKey key = RouteGridView.SelectedDataKey;
//... do stuff here ...
}
}
Vous devrez peut-être poster plus de votre code pour obtenir une réponse –
Cela peut être sans rapport, mais il y a un bug dans le navigateur que si un tag ne spécifie pas un src. alors deux demandes sont faites –