Salut,

Je bosse sur un server control qui permet de gérer plusieurs adresses pour une personne donnée.

Il est composé d'une liste de choix de l'adresse et d'une série de champs.

J'ai isolé mon problème, je n'arrive pas à gérer un événement.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
        protected override void CreateChildControls()
        {
            BuildDivTitle(this.Title, this, this.TitleClass, this.Required);
 
            HtmlGenericControl divContainer = new HtmlGenericControl("div");
            HtmlTable oTbl = new HtmlTable();
            HtmlTableRow oTR;
            HtmlTableCell oTD;
 
            ListBox oSelect = new ListBox();
            oSelect.ID = "lbxAddressSelector";
            oSelect.AutoPostBack = true;
            oSelect.EnableViewState = true;
            oSelect.SelectedIndexChanged += new EventHandler(lbxAddressSelector_SelectedIndexChanged);
            ListItem oCurrentItem = new ListItem();
            oCurrentItem.Value = "-1";
            oCurrentItem.Text = "[New one]";
            oCurrentItem.Attributes.Add("style", "color:#0000FF");
            oSelect.Items.Add(oCurrentItem);
 
            foreach (CL_Address_Base oCurrAddress in Addresses)
            {
                var text =
                    from AddresseType in AddressesTypes
                    where AddresseType.Key == oCurrAddress.AddressTypeId
                    select AddresseType.Value;
                oCurrentItem = new ListItem();
                oCurrentItem.Value = oCurrAddress.AddressUserJoinId.ToString();
                oCurrentItem.Text = (string)(text.ToArray<string>())[0];
                oSelect.Items.Add(oCurrentItem);
                oTD = new HtmlTableCell();
                oTR = new HtmlTableRow();
                oTD.Controls.Add(oSelect);
                oTR.Cells.Add(oTD);
                oTbl.Rows.Add(oTR);
            }
            divContainer.Controls.Add(oTbl);
            Label lblTest = new Label();
            lblTest.Text = "Before click";
            lblTest.ID = "lblTest";
            divContainer.Controls.Add(lblTest);
            this.Controls.Add(divContainer);
            base.CreateChildControls();
        }
J'ai aussi créé un petit event handler :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
        protected void lbxAddressSelector_SelectedIndexChanged(object sender, EventArgs e)
        {
            Label lbl = (Label)Page.FindControl("lblTest");
            if (lbl != null)
            {
                lbl.Text = "After click";
            }
        }
Comme vous pouvez le voir, j'ai activé l'Auto post back. Ca compile bien mais à l'exécution, il semble que l'événement lbxAddressSelector_SelectedIndexChanged ne se produise jamais.

Qu'aurais-je oublié ...

D'avance merci pour votre aide,

Laurent

Au passage, je cherche depuis longtemps de la doc pour créer les interfaces en mode design mais sans succès, alors, si vous savez où je peux trouver de la doc là dessus, je suis preneur.