Je suis coincé dans une page ASP.DataBound ASP: les événements CheckBox ne se déclenchent pas comme prévu bacause de DataBinding sur Page_Load()
La page contient un ASP: conteneur contenant plusieurs CheckBox. Je dois ajouter un événement sur ces CheckBox OnCheckChange de sorte que chaque fois que l'on clique sur l'un des CheckBox, il décoche toutes les autres cases. Je pourrais utiliser un RadioButton, mais en utilisant CheckBoxes a d'autres avantages pour moi qui sont hors de ce sujet, donc je ne veux pas utiliser les boutons radio.
Ce serait théoriquement fonctionne très bien comme ça:
<ASP:Repeater id="MyRepeater" runat="server" OnItemDataBound="MyRepeater_ItemDataBound">
<ItemTemplate>
<asp:CheckBox id="MyCB" runat="server" OnCheckedChanged="MyCB_CheckedChanged" AutoPostBack="true" />
<br/>
</ItemTemplate>
</ASP:Repeater>
et dans le code sous-jacent:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
MyRepeater.DataSource=DS;
MyRepeater.DataBind();
}
}
protected void MyCB_CheckedChanged(object sender, EventArgs e)
{
UncheckallOtherCheckBoxes();
}
Cependant, d'avoir d'autres régions de cette page pour travailler comme prévu, j'ai pour lier le DataSource sur chaque chargement de page et pas seulement la première fois. donc je dois changer Page_Load pour
protected void Page_Load(object sender, EventArgs e)
{
// if (!IsPostBack)
{
MyRepeater.DataSource=DS;
MyRepeater.DataBind();
}
}
Et cela provoque tout à l'échec! :) Parce que lorsque je clique sur une case à cocher, il déclenche Page_Load avant MyCB_CheckedChanged(). Si c'est DataBinds en premier et donc, la liaison de données envoie des cases à cocher des événements qui ne sont pas ceux effectués par l'utilisateur.
Y at-il un moyen de résoudre cela ????
Thx à l'avance.
1. Êtes-vous sûr que vous avez besoin de relier la base de données chaque fois que la page est chargée? C'est un peu inhabituel - si vous voulez expliquer vos raisons, cela pourrait aider les autres à mieux comprendre. –
@Sandy: Je pense, parce que le conteneur mentionné dans la pose est imbriqué dans un autre conteneur. Si je ne reconnais pas le conteneur maître sur PostBack, je remarque que tous les conteneurs enfants n'ont aucune donnée. –