begin process at 2010 02 10 09:54:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

Divers

 > 

Autre

 > 

Problème avec LinkButton dans un Custom Control


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème avec LinkButton dans un Custom Control

mardi 5 août 2008 à 15:53:56 | Problème avec LinkButton dans un Custom Control

Ishizaki


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>
/// <param name="e"></param>
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>
/// <param name="e"></param>
protectedoverridevoid OnInit(EventArgs e)
{
this.ID = string.Format("Column{0}", this.Name.Trim().Replace(" ",""));
this.linkButton.ID = string.Format("Link{0}", this.Name.Trim().Replace(" ",""));
 
this.linkButton.Click += new EventHandler(linkButton_Click);

 
base.OnInit(e);
}
 
 
/// <summary>
/// Clic sur la colonne
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void linkButton_Click(object sender, EventArgs e)
{
//Appel de l'évènement
this.OnHyperLinkClick(e);
}

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 :

Code :
 
/// <summary>
/// Init de la page
/// </summary>
/// <param name="e"></param>
protectedoverridevoid OnInit(EventArgs e)
{
this.UserControl1.ColumnClick += new PageTest.TestEventHandler(UserControl1_ColumnClick);
base.OnInit(e);
}
 
/// <summary>
/// Clic sur une colonne
/// </summary>
/// <param name="sender"></param>
/// <param name="index"></param>
 
void Analytic1_ColumnClick(object sender, int? index)
{
this.FillList(index);
}
 
publicvoid FillList(int? index)
{
//Remplissage de ma requête SQL
}

 
 

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.


je quote tu quotes...

mardi 5 août 2008 à 17:12:22 | Re : Problème avec LinkButton dans un Custom Control

Ishizaki

J'ai rajouté à mon linkButton un OnClientClick:

this.linkButton.OnClientClick = this.Page.GetPostBackEventReference(this.linkButton, this.linkButton.ID);

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 ?
mercredi 6 août 2008 à 10:46:07 | Re : Problème avec LinkButton dans un Custom Control

Ishizaki

Bon, encore un changement, j'ai modifié ma classe comme ceci, voir si cela avait un impact... :

/// <summary>
        /// Init du contrôle
        /// </summary>
        /// <param name="e"></param>
        protected override void OnInit(EventArgs e)
        {

            this.ID = "Column";

            this.linkButton.ID = "LinkButton";
           

            this.linkButton.Click += new EventHandler(linkButton_Click);

            base.OnInit(e);

            this.EnsureChildControls();
        }

 /// <summary>
        /// Création du contrôle
        /// </summary>
        /// <returns></returns>
        protected Panel CreateControl()
        {
            Panel panel = new Panel();

            this.linkButton.Text = this.Name;
            panel.Controls.Add(this.linkButton);

            this.linkButton.CssClass = "label";

            return panel;
        }

        /// <summary>
        /// Ajout du contrôle Panel
        /// </summary>
        protected override void CreateChildControls()
        {
            this.Controls.Add(this.CreateControl());

            base.CreateChildControls();
        }

/// <summary>
        /// Chargement du ViewState
        /// </summary>
        /// <param name="savedState"></param>
        protected override void LoadViewState(object savedState)
        {
            base.LoadViewState(savedState);

            this.EnsureChildControls();
        }


Mais toujours rien, même si je charge le ViewState, pas de passage de dans l'event de mon linkButton.... Je craaaaaaaque !

je quote tu quotes...

mercredi 6 août 2008 à 11:34:51 | Re : Problème avec LinkButton dans un Custom Control

Ishizaki

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>
        /// <param name="e"></param>
        protected override void OnInit(EventArgs e)
        {
            this.ID = string.Format("Column{0}",this.Name.Trim().Replace(" ",""));

            this.linkButton.ID = string.Format("LinkButton{0}", this.Name.Trim().Replace(" ", ""));
            this.linkButton.Text = this.Name;

            this.linkButton.Text = this.Name;
            this.Controls.Add(this.linkButton);

            

            this.linkButton.CssClass = "label";
 
          

            base.OnInit(e);

            this.EnsureChildControls();
        }


/// <summary>
        /// Chargement du contrôle
        /// </summary>
        /// <param name="e"></param>
        protected override void OnLoad(EventArgs e)
        {
            this.linkButton.Click += new EventHandler(linkButton_Click);

            base.OnLoad(e);
        }

        void linkButton_Click(object sender, EventArgs e)
        {
            this.OnHyperLinkClick(e);
        }

mercredi 6 août 2008 à 11:57:59 | Re : Problème avec LinkButton dans un Custom Control

Ishizaki

Petite précision, le contrôle global, la Table, se trouve dans une page Ajaxisée.
mercredi 6 août 2008 à 11:58:30 | Re : Problème avec LinkButton dans un Custom Control

Ishizaki

Ajaxée, pardon.

je quote tu quotes...

vendredi 8 août 2008 à 11:16:43 | Re : Problème avec LinkButton dans un Custom Control

Ishizaki

Réponse acceptée !
J'ai trouvé, il fallait que je réorganise tout au niveau des évènements de pages et de contrôles. (tout mettre dans le load).
Merci.

je quote tu quotes...



Cette discussion est classée dans : table, contrôle, colonne, index, linkbutton


Répondre à ce message

Sujets en rapport avec ce message

Comment ajouter une colonne à une table d'une base de données [ par SuperBouly ] Bonjour, Mon problème: ajouter/modifier dynamiquement une colonne dans ma base de données.J'ai mis ma table dans un datasetJ' ai ajouté une colonne à Creation d'un nouveau contrôle [ par dj200812002 ] bonjour,   bon je veux develloper une nouvelle table en asp.net, comme la table d'excel la ou je peut passer d'un champs a l'autre par tabulation et d Comment Insérer le Maximum de caractère dans une table avec une colonne de type LONG (mémo) [ par ngonka2003 ] Bonjour à tous. Mon problème est le suivant : J'utilise une Formview et un SqlDa Connaître l'index d'une colonne d'une GridView [ par drahcir ] Hello,je souhaite masquer certaines colonnes d'une GridView sur un évènement particulier.J'y arrive bien en passant l'index de ma colonne, sauf que j' Configuration reciproque dans une table access [ par zamubudio ] Bonjour, j'ai une table acces qui contient deux colonnes qui se presentent sous la forme suivante  : colonne1 | colonne 2  A          |   C B     Valeur en ComboBox Access? [ par Shion_SEIYA ] Salut à tous, Je veux utiliser une combobox pour proposer un choix, j'ai paramétré la Combo en faisant afficher 2 colonnes. Je voudrais que lorsque l' Masquer une colonne dans une datagrid [ par yassineee ] salut j'ai une datagrid composer de 3 champs(juste pour le test) et je souhaiterai masquer la 3 colonne donc brièvement: <column index [ par amand27 ] bonjour a tous,j'ai besoin de vous, je viens de creer un site sur flash, j'ai un pb lors de la mise en ligne mon site s'affiche sur mozilla mais pas s connecter un formulere html avec un table pour les enregistrements [ par mhoma79 ] j'ai un base de donnée qui me permet d'enregister les personnes connecters dans mon site web et j'ai fait le lormulaire en html et je veux relier mon Suppression de doublons dans un tableau [ par splash68 ] Bonjour,j'aimerai supprimer les doublons que j'ai dans un tableau à 2 dimensions, quelque chos du genre : [CODE]dim table_Liaison(<span s


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales