Ishizaki
Messages postés51Date d'inscriptionlundi 6 novembre 2000StatutMembreDernière intervention 4 décembre 2008
-
5 août 2008 à 15:53
Ishizaki
Messages postés51Date d'inscriptionlundi 6 novembre 2000StatutMembreDernière intervention 4 décembre 2008
-
8 août 2008 à 11:16
Bonjour tout le monde, ma question porte un évènement qui ne se déclenche pas lors d'un clic dans un custom control.
En gros, je dois créer un composant table qui permette de calculer
automatiquement des totaux, sous-totaux... J'ai donc un contrôle
Colonne (Héritant de TableCell) et un contrôle Table (Héritant de
Table), une Table comprenant plusieurs Colonnes (logique ).
Le rajout de ligne se fait sur un binding de liste que je fais à partir d'une requête SQL.
Le contrôle fonctionne, omis un "petit" détail, le tri !
Pour gérer cela, j'ai rajouté un LinkButton, et créé un évènement
associé, qui va récupérer certaines données pour réexecuter la requête
SQL et rebinder ma liste de TableRows dans le bon ordre et selon la
colonne cliquée :
/// <summary>
/// Délégué pour le tri
/// </summary>
publicdelegatevoid ColumnEventHandler(object sender,int? index);
/// <summary>
/// Evènement de tri
/// </summary>
publicevent ColumnEventHandler HyperLinkClick;
/// <summary>
/// Sur clic de la colonne
/// </summary>
///
protectedvoid OnHyperLinkClick(EventArgs e)
{
if(this.HyperLinkClick != null)
{
//Récupération d'un index
this.HyperLinkClick(this,this.Index);
}
}
/// <summary>
/// Nom de la colonne
/// </summary>
publicstring Name {get; set; }
/// <summary>
/// Init du contrôle
/// </summary>
///
Le problème, c'est que je ne passe jamais dans l'évènement, il effectue un PostBack, mais c'est tout.
Et aussi, je ne crois pas faire de la bonne façon, mais là il se trouve
que je me trouve dans le contrôle Colonne. Ma requête SQL se trouve
dans un aspx (pas de requêtes effectuées dans le contrôle, prérogatives
à respecter). Je dois donc remonter les infos jusqu'à mon aspx (index
pour le tri).
Ce que je fais, pour l'instant, et qui me semble un peu crado, c'est
que je récupère l'event de ma Colonne dans un event de ma Table, que je
récupère l'event de cette Table dans un event de mon UserControl (Table
étant contenu dans un UserControl, oui, j'aurais pu m'en passer), et
qu'enfin, je récupère l'event de mon UserControl dans mon aspx, où je
décide de réexecuter ma requête ( ce qui ne fonctionne de toute façon
pas car, comme dit plus haut, pas de passage dans l'event de ma
colonne...).
Ainsi, dans mon aspx je peux faire :
<!-- BEGIN TEMPLATE: bbcode_code -->
Code :
/// <summary>
/// Init de la page
/// </summary>
///
protectedoverridevoid OnInit(EventArgs e)
{
this.UserControl1.ColumnClick += new PageTest.TestEventHandler(UserControl1_ColumnClick);
base.OnInit(e);
}
/// <summary>
/// Clic sur une colonne
/// </summary>
///
publicvoid FillList(int? index)
{
//Remplissage de ma requête SQL
}
<!-- END TEMPLATE: bbcode_code -->
J'ai pensé utiliser un __doPostBack, mais je ne sais pas si c'est une meilleure idée.
J'ai cherché pour mon soucis, et cela viendrait du fait que vu que mon contrôle est recréé à chaque fois, et que donc je ne peux pas entrer dans l'évènement.
Si vous avez des réponses à mes questions, je vous remercie de votre
aide ^^. Et espère avoir été clair, et le plus concis possible.
Ca marche, je récupère bien les infos passées dans le GetPostBackEventReference, mais c'est moche... Y'a pas moyen que je passe par mon système d'évènements ?
Ishizaki
Messages postés51Date d'inscriptionlundi 6 novembre 2000StatutMembreDernière intervention 4 décembre 2008 6 août 2008 à 11:34
En me renseignant encore un peu plus, il se pourrait que l'évènement ne se déclenche pas car les contrôles sont rajoutés trop tard au contrôle parent. J'ai donc rajouté les contrôles directement dans le OnInit, et fais appel à l'évènement dans le OnLoad de mon Contrôle... Mais ça ne marche pas toujours pas !
/// <summary>
/// Init du contrôle
/// </summary>
///